我需要保存基本会员的数据以及其他属性,例如性别,学历,职业,婚姻状况,身高,居留状态等。
我大约有15-18个查找表,每个表都有(id,名称,值),所有属性都有字符串值。
我是否应为上述每个属性创建成员表tbl_members
并分别创建15-18个查找表:
tbl_members:
mem_Id
mem_email
mem_password
Gender_Id
education_Id
profession_id
marital_status_Id
height_Id
residency_status_Id
还是只创建一个查找表
tbl_Attributes
和tbl_Attribute_Types
?tbl_Attributes:
att_Id
att_Value
att_Type_Id
示例数据:
001 - Male - 001
002 - Female - 001
003 - Graduate - 002
004 - Masters - 002
005 - Engineer - 003
006 - Designer - 003
tbl_Attribute_Types:
att_type_Id
att_type_name
示例数据:
001 - Gender
002 - Education
003 - Profession
要填充查找下拉列表,我可以选择以下内容:
SELECT A.att_id, A.att_value, AT.att_type_name
FROM tbl_Attributes A
INNER JOIN tbl_Attribute_Types AT ON AT.att_type_Id = A.att_type_Id
WHERE att_Type_Id = @att_Type_Id
另一个表
tbl_mem_att_value
用于保存成员的属性和值tbl_mem_att_value:
mem_id
att_id
member_id 001的示例数据是男性,硕士,工程师
001 - 001
001 - 004
001 - 005
所以我的问题是我应该去一个查询表还是多个查询表?
谢谢
最佳答案
切勿为所有内容使用一个查询表。这将使查找事情变得更加困难,并且可能需要在每个查询中将其多次连接,这将意味着它可能导致锁定和阻塞问题。此外,在一个表中,您不能使用良好的设计来确保描述符的数据类型正确。例如,假设您想要查找两个字符的状态缩写。如果您使用onesize适合所有表,则它必须足够宽以容纳任何查找的最大可能值,并且由于它太长而无法拒绝一个错误的条目。这是以后出现数据完整性问题的保证。
此外,您不能正确使用外键来确保数据输入仅限于正确的值。这也将导致数据完整性问题。
除了几分钟的开发时间(可能是设计数据库时最不重要的问题),使用一个表没有任何好处。有很多负面因素。