Ich mache eine Video-Website, auf der Kategorien verschachtelt werden:
z.B. Programmierung- & gt; C Sprache - & gt; MIT-Videos - & gt; Video 1 Programmierung - & gt; C Sprache - & gt; Stanford Video - & gt; Video 1 Programmierung - & gt; Python - & gt; Video 1
Diese Kategorien und Unterkategorien werden von Benutzern im laufenden Betrieb erstellt. Ich muss sie zeigen, wie Leute sie in Form eines navigierbaren Menüs erstellen, so dass Leute die Sammlung leicht durchsuchen können.
Könnte mir bitte jemand helfen, wie ich eine solche Datenbank erstellen kann?
Quassnoi sagte:
Sie sollten entweder verschachtelte Mengen oder Eltern-Kind-Modelle verwenden.
Ich habe sie beide implementiert. Was ich sagen könnte ist:
Verwenden Sie die geschachtelte Mengenarchitektur, wenn sich Ihre Kategorien-Tabelle nicht häufig ändert, weil sie bei einer Auswahlklave schnell ist und mit nur einer Anfrage den gesamten Zweig der Hierarchie für einen bestimmten Eintrag erhalten kann. Bei einer insert- oder update-Klausel dauert es jedoch länger als bei einem übergeordneten untergeordneten Modell, die Felder für das linke und das rechte Feld (oder das untere und das obere Feld im Beispiel unten) zu aktualisieren.
Ein weiterer Punkt, ganz trivial muss ich zugeben, aber:
Es ist sehr schwierig, die Hierarchie manuell in der Datenbank zu ändern (dies könnte während der Entwicklung passieren). Stellen Sie also sicher, dass Sie zuerst eine Schnittstelle implementieren, um mit dem verschachtelten Satz zu spielen (einen übergeordneten Knoten ändern, einen Zweigknoten verschieben, einen Knoten oder den gesamten Zweig löschen usw.).
Hier sind zwei Artikel zum Thema:
Letzte Sache, ich habe es nicht versucht, aber ich habe irgendwo gelesen, dass Sie mehr als einen Baum in einer verschachtelten Settabelle haben können, ich meine mehrere Wurzeln.
Aus dem Beispiel in Ihrer Frage sieht es so aus, als ob es für eine bestimmte Kategorie möglich wäre, mehrere Eltern zu haben (zB "MIT Videos - & gt; Video 1 Programmierung" sowie "Video - & gt; Video 1 Programmierung "), in diesem Fall wäre das einfache Hinzufügen einer ParentID-Spalte nicht ausreichend.
Ich würde empfehlen, zwei Tabellen zu erstellen: eine einfache Categories-Tabelle mit CategoryID- und CategoryName-Spalten und eine separate CategoryRelationships-Tabelle mit ParentCategoryID- und ChildCategoryID-Spalten. Auf diese Weise können Sie beliebig viele Eltern-Kind-Beziehungen für eine bestimmte Kategorie angeben. Es wäre sogar möglich, dieses Modell zu verwenden, um eine duale Beziehung zu haben, bei der zwei Kategorien gleichzeitig Eltern und Kind sind. (Von meinem Kopf her kann ich mir keinen großen Nutzen für dieses Szenario vorstellen, aber es zeigt zumindest, wie flexibel das Modell ist.)
Sie sollten entweder nested sets
oder parent-child
models verwenden.
Parent-child
:
wählt alle Käufer in Oracle
aus.
Nested sets
:
wählt alle Käufer in einer Datenbank aus.
Siehe diese Antwort für weitere Details.
Nested sets
ist einfacher abzufragen, aber es ist schwieriger zu aktualisieren und schwieriger, eine Baumstruktur zu erstellen.
Was Sie brauchen, ist eine grundlegende Eltern-Kind-Beziehung:
%Vor%Eine bessere Möglichkeit, die parent_id der Tabelle zu speichern, ist, sie innerhalb der ID verschachtelt zu haben z. B.
100000 Programmierung 110000 C Sprache 111000 Video 1 Programmierung 111100 C Sprache 111110 Stanford Video
etc..so alles, was Sie brauchen, ein Skript, um die ID so zu verarbeiten, dass die erste Ziffer die oberste Kategorie darstellt und so weiter, wenn Sie tiefer in die Hierarchie gehen
Tags und Links database nested categories