mehrere Fremdschlüssel in einer Tabelle (SQL 2008)
Hallo zusammen. Diese Frage geht an die SQL-Kenner unter euch. Kann man mehrere FOREIGN KEYs in einer Tabelle erstellen und wenn Ja, wie? Ich benutze SQL 2008. Wäre sehr froh um eine schnelle Antwort, da ich die Arbeit bald abgeben muss. Danke und einen schönen Tag.
2 Antworten
Das ist bei größeren Anwendungen eine ganz normale Angelegenheit. Ein Beispiel aus den 55 Tabellen einer meiner Anwendungen:
primary key (zbnr),
foreign key fkywe1 (wunr)
references wurf on delete cascade
on update restrict,
foreign key fkywe2 (bmgnr)
references mitgl on delete restrict
on update restrict,
foreign key fkywe3 (zwid)
references zwnam on delete restrict
on update restrict
Übrigens: Der Primärschlüssel kann auch aus mehreren einzelnen Feldern zusammengesetzt sein (Verbundschlüssel = Compound Key), wie das folgende Beispiel zeigt. Er lässt sich dann als Gruppe genauso als Fremdschlüssel verwenden, auch wenn es nicht oft gebraucht wird:
primary key (dtag,zbmut,zwid,rm),
foreign key fkyml1 (rz)
references rasse on delete restrict
on update restrict,
foreign key fkyml2 (zwid)
references zwnam on delete restrict
on update restrict
Für das Datenbankdesign gibt es verschiedene Philosophien. Eine davon nimmt stets nur eine Satz-Nr als Primärschlüssel und lagert den eigentlichen Schlüssel als eigene Tabelle aus. Ich kann da keinen Vorteil erkennen. Es gibt allerdings Programme, die automatisch Datenbankstrukturen generieren. Für solche Systeme könnte das evtl. nützlich sein.
Danke für die Auszeichnung.
Vielleicht ist Dir aufgefallen, dass ich sehr kurze Bezeichnungen verwende. Meine Tabellennamen sind 4 - 5 Zeichen lang, die Spaltennamen 1 - 6 Zeichen, wobei nach Möglichkeit der Name sich etwas an der Feldlänge orientiert (wegen Überschrift in Listen).
Entgegen einer ersten Einschätzung leidet die Merkfähigkeit nicht darunter, denn man arbeitet ja ständig mit den Tabellen und kennt die Bezeichnungen in und auswendig. Im Falle eines Falles, bei Tabellen die man seltener braucht, kann man ggf. nachschauen. Der Vorteil der Übersichtlichkeit bei SQL-Anweisungen ist aber riesengroß, man kann zeilenorientiert formulieren.
Die internen Namen für Indizes und Fremdschlüssel werden bei mir automatisch generiert, deshalb sind die so kryptisch. Ich verwalte meine Datenbank mit einem selbst erstellten System, mit dem ich u.a. die Datenbank rein prozedural per Knopfdruck komplett einrichten kann. Denn alles was man mit der Maus macht, weiß man später nicht mehr genau.
Ja kann man.
Schaust Du hier http://www.w3schools.com/sql/sql_foreignkey.asp
Du kannst auf diese Art auch mehrere Foreign Keys definieren.
Durchkämpfen musst Du Dich durch das Thema schon selber. Wir sind hier nicht dafür da Deine Hausaufgaben zu machen.
Ob das jetzt SQL Server 2008 ist oder sonst irgendeine SQL basierende Datenbank ist relativ egal.