Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Assoziationstabellen implementieren

Die Beziehung zwischen Locations und Events ist ein Beispiel für eine 1-zu-viele-Beziehung. Das bedeutet, dass jedem einzelnen Standort viele Ereignisse zugeordnet werden können. Diese Arten von Beziehungen werden normalerweise implementiert, indem ein Fremdschlüssel zu der „Vielen“-Tabelle (Ereignisse) hinzugefügt wird, der auf den Primärschlüssel der „Eins“-Tabelle (Orte) verweist.

Die Beziehung zwischen „Standorten“ und „Typen“ ist ein Beispiel für eine Viele-zu-Viele-Beziehung. Das bedeutet, dass ein Ort viele Typen haben kann und ein Typ mit vielen Orten in Beziehung stehen kann. Diese Arten von Beziehungen werden normalerweise mit einer Verknüpfungstabelle implementiert, die Fremdschlüssel für die zugehörigen Zeilen enthält. Die Verknüpfungstabelle hat normalerweise einen zusammengesetzten Primärschlüssel aus den beiden Fremdschlüsseln, was bedeutet, dass ein Standort nicht zweimal mit dem Typ „Bar“ verknüpft werden kann.

Daher könnten die folgenden Tabellenstrukturen für Sie geeignet sein:

Location: ID (primary key), LocationName, ...
Events: ID (primary key), LocationID (foreign key), Date, Name, ...
LocationTypes: LocationID (fk), TypeID (fk)
Types: ID (pk), Name, ...

Um die Informationen über mehrere Tabellen hinweg abzufragen, müssen Sie Joins verwenden. Für die 1-zu-viele-Beziehung funktioniert die folgende Abfrage:

SELECT
    l.LocationName, e.Name, e.Date
FROM Location l
    JOIN Events e ON l.ID = e.LocationID

Für eine Viele-zu-Viele-Beziehung wird die folgende Abfrage die Informationen zusammenführen.

SELECT
    l.LocationName, t.Name as TypeName
FROM Location l
    JOIN LocationTypes lt ON l.ID = lt.LocationID
    JOIN Types t ON lt.TypeID = t.ID

Diese Beispiele zeigen nur einen inneren Standard-Join, es gibt andere Join-Typen, die Ihren Anforderungen besser entsprechen.