【问题标题】:What is the best practice for a composite PRIMARY KEY?复合主键的最佳实践是什么?
【发布时间】:2018-08-24 09:57:51
【问题描述】:

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

假设我有一个如下表:

ColA         ColB

X            NULL
X            NULL

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

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

请澄清。

【问题讨论】:

  • 没有。主键列中不允许空值。
  • X, NULLX, NULL 究竟有何不同
  • 首先,主键中不允许有空值。如果 2 列的 2 个值相同,它们将作为 X , Y 和另一个 X,Y 的一部分作为主键的一部分,这也是不允许的。因为它根本没有不同,它是相同的。
  • edit您的问题并为相关表添加create table 语句,包括所有索引和约束。主键列不能包含空值,所以我猜你只创建了一个唯一索引,而不是主键约束
  • 您使用的是哪个DBMS 产品? “SQL”只是一种查询语言,而不是特定数据库产品的名称。请为您正在使用的数据库产品添加tag postgresql, oracle, sql-server, db2, ...

标签: sql primary-key composite-primary-key


【解决方案1】:

主键具有三个属性:

  • 键(组合)唯一标识每一行。
  • 密钥的任何组件都不能是NULL
  • 一张表只有一个主键。

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

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

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

【讨论】:

    猜你喜欢
    • 2012-08-19
    • 1970-01-01
    • 2015-10-24
    • 1970-01-01
    • 2017-09-29
    • 2011-06-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多