我对数据库设计相当陌生,对于多对多关系,创建复合键和唯一 ID 的区别和含义是什么,例如
Country
桌子
CountryID
CountryName
Language
桌子
LanguageID
LangugageName
多对多表 - 使用复合:
CountryID Pkey
LanguageID Pkey
或者
使用唯一 ID:
AutoID Pkey
CountryID
LanguageID
我对数据库设计相当陌生,对于多对多关系,创建复合键和唯一 ID 的区别和含义是什么,例如
Country
桌子
CountryID
CountryName
Language
桌子
LanguageID
LangugageName
多对多表 - 使用复合:
CountryID Pkey
LanguageID Pkey
或者
使用唯一 ID:
AutoID Pkey
CountryID
LanguageID
复合键:
复合键是多个列的组合,用于标识表中的唯一行。复合键可以是主键。
首要的关键
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 成为主键,因此这将允许数据 lke thsi
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
希望此演示文稿可以帮助您了解差异
例如,创建复合键和唯一 ID 的区别和含义是什么
您需要在 {CountryID, LanguageID} 上创建一个“自然”键,以避免在任何情况下重复连接。唯一的问题是您是否还需要 {AutoID} 上的“代理”键?
使用代理键的原因:
除非其中某些原因适用,否则请仅使用自然键。
顺便说一句,在支持集群的 DBMS 下,像这样的自然键通常是集群键的良好候选者。如果您对表进行集群,则每个其他索引(例如代理键下方的索引)都会产生额外的开销(与基于堆的表中的索引相比),因为它需要保留集群键数据的副本并且可能导致双重-抬头。
另请参阅:一列作为主键或两个外键作为主键。