举个简单的例子,假设我有一个list
表和一个list_entry
表:
CREATE TABLE list
(
id SERIAL PRIMARY KEY,
);
CREATE TABLE list_entry
(
id SERIAL PRIMARY KEY,
list_id INTEGER NOT NULL
REFERENCES list(id)
ON DELETE CASCADE,
position INTEGER NOT NULL,
value TEXT NOT NULL,
CONSTRAINT list_entry__position_in_list_unique
UNIQUE(list_id, position)
);
我现在要添加以下约束:具有相同x1M2N1x的所有列表条目具有x1M3N1x条目,
我也不知道是怎么回事。
我首先想到的是EXCLUDE
约束,但这似乎没有任何结果。
当然可以创造一个触发器,但我宁愿不,如果在所有可能的。
3条答案
按热度按时间ctrmrzij1#
您不能使用约束来实现这一点-您需要在代码中实现逻辑(例如,使用触发器、存储过程、应用程序代码等)。
mzillmmw2#
我不知道这种使用约束的方式。通常
trigger
是最直接的选择,但是如果你不想使用它们,试着用你将要插入的list_id
得到list_entry
的当前position
数,例如插入list_entry
,list_id
= 1:演示:
db<>fiddle
bzzcjhmw3#
你可以使用一个生成的列来引用列表中的前一个数字,本质上就是构建一个链表。
在此实现中,第一项(
pos=0
)指向其自身。