【问题标题】:Do you like a "Lookup" table in your data models?您喜欢数据模型中的“查找”表吗?
【发布时间】: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


【解决方案1】:

您不能使用选项 #2 进行声明性引用完整性,这确实是您首先声明这些表所获得的主要好处。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多