创建数据库时,如果一个表只包含来自其他表的2个主键,会发生什么情况,我假设它们都是外键。表中是否必须有主键?
答案 0 :(得分:2)
只有两个外键的链接表,没有别的(没有添加代理键来制作一个简单的无意义的主键)通常会被限制为唯一(否则你将无法区分副本 - 这也是一个违反正常形式)所以你经常只需将这两个键组合在一起作为复合构成主键(PK必须是唯一的定义,它们是这种链接表的PK的自然选择) 。主键中这些列的顺序通常由最常见的搜索顺序决定 - 即personid,accountid可能首先在personid上的复合主键中具有personid。
答案 1 :(得分:1)
没有;表不必有主键。
他们经常(通常是?)在他们像这样链接/映射表时不会这样做。
答案 2 :(得分:0)
表不一定需要关联主键。我完全有效如下
<强> Table_Album 强>
pkey | name
1 | name1
2 | name2
<强> Table_Song 强>
pkey | name
1 | song1
2 | song2
3 | song3
然后你可以有一个表格
<强> Table_Album_Song_Map 强>
id | Album | Song # Here id is just row number and not primary key
1 | name1 | song1
2 | name1 | song2
3 | name2 | song3
希望有所帮助
答案 3 :(得分:0)
如果您有关联实体或表,最好创建一个由父项双键组成的复合主键。在该示例中,在Album-Song-Map的Album-Song-Map上将存在唯一性约束。如果您不将这些作为主键并使组合成为唯一,那么您可以在Album-Song-Map中使用重复项。 Album-Song-Map的复合键是父母双方的关键,但它们分别是回到父母,Album和Song的外键。根据我的经验,关联实体通常不仅用于映射,还包含一些业务属性。例如,假设该歌曲在一个专辑中具有与另一个专辑不同的持续时间(播放时间)。此属性必须进入Album-Song-Map。我使用大量音乐进行舞蹈,而且不同专辑中歌曲的持续时间通常不同。