首页 > 解决方案 > 复合主键的最佳实践是什么?

问题描述

我有一个表,其中我将两列作为复合主键。现在我有一个困惑。

假设我有一个如下表:

ColA         ColB

X            NULL
X            NULL

“X NULL”和“X NULL”这两个行都是 P​​RIMARY KEY 的组合。

那么,这种插入可能吗?因为 NULL 值不同,因此这两行都应该代表新的数据组合。

请说清楚。

标签: sqlprimary-keycomposite-primary-key

解决方案


主键具有三个属性:

  • 键(组合)唯一标识每一行。
  • 没有组件的键可以NULL
  • 一张表只有一个主键。

因此,根据此定义,您不能将两列声明为主键。

一般来说,我不提倡复合主键。我建议对表使用自动递增的主键(语法因数据库而异)。

数字标识符的一个很好的特性是它捕获表中值的插入顺序。此外,许多数据库通过主键对数据进行聚类,导致inserts 和updates 上出现碎片。


推荐阅读