SQL SQL Fremdschlüssel einfügen

0w3X

Cadet 3rd Year
Registriert
März 2014
Beiträge
44
Hallo,
ich ich bräuchte mal kurz Hilfe bei SQL:
Wenn ich einen Fremdschlüssel bei einem Objekt einfügen möchte muss ich diesen dann nur mit constraint einfügen oder muss ich ihn auch zu den Attributen des besagten Objekt dazuschreiben?
Beispiel:
create table kontrolle(
knr knr_typ primary key,
snr snr_typ,
pnr pnr_typ,
anr anr_typ,
sname name_typ,
standort standort_typ,
lname name_typ,
tel tel_typ,
ort ort_typ

constraint kontrolle_fk1 foreign key(snr)
referneces schule(snr)
on update cascade
on update delete

constraint kontrolle_fk2 foreign key(PNR)
references lehrer(PNR)
on update cascade
on update delete

constraint kontrolle_fk3 foreign key(ANR)
references ADD(anr)
on update cascade
on update delete)

Muss ich bei diesem Beispiel unter create table kontrolle die Fks zu den anderen Attributen und dem Pk dazuschreiben oder genügt es sie später mit constraint einzufügen?

Schonmal im voraus danke für alle Antworten
MfG
0w3X
 
Wenn ich dich richtig verstehe ist deine Frage ob du, analog zu primary key, bei den Attributen die FKs sind so etwas wie "foreign key" dazuschreiben musst. Nicht nur dass du das nicht musst, du kannst auch gar nicht. So wie du das hast passt das schon. Foreign Keys sind genau das, ein Constraint. Eine logische Beziehung zwischen Tabellen. Mit dem internen Aufbau der beteiligten Tabellen an sich hat das nichts zu tun. Trotz der Benamung darfst du von einem FK niemals als Key denken.

Edit: Vielleicht sollte ich hinzufügen, je nach DBMS gibt es durchaus verschiedene Syntax um Foreign Key Constraints zu erzeugen, auch solche die gleich beim Anlegen der Tabelle zu dem jeweiligen Attribut geschrieben werden ('references xyz'). Ich weiß nicht welches du verwendest, deine Syntax sieht vage nach MSSQL aus. So oder so musst du dich für einen Weg entscheiden und den Constraint nicht zwei mal festlegen.
 
Zuletzt bearbeitet:
Danke für die Antwort.
Meine eigentlich Frage war etwas schwer zu verstehen. Also muss ich die Fremdschlüssel aber trotzdem zu den Attributen dazuschreiben? Also müssen snr, anr und pnr obwohl es Fks sind zu den anderen Attributen von Kontrolle dazugeschrieben werden?
Ergänzung ()

Soll ich also snr,pnr und anr bei dem obigen Beispiel streichen und nur mit constraint einfügen?
 
Du musst die Attribute in der referenzierenden Tabelle auch anlegen, und zwar mit dem gleichen Datentyp wie in der referenzierten Tabelle, sonst kann die Beziehung nicht hergestellt werden. Der Name des Feldes ist dagegen optional, solang du dich auskennst.

Edit: 'Optional' war vielleicht etwas schlecht formuliert, die Felder müssen nicht den gleichen Namen haben, ist was ich sagen wollte.
 
Alles klar das war meine eigentliche Frage. Dankeschön.
 
Zurück
Oben