Einzelnen Beitrag anzeigen

shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#2

AW: FK mit CASCADE: Update unmöglich

  Alt 3. Dez 2012, 15:32
Das Feld INSTID in der Tabelle PROJMA ist redundant bzw. überbestimmt.

Jeder mit Mitarbeiter gehört zu einem best. Institut.
Primärschlüssel ist das Feld MAID.
INSTID gehört nicht zum Primärschlüssel!!
SQL-Code:
/* Liste aller Mitarbeiter, Zuordnung zur Institution */
CREATE TABLE MA (
  MAID INTEGER,
  INSTID INTEGER REFERENCES INST ON UPDATE CASCADE,
  NAME VARCHAR(100), /* Nutzdaten (Name, Anrede, Telefon, EMail, Gebdatum, Gehaltsstufe,...) */
  PRIMARY KEY (MAID)
);
Jedes Projekt gehört zu einem best. Institut. (sozusagen das Heimatinstitut des Projekts)
Primärschlüssel muss eine Projekt-ID sein!
SQL-Code:
/* Projektspezifische Auswahl der Institutionen incl. Adressdaten */
CREATE TABLE PROJINST (
  PROJID INTEGER,
  INSTID INTEGER REFERENCES INST ON UPDATE CASCADE, /* nur Institutionen aus INST */
  DESCRIPTION VARCHAR(100), /* Nutzdaten (mehrere Felder), nicht Adresse des Institut, sondern Beschreibung des Projekts */
  PRIMARY KEY (PROJID)
);
Mitarbeiter werden wohl dynamisch den Projekten zugewiesen.
Dabei kann ein Mitarbeiter durchaus Mitglied mehrerer Projekte sein.
Die INSTID hat in dieser Tabelle überhaupt nichts verloren.
Es könnte auch sein, dass ein Mitarbeiter einem Projekt eines anderen Instituts zugeteilt wird.
Man sollte das auf jeden Fall nicht durch die DB-Struktur verhindern.
SQL-Code:
/* Zuordnung der Mitarbeiter zu den Projekten */
CREATE TABLE PROJMA (
  MAID INTEGER, /* Primärschlüssel Feld 1 */
  PROJID INTEGER, /* Primärschlüssel Feld 2 */
  FOREIGN KEY ( MAID) REFERENCES MA (MAID) ON UPDATE CASCADE,
  FOREIGN KEY ( PROJID) REFERENCES PROJINST (PROJID) ON UPDATE CASCADE,

  STATUS INTEGER, /* z.B. 0=temporärer Projekt-MA, 1=Projektleiter,2=Projektberater*/
  PRIMARY KEY (INSTID, MAID)
);
Andreas
  Mit Zitat antworten Zitat