我是否应该使用复合主键?
在Java的JPA中似乎只有对复合数据库键的第二类支持(通过IndeddedId或IdClass注释)。当我阅读复合键时,无论语言如何,人们都会觉得它们是一件坏事。但我不明白为什么。如今,复合键是否仍可接受使用?如果没有,为什么不呢?
我找到了一个同意我观点的人:http://weblogs.sqlteam.com/jeffs/archive/2007/08/23/composite_primary_keys.aspx
但另一个不这样做的人:http://weblogs.java.net/blog/bleonard/archive/2006/11/using_composite.html
是只有我,还是人们无法区分复合键在何处合适?我看到复合主键在表不表示实体时很有用 - 即当它表示连接表时。
一个简单的例子:
Actor { Id, Name, Email }
Movie { Id, Name, Year }
Character { Id, Name }
Role { Actor, Movie, Character }
在这里,Actor,电影和角色显然受益于将Id列作为主键。
但角色是多对多联接表。我认为仅仅为了标识数据库中的一行而创建 id 是没有意义的。对我来说,很明显,主键是.这似乎也是一个相当有限的功能,特别是如果连接表中的数据一直在变化,一旦主键序列环绕到0,您可能会发现自己遇到主键冲突。{ Actor, Movie, Character }
那么,回到最初的问题,使用复合主键的做法是否仍然可接受?如果没有,为什么不呢?