1
我注意到,如果引用的密鑰不是唯一的,則不能創建外鍵,但如果我有記錄(x, y, z)
,其中x
是唯一的,則假設每個記錄總是唯一的,這是「直觀的」。PostgreSQL - 爲什麼我不能創建基於唯一列的複合外鍵而沒有聲明組合鍵是唯一的?
那麼,是不是還有我還沒有考慮過爲什麼我不能做這樣的事情
create table x(
id int primary key,
something int not null
);
create table y(
id serial primary key, -- whatever, this doesn't matter
x_id int not null,
x_something int not null,
foreign key (x_id, x_something)
references x(id, something)
);
Postgres裏
會拋出
ERROR: there is no unique constraint matching given keys for referenced table "x"
和可校正增加任何特別的理由unique (id, something)
,表x
。
此行爲僅存在於Postgres中,還是SQL標準中定義的內容?
有什麼辦法可以引用組合鍵而不需要unique
約束?
編輯1: 這裏的情況的一個例子中,這將是
create table movie_reservation(
id serial primary key,
movie_id int references(...),
-- ... (reservation data like the time and interval),
seen boolean not null default false -- wether a user has seen it
);
-- want califications of moves that HAVE BEEN SEEN
create table movie_calification(
movie_reservation_id int not null,
seen boolean
not null
check (boolean = true),
stars smallint
not null
check (stars between 1 and 5),
foreign key (movie_reservation_id, seen)
references movie_reservation(id, seen)
);
+1 metioning表繼承,我不知道這樣的功能,也至極解決我的具體問題。謝謝! –