MySQL - Hierarchische Tabellen, Version 4

Alte Version

Dies ist eine alte Version des Inhalts in unserem Archiv. Besuchen Sie die aktuelle Version dieser Seite.

Diese Version wurde von Jola am 13. May 2008 um 16:51 Uhr erstellt.
Bemerkung des Bearbeiters: Veröffentlicht

Änderungen gegenüber vorheriger Version anzeigen


Die Besonderheit von hirarchischen Tabellen im Gegensatz zu anderen Tabellen ist, dass sie, wie der Name schon sagt eine hirarschiche Struktur haben. Diese entsteht dadurch, dass der Fremdschlüssel auf den eigenen Primärschlüssel verweist. Auf diese Weise lassen sich z.B. sehr gut Ordnerstrukturen erstellen.

Ich werde versuchen das Prinzip der hirarchischen Tabellen an einem kleinen Beispiel zu verdeutlichen. Nehmen Sie an Sie wollen Informationen oder Artikel zu verschiedenen Betriebssystemen speichern. Um diese aber zu Ordnen brauchen sie verschiedene Kategorien oder virtuelle Ordner.

Als Erstes erstellen sie eine Tabelle mit 3 Spalten:

 
HTML
1
2
3
4
5
CREATE TABLE `Kategorie`(
`ID` INT(11) NOT NULL PRIMARY KEY auto_increment,
`Name` VARCHAR(45) NOT NULL,
`ElternID` INT(11) NOT NULL,
) ENGINE=MyISAM DEFAULT CHARSET=latin1 ;

Dann können sie z.B. folgenden Inhalt hinzufügen:

 
sql
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
INSERT INTO `Kategorie` (`Name`, `ElternID`) VALUE (`Opensource`,`0`);
INSERT INTO `Kategorie` (`Name`, `ElternID`) VALUE (`Windows`,`0`);
INSERT INTO `Kategorie` (`Name`, `ElternID`) VALUE (`Linux`,`1`);
INSERT INTO `Kategorie` (`Name`, `ElternID`) VALUE (`SUSE`,`3`);
INSERT INTO `Kategorie` (`Name`, `ElternID`) VALUE (`Knoppix`,`3`);
INSERT INTO `Kategorie` (`Name`, `ElternID`) VALUE (`Win XP`,`2`);
INSERT INTO `Kategorie` (`Name`, `ElternID`) VALUE (`Vista`,`2`);
INSERT INTO `Kategorie` (`Name`, `ElternID`) VALUE (`Ubuntu`,`3`);
INSERT INTO `Kategorie` (`Name`, `ElternID`) VALUE (`Macintosh`,`0`);
INSERT INTO `Kategorie` (`Name`, `ElternID`) VALUE (`Win 2000`,`2`);

Nun haben sie so eine Tabelle:

ID Name ElternID
1 Opensource
0
2 Windows 0
3 Linux 1
4 SUSE 3
5 Knoppix 3
6 Win XP 2
7 Vista 2
8 Ubuntu 3
9 Macintosh 0
10 Win 2000 2

Bild zu MySQL - Hierarchische Tabellen

Wie man sieht werden alle Kategorien erstmal in die gleiche Tabelle eingetragen und werden einfach per auto_incerement der Reihe nach mit einer ID versehen. Erst durch die spalte „ElternID“ wird die Tabelle zur hirarchischen Tabelle. Der Fremdschlüssel „ElternID“ verweist auf eine andere Kategorie in der selben Tabelle und besagt, dass diese Kategorie die „Elternkategorie“ also eine übergeordnete Kategorie sein soll. Manche Kategorien haben die ElternID 0. Diese sind am höchsten in der Hirarchie der Tabelle und liegen sozusagen im Index. Das Bild rechts soll die hirarchische Struktur der Tabelleverdeutlichen.

Vor- und Nachteile

Diese Form der Tabelle ermöglicht ein besonders schlankes Tabellendesign. Alle Benötigten Informationen werden in nur einer Tabelle gespeichert, ohne dabei Normalisierungsregeln zubrechen.

Desweiteren bieten hirarchische Tabellen theoretisch unbegrenzte Möglichkeiten für die Strukturierung der Kategorien. Es kann eine Sehr breite Struktur, mit vielen Kategorien nebeneinander, oder eine sehr tiefe Struktur, mir vielen Kategorien untereinander, erzeug werden.

Die Handhabungdieser Tabellen ist auch sehr einfach, da nur eine Tabelle benutzt wird, und man kein JOINS oder Verweise zu anderen Tabellen braucht.

Der Nachteil dieser Tabellenform ist, das es nicht möglich ist einer Kategorie mehrere Elternkategorien zugeben. Somit kann eine Kategorie nicht in mehreren verschiedenen Kategorien auftauchen. Das Kopieren einer Kategorie ist dadurch, im Gegensatz zum Verschieben, nicht möglich.