mySQL - n:m Beziehung

mschneider

Grünschnabel
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
 
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)
....
 
Zuletzt bearbeitet:
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.
 
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
 
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.
 

Neue Beiträge

Zurück