数据库设计 - 计算表的主键

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。

【讨论】:

以上是关于数据库设计 - 计算表的主键的主要内容,如果未能解决你的问题,请参考以下文章

数据库主键

如何使用IdentityServer3进行登录吗

mysql - 如何在 JOIN 查询后在结果表中显示连接表的主键?

数据中台中事实表设计概述

JPA - 实体设计问题

数据库设计和非数字主键的使用