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

MYSQL komplexe Union

Wenn Ihre gewünschte Hierarchie Programm -> Thema -> Strang -> Jahr -> Einheit -> Lernveranstaltung ist, dann sollten Sie Ihre Tabellenstruktur entsprechend anpassen. Insbesondere Thema sollte eine Fremdschlüsselbeziehung zwischen Thema und Programm haben, und Sie benötigen eine zusätzliche Ebene für Jahr. Ein Fremdschlüssel zwischen Theme und Programm vermeidet die Notwendigkeit eines Cross Joins. Cross Joins haben die Angewohnheit, Sie zu beißen und sollten im Allgemeinen vermieden werden.

Wenn Sie sich diese db fiddle ansehen Sie werden sehen, dass ich diese Änderungen vorgenommen habe. Ich habe die Jahresebene Strandjahr genannt, um die Verwendung eines reservierten Wortes zu vermeiden, aber die Absicht sollte klar sein. Jetzt werden die Joins zu Inner Joins (anstelle von Left Joins), um die Beschreibungswerte von höheren Ebenen im Baum aufzunehmen, und die unterste Ebene (learning_events) enthält aus keinem anderen Grund automatisch nur Werte, die mit Strang, Jahr und Einheit übereinstimmen dass die Struktur selbst dies garantiert, durch den einfachen Ausweg, dass jede Ebene einen Fremdschlüssel zur darüber liegenden Ebene hat.

Beachten Sie, dass die Fremdschlüssel effektiv verkettet sind. Sie benötigen beispielsweise keinen speziellen Fremdschlüssel zwischen learning_event und Strang, da die dazwischen liegenden Schlüssel in der Kette die Beziehung garantieren.