【发布时间】:2013-05-13 11:42:39
【问题描述】:
是 5NF 关系的 6NF relvar 表中所需的主键。考虑以下设置:
-- 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的后果是什么?
【问题讨论】:
标签: database postgresql normalization