我需要保存基本会员的数据以及其他属性,例如性别,学历,职业,婚姻状况,身高,居留状态等。

我大约有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_Attributestbl_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适合所有表,则它必须足够宽以容纳任何查找的最大可能值,并且由于它太长而无法拒绝一个错误的条目。这是以后出现数据完整性问题的保证。
此外,您不能正确使用外键来确保数据输入仅限于正确的值。这也将导致数据完整性问题。

除了几分钟的开发时间(可能是设计数据库时最不重要的问题),使用一个表没有任何好处。有很多负面因素。

08-18 14:05