我只需要理解复合主键背后的概念。我已经开始搜索它,了解它是一个表格的多个列的组合。但我的问题是,这个密钥对任何数据的实用方法是什么?什么时候我应该使用这个概念?你能告诉我在excel或SQL服务器上这个键的实际用法吗?
对于任何sql专家来说,这可能是一种奇怪的问题。我为这种愚蠢的问题道歉。如果有人觉得这是一个愚蠢的问题,请原谅我。
答案 0 :(得分:1)
我们说我有一张车的桌子。它包括汽车的型号和制造。我不想把同样的汽车插入我的桌子,但是有些汽车将拥有相同的品牌和汽车将具有相同的型号(假设福特和丰田制造一辆名为“BlergWagon&#39的汽车” )。
我可以使用包含两个值的复合键来强制make / model的唯一性。 Just make上的一个独特的钥匙不允许我添加超过1辆丰田,并且只是模型上的唯一钥匙不允许我输入超过1辆BlergWagon。
另一个例子是成绩,学期,年级,学生和班级。我可以为特定年份的班级和特定学期的学生强制执行唯一性,这样我的桌子就不会有2个在同一学期同一学期同一学期的同一班级的重复记录。
你的帖子的另一部分是关于主键,我假设这意味着你在谈论聚集索引。聚簇索引强制执行表的顺序。因此,您可以将其放入标识列以对表进行排序,并添加唯一的非聚簇索引以强制其他列上的唯一性。
答案 1 :(得分:1)
复合主键的典型用例是结点/关联表。考虑订单和产品。一个订单可能有很多产品。一种产品可能有很多订单。 orderProducts
表可以定义为:
create table orderProducts (
orderId int not null references orders(orderId),
productId int not null references products(productId),
quantity int,
. . .
);
将(orderId, productId)
声明为复合主键是有意义的。这将限制任何给定订单只有一次给定产品。
那就是说,我通常会使用合成密钥(orderProductId
)并简单地将组合声明为unique
。
复合主键的好处在于它强制使用唯一性(也可以使用唯一性约束来完成)。它还浪费了额外密钥所不需要的空间。
与identity
键相比,复合主键存在缺点: