我对数据库设计很新,对于多对多的关系,创建复合密钥的差异和含义是什么,例如
。 Country
表
CountryID
CountryName
Language
表
LanguageID
LangugageName
多对多表 - 使用复合:
CountryID Pkey
LanguageID Pkey
OR
使用唯一标识:
AutoID Pkey
CountryID
LanguageID
答案 0 :(得分:3)
复合键:
组合键是多个列的组合,用于标识表中的唯一行。 复合键可以是主键。
PRIMARY KEY
PRIMARY KEY约束唯一标识数据库表中的每条记录。
所以这一切都取决于你的要求
在第一次设计
中Many to Many Table:
Using composite:
CountryID Pkey
LanguageID Pkey
如果你使用这个设计而不是CountryID,而LanguageID是复合主键。这里是
表的数据将是
CountryId LaguageID
1 1 //valid
1 2 //valid
1 3 //valid
1 1//not valid data as its form composite primary key
并在第二个设计
中Using Unique Id:
AutoID Pkey
CountryID
LanguageID
AutoID成为主键,因此这将允许数据使用
AutoId CountryId LaguageID
1 1 1 //valid
2 1 2 //valid
3 1 3 //valid
4 1 1 //valid as AutoID is primary key
1 2 3 // invalid as AutoID is prinary key
希望此演示文稿能帮助您了解差异
答案 1 :(得分:0)
为例如创建复合键和唯一ID的差异和含义是什么。
您需要在{CountryID,LanguageID}上创建“自然”键,以避免重复连接无论如何。唯一的问题是,您是否还需要{AutoID}上的“代理”密钥?
代理密钥的原因:
除非其中一些原因适用,否则请仅使用自然键。
BTW,在支持clustering的DBMS下,这样的自然键通常是群集密钥的良好候选者。如果您对表进行集群,则每个其他索引(例如代理键下面的索引)都会产生额外的开销(与基于堆的表中的索引相比),因为它需要保留群集密钥数据的副本并且可能导致双重-lookup。
另请参阅:A column as primary key or two foreign keys as primary key。