種類が異なる任意の数の項目を作成するための次の表があります。2つの再帰的多対多関係間の制約
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_types
はどのitem_relationship_type
で発見されていない、あなたが誤って無効であるitem_relationship
を作成することはできません制約、すなわちを持つことです。私には2つの質問があります。
このような制約は意味がありますか?私は間違った関係を挿入することはビジネスロジックで簡単に起こる可能性がある間違いだと思うので、DBの制約は重要だと感じています。
実際に制約を実装するにはどのような方法がありますか?
注:ここでの再帰はありません。これは一種の*モデル - >インスタンス*継承パターンです。 – wildplasser
"再帰的"とはどういう意味ですか?例えば 'item_relationship_types'テーブルが'(1,2)、(2,3)、(3,4) 'のレコードを持っている場合、タイプ1はタイプ2だけでなく、 3および4? – krokodilko
@wildplasser説明をありがとう。 – ieyasu