【发布时间】:2014-04-01 21:56:11
【问题描述】:
您喜欢数据模型中的“查找”表吗?
在设计新数据模型时,我们可以为每个实体设置类型、状态和其他表,也可以将所有表组合在一个“查找”表中。你有偏好吗?赞成或反对的论据?例如
选项 1...
表:员工
EmployeeId EmployeeName EmployeeStatusId EmployeeTypeId EmployeeGenderId
123 Bob 234 345 456
表:员工状态
EmployeeStatusId EmployeeStatusName
234 Active
235 Inactive
236 Other
表:EmployeeType
EmployeeTypeId EmployeeTypeName
345 W2
346 1099
347 Other
表:员工性别
EmployeeGenderId EmployeeGenderName
456 Male
457 Female
458 Other
选项 2...
表:员工
EmployeeId EmployeeName LookupEmployeeStatusId LookupEmployeeTypeId LookupEmployeeGenderId
123 Bob 800 803 806
表:查找
LookupId LookupGroup LookupValue
800 EmployeeStatus Active
801 EmployeeStatus Inactive
802 EmployeeStatus Other
803 EmployeeType W2
804 EmployeeType 1099
805 EmployeeType Other
806 EmployeeGender Male
807 EmployeeGender Female
808 EmployeeGender Other
【问题讨论】:
-
检查一下:常见的查找表是 5 大数据库设计错误之一simple-talk.com/sql/database-administration/…
-
这是一种已知的反模式,被称为“一个真正的查找表”。你不应该这样做。
-
选项 2:- 现在编写外键约束,确保
LookupEmployeeStatusId实际上包含有效的员工身份,而不是性别... -
外键员工 {LookupEmployeeStatusId} 参考(从 Lookup WHERE LookupGroup = 'EmployeeStatus' 中选择 LookupId)。简单,不是吗?
标签: sql database-design data-modeling