我有一个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);