是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
會產生什麼後果?