Zum Inhalt springen

anfängerprobleme mit sql


Nahemoth

Empfohlene Beiträge

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!

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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 ?

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...