Information ausblenden
Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm

Verknüpfen von Tabellen (nicht zusammenfügen)

Dieses Thema im Forum "MySQL und MariaDB" wurde erstellt von EuLe | Fabi, 27 Oktober 2016.

  1. EuLe | Fabi

    EuLe | Fabi Benutzer

    Guten Tag liebe Community,

    ich habe für ein Banksystem zwei Tabellen erstellst. Zum einen die Tabelle "Kunde" mit all den persönlichen Information und dann noch eine Tabelle "Konto". Nun muss ich dem Kunden dieses Konto bzw. mehrere Konten zuordnen. Das Banksystem soll die Verwaltung von diesem Konto beinhalten, welches man über den Namen der Kunden suchen und auswählen kann.

    DROP DATABASE bank;
    CREATE DATABASE bank;
    USE bank;

    CREATE TABLE kunde (kundeId INTEGER NOT NULL PRIMARY KEY AUTO_INCREMENT, name VARCHAR(60), vorname VARCHAR(60), geburtsdatum CHAR(10), geschlecht CHAR(1));

    CREATE TABLE konto (kontoId INTEGER NOT NULL PRIMARY KEY AUTO_INCREMENT, Geldbetrag INTEGER);

    INSERT INTO kunde (kundeId, name, vorname, geschlecht, geburtsdatum ) VALUES (102,"Karl", "Maier", "m","11.11.1998");
    INSERT INTO konto (kontoId, Geldbetrag) VALUES (1,0);


    CREATE TABLE kundeTokonto(
    kundeId INTEGER,
    kontoId INTEGER,
    PRIMARY KEY (kundeId, kontoId),
    FOREIGN KEY (kundeId) REFERENCES kunde (kundeId),
    FOREIGN KEY (kontoId) REFERENCES konto (kontoId)
    );

    INSERT INTO kundeTokonto (kundeID, kontoID) VALUES (102,1);

    SELECT name FROM kunde;
    SELECT * FROM kunde;
    SELECT * from konto;
    SELECT * from kundeTokonto;

    # Alle Zeilen mit der Zuordnung Schüler-konto

    SELECT name, vorname, geburtsdatum from kunde, konto, kundeTokonto
    WHERE kunde.kundeId = kundeTokonto.kundeId
    AND kundeTokonto.kontoId = konto.kontoId;


    Das ist jetzt nur das unfertige Projekt bei dem schon Werte in die Tabelle automatisch reingeschrieben werden. Nun ist die Frage wie ich die eine Spalte bzw KundeID mit der anderen KontoID verknüpfen kann.
    Bzw was ist einfach falsch.

    Vielen Dank für eure Hilfe ;)
    EuLe | Fabi
     
  2. akretschmer

    akretschmer Datenbank-Guru

    Zuerst einmal: warum das Geburtsdatum als Text? Selbst so eine primitive DB wie MySQL besitzt dafür passende Datentypen - nutzen!

    Dann: verwendet expliziete Joins. Um das mal kurz zu zeigen:

    Code:
    test=# create table kunde(id int primary key, name text);
    CREATE TABLE
    test=*# create table konto (nr int primary key, betrag int);
    CREATE TABLE
    test=*# create table kunde2konto(kunde int references kunde, konto int references konto);
    CREATE TABLE
    test=*# select ku.name, ko.betrag from kunde2konto k2k left join kunde ku on k2k.kunde=ku.id left join konto ko on k2k.konto=ko.nr;
     name | betrag
    ------+--------
    (0 Zeilen)
    
    test=*#
    

    Damit sieht man a) wie die Tabellen zusammengehören und trennt b) die JOIN-Condition von der WHERE-Condition.
     
  3. EuLe | Fabi

    EuLe | Fabi Benutzer

    Ja, das mit dem Geburtsdatum ist mir bekannt. Welchen Datentyp empfiehlst du denn?
    Und was hat das mit den "test=#" auf sich. Welche Funktion hat das?

    Vielen Dank für deine schnelle Hilfe. ;D
     
  4. akretschmer

    akretschmer Datenbank-Guru

    DATE böte sich an, hat bestimmt auch MySQL (ich nutze PostgreSQL)

    Code:
    test=# create table kunde(id int primary key, name text, geburtsdateum date);
    CREATE TABLE
    test=*#
    
    das test=# bzw. test=*# ist der Prompt der DB, ich nutze das Kommandozeilen-Interface. Wenn der * da steht, befinde ich mich in einer Transaktion, sonst nicht.
     
  5. EuLe | Fabi

    EuLe | Fabi Benutzer

    Ok. Dann versuch ich das Mal.
    Wenn ich Fragen haben sollte melde ich mich später nochmal.
    Danke :D
     
  6. EuLe | Fabi

    EuLe | Fabi Benutzer

    Code:
    DROP DATABASE bank;
    CREATE DATABASE bank;
    USE bank;
    
    CREATE TABLE kunde (kundeId INTEGER NOT NULL PRIMARY KEY AUTO_INCREMENT, name VARCHAR(60), vorname VARCHAR(60),geschlecht CHAR(1), geburtsdatum DATE);
    
    CREATE TABLE konto (kontoId INTEGER NOT NULL PRIMARY KEY AUTO_INCREMENT, Geldbetrag INTEGER);
    
    INSERT INTO kunde (kundeId, name, vorname, geschlecht, geburtsdatum ) VALUES (102,"Karl", "Maier", "m","11,11,1998");
    INSERT INTO konto (kontoId, Geldbetrag) VALUES (1,0);
    
    
    CREATE TABLE kundeTokonto(kunde int references kunde, konto int references konto);
    
    SELECT ku.name, ko.Geldbetrag from kundeTokonto ktok left join kunde ku on ktok.kunde=ku.kundeID left join konto ko on ktok.konto=ko.kontoID;
    
    SELECT name FROM kunde;
    SELECT * FROM kunde;
    SELECT * from konto;
    SELECT * from kundeTokonto;
    
    

    Jetzt nochmal zum Verständnis. Zum einen wie geben ich den Datentype DATE an, habe es nicht im Internet in der Konstellation gefunden und zum anderen, wie gebe ich nun diese Tabelle aus beziehungsweise wie greife ich darauf zu?
     
  7. EuLe | Fabi

    EuLe | Fabi Benutzer

    Das mit dem Datentyp DATE hat sich erledigt. Aber ich versteh immer noch nicht was mir diese eine Befehlszeile genau bring :(
     
  8. ukulele

    ukulele Datenbank-Guru

    Für dein Projekt fehlt dir noch eine Zwischentabelle die die n:m-Beziehung zwischen Kunde und Konto abbildet und für beide Tabellen einen Fremdschlüssel hat.
     
  9. akretschmer

    akretschmer Datenbank-Guru

    Dafür dienst

    Code:
    CREATE TABLE kundeTokonto(kunde int references kunde, konto int references konto);
    
    ich frage mich eher, was mit

    gemeint ist.
     
  10. ukulele

    ukulele Datenbank-Guru

    Hm nicht gesehen. Ich hoffe wir reden hier nur von einer fiktiven Bank :)
     
  11. akretschmer

    akretschmer Datenbank-Guru

    Bei MySQL: definitiv!
     
  12. EuLe | Fabi

    EuLe | Fabi Benutzer

    Wie würde die denn aussehen? Ich habe von so etwas schon mal gehört weiß aber nicht wie die dann aussehen muss :(
     
  13. akretschmer

    akretschmer Datenbank-Guru

    du badest Deine Hände in kundeTokonto ...
     
  14. ukulele

    ukulele Datenbank-Guru

    Vielleicht ließt du dich erstmal noch ein bischen ein, Wikipedia bietet alles zum Thema "Normalisierung".
     
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden