0

在这里,我看到 ER 图中没有可用的自动递增 id 键,但在数据字典中我看到了 id。在 er 图中,哪个属性用作主键用作数据字典中的唯一键,而自动递增 id 用作主键哪个不在 ER 图中。为什么会发生这种情况?

field    KEY              other                     NULL?

id      Primary key      auto increment             Not null

Name    Unique key                                  Not Null
....     ...........                                 ...........

谁能说出为什么使用主键 id 而不在 ER 图中显示它?为什么 ER 图的主键用作数据字典中的唯一键?

4

3 回答 3

1

主键和任何其他键在原则上没有区别。无论您是否选择将它们指定为“主要”密钥,所有密钥都应该是不可约唯一且不可为空的。因此,当您有多个可能的候选键时指定任何一个主键是一个有点灵活、非正式的概念,它仅与设计者希望的一样重要。也许您看到的差异只是反映了不同的观点或预期用途。当然,另一种可能是有人犯了一个简单的错误。

于 2012-05-27T09:38:27.743 回答
0

使用 Id 可能是为了保持一致性;一些框架假设每个表都有 id 作为主键,这标准化/简化了表的工作。但是 ER 图中的“真实”主键将是一个有效键,那么为什么不通过将其标记为 UNIQUE 来通知数据库呢?

于 2012-05-27T00:28:54.640 回答
0

一种可能的 ID 是代理键,NAME 是自然的,使用代理键的设计有许多优点。例如,它们(应该是)不可变的。

如果有另一个通过 ID 链接的表,您可以更改名称(例如修复溢出的 mestike)而不破坏参照完整性,或者重新设置相关表的密钥。

另一个可能是您不希望 Name 不再是唯一的,也许为上下文添加另一列,并使 Name 和 Context 成为复合唯一键,想象一下重新处理所有相关表将是多么痛苦。

但是,代理人的规则 1,不要暴露他们。

于 2012-05-27T01:08:18.683 回答