Ich habe die folgenden Tabellen zum Erstellen einer beliebigen Anzahl von Elementen mit unterschiedlichen Typen.Einschränkung zwischen zwei rekursiven Viele-zu-viele-Beziehungen
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
);
Die items
Tabelle hat eine rekursive many-to-many-Beziehung item_relationship
genannt.
CREATE TABLE item_relationships (
itemid1 integer,
itemid2 integer,
PRIMARY KEY (itemid1, itemid2),
FOREIGN KEY (itemid1) REFERENCES items (id),
FOREIGN KEY (itemid2) REFERENCES items (id)
);
Die item_types
Tabelle hat eine rekursive many-to-many-Beziehung item_relationship_types
genannt.
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)
);
Nun, was ich will, ist zu tun, irgendwie eine Einschränkung haben, dass Sie nicht versehentlich eine item_relationship
, die ungültig ist erstellen können, das heißt, wo die item_types
der Elemente sind in keiner item_relationship_type
gefunden. Ich habe zwei Fragen.
Ist eine solche Einschränkung sinnvoll? Ich denke, dass das Einfügen einer falschen Beziehung ein Fehler ist, der in der Geschäftslogik leicht passieren könnte, so dass sich die Beschränkung in der DB als wichtig erweist.
Was ist der vernünftige Weg, die Beschränkung tatsächlich zu implementieren?
Hinweis: Hier ist keine Rekursion beteiligt; Dies ist eine Art von * model-> instance * Vererbungsmuster. – wildplasser
Was genau bedeutet "rekursiv"? Wenn zum Beispiel die Tabelle 'item_relationship_types' die folgenden Datensätze enthält:' (1,2), (2,3), (3,4) ', bedeutet dies, dass Typ 1 nicht nur mit Typ 2, sondern auch mit verwandt ist 3 und 4? – krokodilko
@wildplasser Danke für die Klarstellung. – ieyasu