在Java的JPA(通过EmbeddedId或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,Movie和Character显然受益于Id列作为主键.
但是Role是一个多对多连接表.我认为创建一个id只是为了识别数据库中的一行是没有意义的.对我而言,主键显而易见{ Actor, Movie, Character }.它似乎也是一个相当有限的功能,特别是如果连接表中的数据一直在变化,一旦主键序列回绕到0,您就会发现主键冲突.
那么,回到最初的问题,使用复合主键仍然是可以接受的做法吗?如果没有,为什么不呢?
在数据库系统中,每个表都应该有一个主键吗?
比如我有一个表table1(foreignkey1,foreignkey2,attribute)像this.table1没有一个主键.
我应该为这个表定义一个主键table1id吗?
我有随机内容随机表.
id | 名称| 任务
1 | aaaa | kitr
2 | bbbb | etre
3 | CCCCC | qwqw
4 | dddd | qwert
5 | eeee | 潜力
6 | ffffffff | TOTO
我想要的是在上面的表中添加一个id = 3的列,其中包含不同的名称和不同的任务但是OLD id = 3我想要一个id = 4,其中包含之前名称和任务的id = 4 = 3,并且OLD id = 4变为id = 5,其名称和任务为id 5,依此类推.
它就像我想要在列内部和列下面输入一列我希望增加id +1但是列保持相同.示例如下:
id | 名称| 任务
1 | aaaa | kitr
2 | bbbb | etre
3 | ZZZZZZ | zzzzz
4 | CCCCC | qwqw
5 …