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 &&)
);
テーブルで明示的に宣言する必要がPRIMARY KEY
ありますか? party_address_is_billing
排他制約は一意の識別子 ( (address_id, party_id, transaction_time)
) を指定しているため、明示的に を指定するのは冗長に思えますPRIMARY KEY (address_id, party_id, transaction_time)
。また、追加の不要なインデックスも作成されます。
PRIMARY KEY
テーブルで指定しないと、どのような結果になりますか?