SQL Server +复合键或唯一ID

k80*_*0sg 5 sql database database-design

我对数据库设计相当新,对于多对多的关系,创建复合键的差异和含义是什么,以及对于例如

Country

CountryID
CountryName
Run Code Online (Sandbox Code Playgroud)

Language

LanguageID
LangugageName
Run Code Online (Sandbox Code Playgroud)

多对多表 - 使用复合:

CountryID  Pkey
LanguageID Pkey
Run Code Online (Sandbox Code Playgroud)

要么

使用唯一ID:

AutoID Pkey
CountryID 
LanguageID 
Run Code Online (Sandbox Code Playgroud)

Pra*_*ana 3

复合键:

复合键是多个列的组合,用于标识表中的唯一行。组合键可以是主键。

首要的关键

PRIMARY KEY 约束唯一标识数据库表中的每条记录。

所以这完全取决于你的要求

在第一个设计

Many to Many Table:
Using composite:
CountryID  Pkey
LanguageID Pkey
Run Code Online (Sandbox Code Playgroud)

如果您使用此设计,则 CountryID 和 LanguageID 是复合主键。ie 在这里

表的数据将是

CountryId  LaguageID
  1           1 //valid
  1           2 //valid
  1           3 //valid
  1           1//not valid data as its form composite primary key
Run Code Online (Sandbox Code Playgroud)

第二个设计中

Using Unique Id:
AutoID Pkey
CountryID 
LanguageID 
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

希望这个演示能帮助您理解差异

  • OP问题中第二种情况的唯一ID不是[**代理键**](http://en.wikipedia.org/wiki/Surrogate_key)。如果您将此添加到答案中会更好。 (2认同)