当我可以在组合列上使用具有唯一约束的单个主键时,为什么要使用组合主键? [英] Why Composite Primary key when I can use Single Primary key with Unique constraints on composite columns?

查看:12
本文介绍了当我可以在组合列上使用具有唯一约束的单个主键时,为什么要使用组合主键?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在考虑将表架构从单个主键更改为复合主键。

此更改将影响我的许多表和为查询此类表而编写的SQL语句(尤其是联接查询)。

对复合键方法的好处进行了一些研究后,我发现它的一个主要卖点是它用于增强复合列的唯一性。

但是,我仍然可以保留我的单个主键表,然后添加唯一约束来强制复合列具有唯一性,如下所示:

create table ... (
 id primary key not null,
 column1 ...
 column2 ...
 .
 .
 columnN ...
 unique(column1, column2) // added this line to my existing tables
)

现在回答问题:

这两种方法的优势是什么?

显式定义组合主键或使用对组合列具有唯一约束的单个主键。为什么?

推荐答案

您不需要主键来强制唯一性。您可以改用unique约束或索引。

我不喜欢组合主键。以下是一些原因:

  • 所有外键引用必须以正确的顺序和匹配的类型包括所有键。这使得定义这些表变得稍微麻烦一些。
  • 由于所有引用表中都包含复合键,因此这些表通常较大,这会导致较差的性能。
  • 如果您决定要将其中一个组件键的类型--例如字符串或int的长度更改为numeric--您必须修改大量表格。
  • 连接表时,必须包含所有键。如果你错过了一个。。。代码在语法上是正确的,但结果是错误的。
在某些情况下,组合键是可以接受的,例如没有外键引用的表。即使在这些情况下,我也使用合成键,但我完全理解另一种观点。

这篇关于当我可以在组合列上使用具有唯一约束的单个主键时,为什么要使用组合主键?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆