创建一个包含一列接受 NULL 的组合主键



我有一个CustomerLocation的表格,其中包含以下列:

  • 国家
  • 地区
  • 城市

我想创建一个具有上述 3 列的复合主键,知道Region列是NULLABLE.

你不能。primary key的定义指定只允许非NULL值。 这在文档中有明确的解释:

在主键约束中定义的所有列都必须定义为非空。如果未指定可空性,则参与 PRIMARY KEY 约束的所有列的可空性都设置为 NOT NULL。

也就是说,文档没有解释这与SQL标准以及所有数据库中主键和NULL的定义一致。

但我建议您为表使用单个整数键:

create table CustomerLocation as (
CustomerLocationId int identity(1,1) primary key,
. . .
);

可以在这三列上定义unique约束,但外键引用应使用主键。

不要使用主键约束,而是使用唯一约束来强制执行键,因为区域属性允许 NULL,并且在两种类型的约束之间,只有后者允许 NULL:

ALTER TABLE CustLocations ADD CONSTRAINT UNQ_CustLocations
UNIQUE (country, region, city);

最新更新