Ich erstelle eine botanische Datenbank, in der die Pflanzen nach ihrer Taxonomie organisiert werden:
Leben Domain Königreich Stamm Klasse Auftrag Familie Gattung Arten
Ich habe erwogen, das Beispiel aus dem Artikel Hierarchische Daten in MySQL verwalten zu verwenden , aber es fügt die obige Liste als Datensätze innerhalb der Tabelle hinzu ... und ich bin mir nicht sicher, ob das die beste Sache ist, da ich mehrere Arten pro Gattung und mehrere Gattungen pro Familie haben werde und so weiter. Was würden Sie vorschlagen, ist der beste Weg, dieses Problem anzugehen. Vielen Dank im Voraus.
Ich bin mir nicht sicher, ob ich wirklich diesen Artikel kaufe. Graphstrukturen würden benötigt sein, wenn die Kategorien selbst veränderbar sind. So entschieden plötzlich Taxonomen, drei neue Ebenen zwischen Gattung und Spezies hinzuzufügen, und so weiter.
Aus dem Artikel:
... die Verwaltung hierarchischer Daten ist nicht das, wofür eine relationale Datenbank gedacht ist.
Eigentlich ist es genau das, wofür es gedacht ist:
Das hierarchische Datenmodell verlor an Zugkraft, da Codds relationales Modell zum De-facto-Standard wurde, der von praktisch allen gängigen Datenbankmanagementsystemen verwendet wird.
Ich würde zuerst eine Ansicht schreiben, die all Ihren Tabellen beigefügt ist, so dass Sie diese als Ihre Spalten haben würden:
%Vor% Jetzt können Sie diese Ansicht nach Belieben abfragen und sich keine Sorgen um Joins machen. Einfach :)
Sie können vollständige Taxonomiedaten von Ссылка herunterladen und die Daten werden mehr oder weniger monatlich aktualisiert. Die von ihnen bereitgestellten Daten enthalten einen Materialized Path - jede Spezies in der Datenbank hat eine Reihe von allen darüber liegenden Ebenen, wie eine Brotkrumen-Zeichenfolge oder einen Dateisystempfad.
Ich habe diese Daten verwendet, um in meiner Präsentation Modelle für hierarchische Daten eine Demo zu erstellen. Ich habe die materialisierten Pfaddaten in Closure Table konvertiert.
Es gibt mehrere Möglichkeiten, hierarchische Daten in einer relationalen Datenbank darzustellen, obwohl eine NoSQL-Lösung möglicherweise einfacher zu verwenden ist, als @duffymo erwähnt. Unter der Annahme eines RDBMS, siehe meine Frage über das Thema für eine Aufzählung von einem halben Dutzend Möglichkeiten . Für deine Situation würde ich mit einem materialisierten Pfad führen, um den Stammbaum einfach zu sehen. Wenn sich die Hierarchie regelmäßig ändert, würde ich wahrscheinlich auch als Adjazenzliste modellieren und den materialisierten Pfad mit einem Trigger aktualisieren.