我有以下表格用於創建具有不同類型的任意數量的項目。兩個遞歸多對多關係之間的約束
CREATE TABLE item_types (
id SERIAL,
PRIMARY KEY (id)
-- Other columns omitted
);
CREATE TABLE items (
id SERIAL,
itemtype integer NOT NULL,
PRIMARY KEY (id),
FOREIGN KEY (itemtype) REFERENCES item_types (id)
-- Other columns omitted
);
的items
表具有遞歸許多一對多的關係稱爲item_relationship
。
CREATE TABLE item_relationships (
itemid1 integer,
itemid2 integer,
PRIMARY KEY (itemid1, itemid2),
FOREIGN KEY (itemid1) REFERENCES items (id),
FOREIGN KEY (itemid2) REFERENCES items (id)
);
的item_types
表具有遞歸許多一對多的關係稱爲item_relationship_types
。
CREATE TABLE item_relationship_types (
type1 integer,
type2 integer,
PRIMARY KEY (type1, type2),
FOREIGN KEY (type1) REFERENCES item_types (id),
FOREIGN KEY (type2) REFERENCES item_types (id)
);
現在,我想要做的就是以某種方式有,你不能意外地創建一個item_relationship
是無效的,即在項目的item_types
不會以任何item_relationship_type
發現了一個約束。我有兩個問題。
這樣的約束是否有意義?我認爲插入錯誤的關係是一個在商業邏輯中很容易發生的錯誤,因此在數據庫中進行約束是很重要的。
真正實現約束的明智方式是什麼?
注意:這裏沒有涉及遞歸;這是一種* model-> instance *繼承模式。 – wildplasser
「遞歸」究竟意味着什麼?例如,當表'item_relationship_types'具有以下記錄:'(1,2),(2,3),(3,4)',這是否意味着類型1不僅與類型2相關,而且還與3和4? – krokodilko
@wildplasser感謝您的澄清。 – ieyasu