Verknüpfen von Tabellen (nicht zusammenfügen)

EuLe | Fabi

Benutzer
Beiträge
10
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
 
Werbung:
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.
 
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
 
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.
 
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?
 
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.
 
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.

Dafür dienst

Code:
CREATE TABLE kundeTokonto(kunde int references kunde, konto int references konto);

ich frage mich eher, was mit

Aber ich versteh immer noch nicht was mir diese eine Befehlszeile genau bring

gemeint ist.
 
Werbung:
Zurück
Oben