2 Stimmen

Wie entwirft man eine Datenbank mit einer einzigen Kategorie und n Unterkategorien mit Mysql?

Wie entwirft man eine Datenbank mit einer einzigen Kategorie und n Unterkategorien mit Mysql?

Ejemplo:

Kategorie

catId kategoriename

1 Katze 1

2 Katze 2

3 Katze 3

4 Katze 4

Unterkategorie

subCatId subCategoryName catId

1 subcat1 1

2 subcat2 1

3 subcat3 2

4 subcat4 4

Für einzelne Kategorien kann ich die obige Struktur verwenden.

Wie dies, wenn ich n Anzahl von Unterkategorien habe. Wie sollte ich in diesem Fall die Datenbank gestalten?

vielen Dank im Voraus

5voto

Michał Pękała Punkte 2251

Sie können nur eine Tabelle verwenden category mit Spalten:

  • category_id
  • category_name
  • parent_category_id

Für die Hauptkategorien stellen Sie parent_category_id auf null setzen und fertig :)

0voto

Redlab Punkte 2952

Mit Normalisierung

2 Tabellen, wenn eine Unterkategorie nur eine übergeordnete Kategorie hat

Kategorie

id

SubCat

id

category_id (Verknüpfung mit der Kategorie)

Sie würden 3 Tabellen haben, wenn eine Unterkategorie zu mehr als 1 Kategorie gehören kann. Zwei mit Ihren Daten und eine für die Verknüpfung der beiden miteinander

Kategorie

id

name....

UnterKategorie

id

Name ....

Unter_Katze_Link

kategorie_id

unterkategorie_id

Die Suche nach allen Unterkategorien einer Kategorie würde also zu einer Aussage führen wie

select * from UnterKategorie wo category_id = idOfACategory

0voto

Peter Tillemans Punkte 34359

Mein Prinzip ist, dass man, wenn man N-Ebenen unterstützen kann, auch 2 Ebenen unterstützen kann (und nicht in eine Zwickmühle gerät, wenn ein wankelmütiger Geschäftskunde beschließt, Unter-Unterkategorien zu haben)

Ich würde also eine Kategorietabelle mit den Feldern

  • id (autogeneriert, Sequenz, UUID)
  • parent_id (Fremdschlüssel zu categories.id)
  • Name
  • ...

Um die Kinder einer Kategorie a zu erhalten

SELECT * FROM categories WHERE parent_id = :cat_id ;

Man muss ein bisschen aufpassen, dass es ein azyklischer gerichteter Graph bleibt, d.h. dass keine Schleifen entstehen, aber das ist auch schon alles.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X