Nahemoth Geschrieben 7. Juni 2008 Teilen Geschrieben 7. Juni 2008 hi, wir nehmen in der schule gerade sql durch, und da mein lehrer nicht fähig ist den stoff vernünftig zu vermitteln, geschweige denn meine fragen zu beantworten muss ich das eben selbst in die hand nehmen. das problem was ich gerade habe ist mit den beziehungen. wie funktioniert das mit den beziehungen zwischen den tabellen. ichdefinier in tabelle A einen primary key, der in tabelle B der foreign key sein soll, die beziehung soll eine 1:n sein, also muss ich nur beide tabellen anlegen und dann zum schluss zur tabelle B ein Attribut zum foreign key definieren ? z.b. so: CREATE TABLE Personal(PersNr int auto_increment primary key, Name varchar(50), Vorname varchar(50)); CREATE TABLE Zimmer(ZimmerNr int auto_increment primary key, Kategorie varchar(50)); ALTER TABLE Personal ADD FOREIGN KEY ZimmerNr REFERENCES Zimmer(ZimmerNr); ist das so dann richtig ? thx! Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
dr.dimitri Geschrieben 7. Juni 2008 Teilen Geschrieben 7. Juni 2008 Um eine FK beziehung anzulegen, brauchst Du, wie Du schon richtig gesagt hast, zwei Tabellen, wobei mindestens die übergeordnete einen PK Constraint benötigt. In der untergeordneten Tabelle brauchst Du ein Feld, welches die Werte aus der übergeordneten tabelle aufnehmen kann. Im allgemeinen verwendet man dafür ein extra Feld und legt keinen PK Constraint darauf, da es ansonsten auch direkt eine 1:1 Beziehung wäre. Beispiel: create table person(id number primary key, name varchar2(50), vname varchar2(50), gebdat date); create table haus(id number primary key, ort varchar2(50), strasse varchar2(50), plz varchar2(10)); create table hausbewohner(id number primary key, bewohnerid number [b]references person[/b], hausid number [b]references haus[/b]); Die Tabelle Hausbewohner referenziert über das Feld bewohnerid die Tabelle Person und über das Feld hausid die Tabelle Haus. damit hast Du eine Struktur, mit der Du eine Person einem, mehreren oder auch gar keinem Haus zuordnen kannst. Solange eine Zuordnung besteht, kann ein Eintrag in Person oder Haus nicht gelöscht werden. Eine Löschweitergabe würde mit dem Befehl references person on delete cascade (analog für den FK auf Haus) erreicht werden. Dim PS: Diese Syntax ist gültig wenn du eine Oracle DB verwendest. Andere Datenbanken können eine andere Syntax verwenden. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Nahemoth Geschrieben 7. Juni 2008 Autor Teilen Geschrieben 7. Juni 2008 und was ist dann das mit dem foreign key, wie ich das gelöst habe ? so wie du das aufgebaut hast macht man doch m:n beziehungen oder? wenn ich aber nur eine 1:n beziehung habe, funktioniert das dann so wie ichs beschrieben habe ? thx! Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
dr.dimitri Geschrieben 7. Juni 2008 Teilen Geschrieben 7. Juni 2008 und was ist dann das mit dem foreign key, wie ich das gelöst habe ? Ich kann nicht beurteilen ob die syntax richtig ist, da ich nicht weiß welche DB du verwendest allerdings legt ein FK Constraint kein eigenes Feld an. Das musst schon vorhanden sein. Du benötigst in Person also noch ein Feld Zimmernr. Dim Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Nahemoth Geschrieben 7. Juni 2008 Autor Teilen Geschrieben 7. Juni 2008 allerdings legt ein FK Constraint kein eigenes Feld an. Das musst schon vorhanden sein. Du benötigst in Person also noch ein Feld Zimmernr. ja, das natürlich vorausgesetzt. Ich kann nicht beurteilen ob die syntax richtig ist, da ich nicht weiß welche DB du verwendest verwenden tu ich mysql Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
dr.dimitri Geschrieben 7. Juni 2008 Teilen Geschrieben 7. Juni 2008 ja, das natürlich vorausgesetzt. Ist aber nicht so in Deinem Beispiel. verwenden tu ich mysql Ich hab mal kurz in die Doku geschaut und das scheint wohl rein syntaktisch zu stimmen. Am besten wär natürlich, wenn du dir eine mysql, oracle XE oder postgres Datenbank installieren würdest um direkt üben zu können. Dim Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Aezugles Geschrieben 7. Juni 2008 Teilen Geschrieben 7. Juni 2008 Lade dir doch den Xampp zum SQL ausprobieren runter. Ist gratis und kann auch was. wir arbeiten in unserer Ausbildung nur mit xampp, einige noch mit Access(Verräter) apache friends - xampp bei fragen einfach melden, am besten per PN. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Nahemoth Geschrieben 7. Juni 2008 Autor Teilen Geschrieben 7. Juni 2008 naja, ich hab hier auf meinem debian nen mysql-server (5.0.51a-6) am laufen, den tuts zum üben auch ganz gut ... also macht man verknüpfungen über foreign keys und die kardinalitäten lassen sich dann über pk und fk bestimmen, m:n beziehungen löst man über eine zusätzliche tabelle auf, wie bei access also, richtig ? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Aezugles Geschrieben 7. Juni 2008 Teilen Geschrieben 7. Juni 2008 ja genau, m:n muss über eine eigene tabelle laufen. Der syntax ist gleich wie in access. have fun Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.