Hallo,
ich habe ein Design entworfen, das dazu führt, dass die Institutions-ID nicht mehr verändert werden kann. Wie lässt sich das evtl. auflösen, ohne die Einschränkungen zu lockern? Oder wie würdet ihr an das Problem herangehen?
Wir haben in unserer
DB Institutionen mit Mitarbeitern. Diese werden in projektübergreifenden Tabellen referenziert. Die Adress- und Namensdaten sind projektspezifisch, daher gibt es für jedes Projekt eigene Tabellen mit den Institutionen und mit den Mitarbeitern. Gleiche Institutionen verschiedener Projekte sollen über eine gleiche INSTID zuordenbar sein, gleiches gilt für die Mitarbeiter (MAID). Für diese Aufgabe habe ich folgende Tabellen entworfen:
SQL-Code:
/* Liste aller Institutionen */
CREATE TABLE INST (
INSTID INTEGER PRIMARY KEY
);
/ * Liste aller Mitarbeiter, Zuordnung zur Institution */
CREATE TABLE MA (
INSTID INTEGER REFERENCES INST ON UPDATE CASCADE,
MAID INTEGER,
PRIMARY KEY (INSTID, MAID)
);
/* Projektspezifische Auswahl der Institutionen incl. Adressdaten */
CREATE TABLE PROJINST (
INSTID INTEGER REFERENCES INST ON UPDATE CASCADE, /* nur Institutionen aus INST */
ADRESSE VARCHAR(100), /* Nutzdaten (mehrere Felder) */
PRIMARY KEY (INSTID)
);
/* Projektspezifische Auswahl der Mitarbeiter der projektspezifischen Institutionen incl. Namensdaten */
CREATE TABLE PROJMA (
INSTID INTEGER REFERENCES PROJINST ON UPDATE CASCADE, /* nur projektspezifische Institutionen */
MAID INTEGER,
NAME VARCHAR(100), /* Nutzdaten (mehrere Felder) */
FOREIGN KEY (INSTID, MAID) REFERENCES MA (INSTID, MAID) ON UPDATE CASCADE, /* nur die in MA definierten Zuordnungen INSTID <-> MAID */
PRIMARY KEY (INSTID, MAID)
);
Das Problem entsteht, wenn ich INST.INSTID ändern möchte. Dann stören sich die Update-Trigger (ON UPDATE CASCADE) für PROJINST.INSTID und die für PROJMA gegenseitig mit den FK-Restriktionen. Das wäre nur zu umgehen, wenn die Restriktionen erst wieder geprüft würden, wenn alle Updates erledigt sind.
Wie kann man dieses Problem lösen?
"Seit er seinen neuen Computer hat, löst er alle seine Probleme, die er vorher nicht hatte."