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

Verknüpfen einer dritten Tabelle mit einer Brückentabelle in einer Viele-zu-Viele-Zuordnung

+1 für Matt Fenwick. Ich würde hinzufügen, dass Sie mit Ihren Fremdschlüsselbeschränkungen ein wenig vorsichtig sein möchten. Sie haben im Wesentlichen zwei Optionen, die beide ziemlich ähnlich aussehen könnten, abhängig von Ihrer Wahl der Primärschlüssel.

Option eins ist:Vergessen Sie die einfache Schnittmenge zwischen TEACHER und INSTRUMENT und ersetzen Sie es durch eine komplexe Schnittmenge, die teacher_id enthält , instrument_id und level_id . Alle drei dieser Spalten wären der (zusammengesetzte) Primärschlüssel dieser Schnitttabelle. Bei dieser Option haben Sie Fremdschlüsseleinschränkungen für teacher_id definiert und instrument_id (und level_id wenn dies tatsächlich ein Fremdschlüssel zu einem LEVEL ist Tabelle und nicht nur ein Integer- oder String-Code).

Option zwei ist:Behalte die einfache Schnittmenge zwischen TEACHER und INSTRUMENT (nennen wir es TEACHER_INSTRUMENT auch wenn das einfallslos ist) und fügen Sie eine Unter-Kind-Tabelle hinzu, die die Ebenen definiert, die unterrichtet werden können. Diese Unter-Kind-Tabelle (nennen wir sie SKILL ) hat eine level_id und einen Fremdschlüssel zu TEACHER_INSTRUMENT . Wenn der Primärschlüssel von TEACHER_INSTRUMENT ist die Kombination aus teacher_id und instrument_id dann die SKILL Tabelle wird die gleichen drei Spalten wie in Option eins haben. Was macht diese Option anders? Die Fremdschlüsseleinschränkung von SKILL muss zur Kreuzungstabelle, nicht zu TEACHER und INSTRUMENT .

Warum ist das wichtig? Wenn Sie sich für Option eins entscheiden, benötigen Sie möglicherweise zusätzliche Abfragelogik, um ein vollständig ausgefülltes Kompetenzraster zu erhalten, da Sie keine Einschränkung der referenziellen Integrität definieren können, die sicherstellt, dass alle Kompetenzniveaus für jede Lehrer/Instrument-Kombination ausgefüllt werden.

Wenn Sie sich dagegen für Option zwei entscheiden, haben Sie den Vorteil, dass die Bedenken getrennt werden, wer was verwenden kann und wie gut sie es unterrichten können.

Was Sie vermeiden möchten, ist, eine Tabelle zu haben, die nur die Lehrer/Instrument-Beziehung enthält, und dann eine zweite, die (unabhängig) diese Beziehung wiederholt, aber das Detail der Fähigkeitsstufe hinzufügt. Wenn Sie das tun, laufen Sie Gefahr, dass diese beiden Dinge nicht mehr synchron sind.