在这里,我看到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键?
答案 0 :(得分:1)
主键与任何其他键之间的原则上没有区别。无论您选择将它们指定为“主要”键,所有键都应该是不可简化的唯一且不可为空的。因此,当您有几个可能的候选键时指定任何一个主键是一个有点灵活,非正式的概念,只有设计者想要的那样重要。也许您所看到的差异只反映了不同的意见或预期用途。当然另一种可能性是有人犯了一个简单的错误。
答案 1 :(得分:0)
使用我可能是为了保持一致;一些框架假设每个表都有id作为主键,这标准化/简化了表的使用。但ER图中的“真正”主键是一个有效的键,那么为什么不通过将它标记为UNIQUE来通知DB呢?
答案 2 :(得分:0)
一个可能性ID是代理键,NAME是自然的,使用代理键设计有许多优点。例如,它们(应该是)不可变的。
如果有另一个按ID链接的表,您可以在不破坏参照完整性的情况下更改名称(例如修复溢出的mestike),或者重新启用依赖表。
另一个是你不希望Name再次成为唯一,也许为上下文添加另一列,并使Name和Context成为复合唯一键,想象一下重做所有相关表会有多痛苦。
代理人的第1条规则,不要暴露他们。