Wie erstelle ich verschachtelte Kategorien in einer Datenbank?

8

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?

    
MathOldTimer 29.05.2009, 14:11
quelle

6 Antworten

7

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.

    
user114319 29.05.2009, 14:48
quelle
11

Erstellen Sie eine Kategorientabelle mit den folgenden Feldern:

  • CategoryID - Ganzzahl
  • CategoryName - String / Varchar / Was auch immer
  • ParentID - Ganzzahl

Ihre ParentID verweist dann auf die CategoryID des übergeordneten Elements zurück.

Beispiel:

%Vor%     
TheTXI 29.05.2009 14:15
quelle
5

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.)

    
Dan Tao 29.05.2009 14:44
quelle
3

Sie sollten entweder nested sets oder parent-child models verwenden.

Parent-child :

%Vor% %Vor%

wählt alle Käufer in Oracle aus.

Nested sets :

%Vor% %Vor%

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.

    
Quassnoi 29.05.2009 14:14
quelle
0

Was Sie brauchen, ist eine grundlegende Eltern-Kind-Beziehung:

%Vor%     
Anton Gogolev 29.05.2009 14:15
quelle
0

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

    
Charles Kithika 28.07.2009 06:49
quelle

Tags und Links