Geo*_*pts 3 sql database-design
我需要使用性别,教育,专业,marital_status,height,residency_status等其他属性来保存基本成员的数据.
我有大约15-18个查找表都有(id,name,value),所有属性都有字符串值.
我应该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
Run Code Online (Sandbox Code Playgroud)
或者我应该只创建一个查找表tbl_Attributes和tbl_Attribute_Types?
tbl_Attributes:
att_Id
att_Value
att_Type_Id
Run Code Online (Sandbox Code Playgroud)
示例数据:
001 - Male - 001
002 - Female - 001
003 - Graduate - 002
004 - Masters - 002
005 - Engineer - 003
006 - Designer - 003
Run Code Online (Sandbox Code Playgroud)
tbl_Attribute_Types:
att_type_Id
att_type_name
Run Code Online (Sandbox Code Playgroud)
示例数据:
001 - Gender
002 - Education
003 - Profession
Run Code Online (Sandbox Code Playgroud)
要填写查找下拉菜单,我可以选择以下内容:
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
Run Code Online (Sandbox Code Playgroud)
以及另一个tbl_mem_att_value用于保存成员属性和值的表
tbl_mem_att_value:
mem_id
att_id
Run Code Online (Sandbox Code Playgroud)
member_id 001的示例数据是Male,Masters,Engineer
001 - 001
001 - 004
001 - 005
Run Code Online (Sandbox Code Playgroud)
所以我的问题是我应该去一个查找表还是许多查找表?
谢谢
永远不要使用一个查找表.这将使查找事物变得更加困难,并且它可能需要多次加入每个查询,这意味着它可能会导致锁定和阻塞问题.此外,在一个表中,您无法使用良好的设计来确保描述符的数据类型是正确的.例如,假设您想要查找两个字符的状态缩写.如果你使用一个简单适合所有的表,那么它必须足够宽,以便任何查找的最大可能值,并且你失去了拒绝错误条目的可能性,因为它太长了.这是后期数据完整性问题的保证.
此外,您无法正确使用外键以确保数据输入仅限于正确的值.这也会导致数据完整性问题.
除了几分钟的开发时间(可能是设计数据库中最不重要的问题)之外,使用一个表没有任何好处.有很多负面因素.
| 归档时间: |
|
| 查看次数: |
4478 次 |
| 最近记录: |