数据库设计 - 计算表的主键
Posted
技术标签:
【中文标题】数据库设计 - 计算表的主键【英文标题】:Database Design - Working out the primary key for a table 【发布时间】:2012-03-01 20:29:06 【问题描述】:我有一个小型数据库(16 个实体和大约 70 个属性),但我无法为其中一个表计算出最合乎逻辑的主键。
我有学生和近亲。一个学生可以有一个近亲,但近亲可以是许多学生的 NOK。我认为我应该使用 NOKname 和 NOKrelationship (与学生的关系作为复合键但是如果例如 NOK 有两个孩子,他们可能是两者的 NOK 并且是两者的父亲!
NOK
的属性:
NName
NAddress
NTelNumber
NRelationship
Student
的属性:
StudentNumber
PFirstName
PSurName
PAddress
PDOB
DateRegistered
Sex
PTelNumber
MaritalStatus
DateWaitingList
DatePlaced
ExpectedLengthStay
DateLeave
感谢您提供的任何建议!
【问题讨论】:
【参考方案1】:向 NOK 表添加 Id 并将 NOKId 添加到 Student 表。这将允许每个学生使用一个 NOK,但 NOK 可以用于多个学生。
【讨论】:
谢谢,但这表明存在 M..M(asterix 不起作用)关系,因此需要链接表 不,我的建议是提供 1:M 关系,即每个学生一个挪威克朗,但同一个挪威克朗可以在多个学生身上重复使用。如果您想要 M:M,则需要一个链接表。该方法实现了 1:M,不需要额外的表。【参考方案2】:对于学生,我建议制作一个单独的键,而不是这些字段中的任何一个。
它应该是主键、整数(如果您计划超过数百万学生,则应该是 bigint)、自增字段。您可以将其称为通用名称,例如 RID(用于行标识符)。
近亲将有一个类似的表的主要 RID。然后是一个链接表,如果一个学生有多个近亲……如果只有一个近亲,NOK 表可以有一个指向学生表 RID 字段的外键 RID。
【讨论】:
以上是关于数据库设计 - 计算表的主键的主要内容,如果未能解决你的问题,请参考以下文章