Einzelnen Beitrag anzeigen

RSE

Registriert seit: 26. Mär 2010
254 Beiträge
 
Delphi XE Enterprise
 
#5

AW: FK mit CASCADE: Update unmöglich

  Alt 3. Dez 2012, 18:05
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."

Geändert von RSE ( 3. Dez 2012 um 18:11 Uhr)
  Mit Zitat antworten Zitat