Es ist aus Datenschutzgründen nicht möglich den Institutionen und Mitarbeitern in allen Projekten die gleichen Daten zu geben, da die Daten aus unterschiedlichen Quellen kommen. Am Grundaufbau wird sich daher nichts ändern.
Folgender Aufbau scheint das Problem zu lösen:
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,
/* hier kein FK mehr <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< */
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)
);
CREATE EXCEPTION BAD_INST '
Diese Institution gibt es in diesem Projekt nicht';
SET TERM ^ ;
CREATE TRIGGER PROJMA_BI0
FOR PROJMA
ACTIVE BEFORE
INSERT POSITION 0
AS
begin
if (
not EXISTS(
SELECT INSTID
FROM PROJINST
WHERE (PROJINST.INSTID = new.INSTID)))
then
exception BAD_INST;
end
^
SET TERM ; ^
Der Trigger schlägt beim Einfügen neuer Datensätze an und stellt so die Konsistenz sicher. Die einzige Möglichkeit eine Inkonsistenz herzustellen, wäre nun ein UPDATE auf PROJMA oder ein UPDATE oder DELETE auf PROJINST. Das müsste ich dann über die Rechte der
DB-Benutzer ausschließen, was widerum zur Folge hat, dass ich noch eine Extra-Tabelle für die Daten bräuchte (mit FK auf die oben angegebenen Tabellen), da sonst keiner die Adress- und Namensdaten aktualisieren kann, wenn mit den Institutionen/Mitarbeitern gesprochen wird. Wie gesagt, eine Aktualisierung mit den Daten anderer Projekte ist aus datenschutzrechtlichen Gründen nicht möglich, sondern in jedem Projekt unabhängig nur bei Kontakt mit der Institution bzw. dem Mitarbeiter.
"Seit er seinen neuen Computer hat, löst er alle seine Probleme, die er vorher nicht hatte."