关系数据库设计 - 主键字段

时间:2012-03-04 10:18:29

标签: sql-server database-design relational-database

我有这种关系理由(存储缺席理由的文件)并具有这些属性ID,类型和日期。 问题是有许多类型的理由文件医疗,婚姻,死亡...(总共7种类型)每个文件都有自己的ID,代码或序列号,这是唯一的,但大小和内容(字符,符号,数字)不同在每种类型。 我应该使用文档的ID,代码或序列号作为主键,使用最长ID大小的字段和VarChar(SQLServer)作为类型吗?或者我不应该和为什么?任何替代方案?

谢谢!

3 个答案:

答案 0 :(得分:1)

看一下ER建模中的“类别”(又称“子类型”,“子类”,“继承”)。

E.g。在ERwin Methods Guide中搜索“子类型关系”。

答案 1 :(得分:0)

这实际上取决于您的数据库将保留多少数据。这种混合的几个领域不会那么糟糕,但是几千个东西会变得复杂。我建议把它分解出来,因为你知道每个表格,分成几个表格。如果您有可能的7种类型的表格,以及持有相关理由文件的外键的理由。

example:

Justification
-------
JustificationId
DocumentId



Document (linking table)
-------
DocumentId
MedicalId
DeathId
etc.

Medical
-------
MedicalId
Date
Reason
DoctorSigning
etc.

答案 2 :(得分:0)

  1. 主键的建议是:

    a)如果使用无符号

    ,快速查找和轻松存储的整数可以达到40亿行

    b)应该没有商业意义,以便在业务规则发生变化时不受影响

  2. 因此,请勿使用ID或代码或序列号作为主键,因为它们会降低数据库的速度。

  3. 但是,如果这些列具有唯一值,那么您可能需要一个唯一的键约束来强制执行该操作。