我已经通过link:
Database Design: Composite key vs one column primary key
我的问题是:
对于一个永远不能作为外键引用到任何其他表的表,在基于单列的主键与多列/复合列主键的插入/更新方面,+ve / -ve方面是什么?
谢谢
发布于 2010-08-19 15:57:17
是的,在以下情况下,多列主键仍然是一个不好的选择:
因为:
中的每个条目中
因此:如果您有一个200字节大小的复合主键,并且您的表上有一些非聚集索引,那么您将在SQL Server上浪费大量的内存-不仅是在(相对便宜的)磁盘上,而且在SQL Server主内存(通常不是很便宜)中也是如此。
除了浪费空间,您的性能也会滞后,因为更大的索引意味着更多的磁盘I/O用于相同的操作。
一般而言:如果您永远不需要引用该表(实际上永远不需要,甚至将来也不需要),并且如果您在该表上没有其他非聚集索引,则只在表上使用复合主键。
发布于 2010-08-19 17:48:53
你怎么可能绝对确定你的密钥“永远不会被FK引用”呢?
您的属性组合确实是唯一的(否则您不会考虑将其设置为“主键”)。
因此,您的属性组合是识别您的表中描述的真实事物的有效方法。
说这永远不能被FK引用等于说“关于这类东西的任何额外信息都不会变得与业务相关”。你怎么可能知道呢?
发布于 2010-08-19 16:22:37
业务需求(数据完整性需求)应该是决定实现哪些键的因素。在一个属性上强制唯一性显然与在多个属性上强制不同,因为在一种情况下允许的重复项在另一种情况下是不允许的(当然,除非同时实现两个键)。
请注意,marc的答案仅适用于聚集索引,而不适用于主键。它们不是一回事。他的回答也针对SQL Server。
https://stackoverflow.com/questions/3519690
复制相似问题