使用复合/复合主键有哪些缺点?
可能导致规范化的更多问题(2NF," 请注意,当1NF表没有复合候选键(候选键由多个属性组成)时,表自动在2NF ")
更多不必要的数据重复.如果组合键由3列组成,则需要在每个表中创建相同的3列,并将其用作外键.
一般可以在代理键的帮助下避免(阅读它们的优点和缺点)
我可以想象一个复合键的好方案 - 在表示N:N关系的表中,如Students - Classes,中间表中的键将是(StudentID,ClassID).但是如果你需要存储关于每一对的更多信息(比如一个班级中学生的所有分数的历史记录),那么你可能会引入一个代理键.
拥有复合密钥本身没有任何问题,但理想情况下主键应尽可能小(就所需的字节数而言).如果主键很长,那么这将导致非聚集索引膨胀.
请记住,主键中列的顺序很重要.第一列应尽可能具有选择性,即尽可能"独特".搜索第一列将能够搜索,但只搜索第二列必须扫描,除非第二列上还有非聚集索引.