Wie kann ich eine N:M-Beziehung in SQL darstellen?
Hallo GuteFrage Team,
ich arbeite gerade just-for-fun an einer Datenbank zwischen Autoren und Büchern. Daraus würde ich gerne in SQL eine n:m-Beziehung gestalten.
So sieht meine Büchertabelle aus:
create table Buecher(
buecher_id int PRIMARY KEY,
Name Varchar(20),
Seitenanzahl int,
Genre Varchar(20)
);
und so meine Tabelle für den Autor
create table Autor(
autor_id int PRIMARY KEY,
Vorname Varchar(20),
Nachname Varchar(20)
);
Ich wäre sehr dankbar, wenn mir jemand aufschreibt, wie man da die n:m-Tabelle aufzeigt. Dann kann ich das als Vorlage nehmen und mir selbst noch einmal verinnerlichen.
MfG
Andreas
1 Antwort
n:m kann man nur mit 3 tabellen erzeugen
2 Stammtabellen und 1 bewegungstabelle
also
Stamm1
ID1 PRIMARY KEY; Name1
Stamm2
ID2 PRIMARY KEY; Name2
BewegungNM
ID1 ; ID2
kein primary keys bei ID1 und ID2 bei der BewegunNM da dort ja gerade doppelte werte vorkommen sollen, es sind aber die IDs von der jeweiligen Stamm tabelle . man kann natürlich dort nochmal eine extra ID Primary Key machen um sachen einfacher bearbeiten zu können .
So kannst Du dann
SELECT Stamm1.Name1,Stamm2.Name2
FROM BewegungNM /* alle einträge aus dieser tabelle */
JOIN Stamm1 /* passende einträge aus dieser tabelle */
ON BewegungNM.ID1 = Stamm1.ID1 /* die mit dem wert der stamm tabelle übereinstimmt */
JOIN Stamm2 /* passende einträge aus dieser tabelle */
ON BewegungNM.ID2 = Stamm2.ID2 /* die mit dem wert der stamm tabelle übereinstimmt */