为什么自动增量id被用作DATA字典中的主键,即使ER图中已有主键可用?

时间:2012-05-27 00:19:34

标签: database database-design

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

field    KEY              other                     NULL?

id      Primary key      auto increment             Not null

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

任何人都可以说出为什么使用主键id而不在ER图中显示它?为什么ER图的主键在数据字典中用作UNIQUE键?

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

如果有另一个按ID链接的表,您可以在不破坏参照完整性的情况下更改名称(例如修复溢出的mestike),或者重新启用依赖表。

另一个是你不希望Name再次成为唯一,也许为上下文添加另一列,并使Name和Context成为复合唯一键,想象一下重做所有相关表会有多痛苦。

代理人的第1条规则,不要暴露他们。