当我可以在组合列上使用具有唯一约束的单个主键时,为什么要使用组合主键? [英] Why Composite Primary key when I can use Single Primary key with Unique constraints on composite columns?
本文介绍了当我可以在组合列上使用具有唯一约束的单个主键时,为什么要使用组合主键?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在考虑将表架构从单个主键更改为复合主键。
此更改将影响我的许多表和为查询此类表而编写的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屋!
查看全文