是5NF关系的6NF relvar表中所需的主键。考虑以下设置:是否需要主键? (6NF实现)
-- The 5NF table
CREATE TABLE party_address(
address_id int NOT NULL,
party_id int NOT NULL,
-- some other columns
PRIMARY KEY (address_id, party_id)
);
CREATE TABLE party_address_is_billing(
address_id int NOT NULL,
party_id int NOT NULL,
value boolean NOT NULL,
transaction_time tstzrange NOT NULL DEFAULT tstzrange(CURRENT_TIMESTAMP, NULL, '[)'),
EXCLUDE USING GIST (address_id WITH =, party_id WITH =, transaction_time WITH &&)
);
是否需要显式声明的party_address_is_billing
表PRIMARY KEY
?由于排除约束指定了唯一标识符((address_id, party_id, transaction_time)
),因此明确指定PRIMARY KEY (address_id, party_id, transaction_time)
似乎是多余的。它也会创建一个额外的和不必要的索引。
- 没有在表上指定
PRIMARY KEY
会产生什么后果?