MySQL - kein entsprechender Primär- o. eindeutiger Schlüssel für diese Spaltenliste

DerAskTyp

Mitglied
SQL:
CREATE TABLE befugteBeamte(  
    idPerson INTEGER,  
    idFunction INTEGER,  
     
    CONSTRAINT pk_befugteBeamteV1 PRIMARY KEY(idPerson,idFunction),  
    CONSTRAINT fk_befugteBeamteV3 FOREIGN KEY (idPerson) REFERENCES Person(id),  
    CONSTRAINT fk_befugteBeamteV2 FOREIGN KEY (idFunction) REFERENCES Funktion(id)  
);  
CREATE TABLE Leistung(  
    beschreibung VARCHAR2(50),  
    datum date,  
    vonWem INTEGER,  
    fuerWem INTEGER,  
    idF INTEGER,  
     
    CONSTRAINT pk_LeistungB PRIMARY KEY (datum,idF,fuerWem),  
    CONSTRAINT fk_LeistungA FOREIGN KEY (vonWem) REFERENCES befugteBeamte(idPerson),  
    CONSTRAINT fk_LeistungV4 FOREIGN KEY (fuerWem) REFERENCES Person(id),  
    CONSTRAINT fk_FunktionA FOREIGN KEY (idF) REFERENCES befugteBeamte(idFunction)  
);


Hallo immer wenn ich versuche Leistung Tabelle zu erstellen, bekomme ich den oben genannten Fehler? Liegt der Fehler das idPerson,ifFunction nicht unique sind?
 
befugteBeamte(idFunction) ist kein eindeutiges Feld. Ich denke, du musst einen unique index auf befugteBeamte.idFunction setzen

Person(id) kann ich nicht bewerten, weil ich die Tabelle Person nicht sehe.
 
Moin derAskTyp,

die zweiten und vierten FK-Constraints sind nur einer - und die Parenttabelle muss auch beide referenzierten Felder im PK haben.

Code:
CREATE TABLE Leistung (
.... -- statt Contraint 2 & 4:
CONSTRAINT fk_MfGBiber FOREIGN KEY (fuerWem, idF)  REFERENCES befugteBeamte(idPerson, idFunction)

Ein FK auf "Person" wäre
a) redundant (wozu muss das Parent sein, ist doch schon Grand-Parent) und
b) unzureichend, weil ja nur eine Kombination Person+Funktion, die auch in "Leistung" enthalten ist, einen gültigen Satz erzeugen kann.

[Edit] Zumindest verstehe ich die Beziehungen so.
Wenn es aber nur eine "existierende Person" und eine "exoistierende LFunktion" sein soll, dann jeweils ein FK auf Person.id und einer auf die sicherlich vorhandene Tabelle "Funktion" auf Funktion.id. [/Edit]

Grüße
Biber
 
Moin, hallo hier sind die ganzen talle:

SQL:
CREATE TABLE Adresse(  
    plz INTEGER,  
    ort VARCHAR2(50),  
    CONSTRAINT pk_Adresse1 PRIMARY KEY(plz)  
);  
CREATE TABLE Person(  
    id INTEGER,  
    name VARCHAR2(50),  
    idAdresse INTEGER,  
    art VARCHAR2(50),  
    idParent INTEGER,  
    CONSTRAINT pk_buergerV3 PRIMARY KEY(id),  
    CONSTRAINT pkey_buergerV3 FOREIGN KEY (idAdresse) REFERENCES Adresse(plz),  
    CONSTRAINT pkey_personParent FOREIGN KEY(idParent) REFERENCES Person(id), 
    CONSTRAINT ck_PersonArtV3 CHECK (art = 'Buerger' OR art = 'Beamter' OR art = 'beides')  
);  
CREATE TABLE Funktion (  
    id INTEGER,  
    titel VARCHAR2(50),  
    CONSTRAINT pk_Funktion PRIMARY KEY (id)  
);  
CREATE TABLE befugteBeamte(  
    idPerson INTEGER,  
    idFunction INTEGER,  
     
    CONSTRAINT pk_befugteBeamteV1 PRIMARY KEY(idPerson,idFunction),  
    CONSTRAINT fk_befugteBeamteV3 FOREIGN KEY (idPerson) REFERENCES Person(id),  
    CONSTRAINT fk_befugteBeamteV2 FOREIGN KEY (idFunction) REFERENCES Funktion(id)  
);  
CREATE TABLE Leistung(  
    beschreibung VARCHAR2(50),  
    datum date,  
    vonWem INTEGER,  
    fuerWem INTEGER,  
    idF INTEGER,  
     
    CONSTRAINT pk_LeistungB PRIMARY KEY (datum,idF,fuerWem),  
    CONSTRAINT fk_LeistungA FOREIGN KEY (vonWem) REFERENCES Person(id),  
    CONSTRAINT fk_LeistungV4 FOREIGN KEY (fuerWem) REFERENCES Person(id),  
    CONSTRAINT fk_FunktionA FOREIGN KEY (idF) REFERENCES Funktion(id)  
);
 
Zurück