# mySQL - n:m Beziehung



## mschneider (16. Juli 2004)

Wie kann ich eine n:m-Beziehung in mySQL implementieren. Ich hab (in etwa) folgendes:

Es gibt Restaurants(name, adresse,..., kategorien) und Kategorien. Jedes Restaurant gehört zu mehreren Kategorien (0, 1...) und in jeder Kategorie befinden sich mehrere (0, 1,...) Restaurants.
Wie kann ich diese Struktur auf eine mySQL-Datenbank abbilden?
Bitte um Hilfe. thx

--martin


----------



## Julian Maicher (16. Juli 2004)

Das kannst du nur machen indem du dir eine Zwischentabelle anlegst. Anders ist es bei relationalen Datenbanken nicht zu empfehlen.
So würde das dann z.B. aussehen:


*tblRestaurant*
restaurant_id... (PK)

*tblRestaurantKategorie *
restaurant_id (FK von restaurant_id)
kategorie_id (FK von kategorie_id)

*tblKategorie*
kategorie_id (PK)
....


----------



## SilentWarrior (16. Juli 2004)

suye: Warum soll das nicht gehen? Mach einfach zwei Tabellen:

tblRestaurans
id
...
kategorien

tblKategorien
id
...

In der Spalte kategorien befinden sich nun alle Kategorien, zu denen das Restaurant gehört, getrennt durch einen Separator (z. B. &). Jetzt kannst du mit einer Scriptsprache deines Vertrauens alles auslesen, was du möchtest, die Redundanzfreiheit ist gegeben und du hast trotz allem nur zwei Tabellen.


----------



## Thomas Darimont (16. Juli 2004)

Hallo!



> In der Spalte kategorien befinden sich nun alle Kategorien, zu denen das Restaurant gehört, getrennt durch einen Separator (z. B. &). Jetzt kannst du mit einer Scriptsprache deines Vertrauens alles auslesen, was du möchtest, die Redundanzfreiheit ist gegeben und du hast trotz allem nur zwei Tabellen.



Das ist IMHO keine gute Idee. Ich denke man sollte schon die Möglichkeiten die eine Datenbank anbietet auch nutzen. Wenn du das ganze auf deine Art machen würdest könntest du wohlmöglich deine Datenbank unterlaufen in Sachen Constraints (Gültigkeitsregeln etc....)

Deshalb nimm besser die Mapping Tabelle die die m-n Relation auf
zwei 1-n Relationen aufsplittet. Dieser Ansatz ist der Gängiste und hat sich bewährt.

Gruß Tom


----------



## Gorcky (16. Juli 2004)

> In der Spalte kategorien befinden sich nun alle Kategorien, zu denen das Restaurant gehört, getrennt durch einen Separator (z. B. &). Jetzt kannst du mit einer Scriptsprache deines Vertrauens alles auslesen, was du möchtest, die Redundanzfreiheit ist gegeben und du hast trotz allem nur zwei Tabellen.


 Das Speichern von mehreren Werten in einem Eigenschaftsfeld ist übrigens nicht im Sinne der Normalisierung.


----------

