Paket Nested Set

Allgemein

  • Nested Sets bieten die Möglichkeit Baumstrukturen in einer relationalen Datenbank abzulegen um diese ohne Rekursionen performant auslesen zu können
  • Beschreibung von Nested Sets und wie man diese in MySQL umsetzt: Nested Sets

Datenbankstruktur

  • Für alle Nested Sets gibt es einen abstrakten Record und damit verbunden eine Basisdatenbankstruktur
    CREATE TABLE `%packagenamespace%_%packagename%_Record_%recordname%` (
        `id` BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT,
        `lft` BIGINT(20) UNSIGNED NOT NULL,
        `rgt` BIGINT(20) UNSIGNED NOT NULL,
        PRIMARY KEY (`id`),
        KEY (`lft`),
        KEY (`rgt`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8
  • Diese kann durch den abgeleiteten Record und der konkreten Datenbanktabelle weitere Felder aufnehmen

Anwendung

  • Erstellung eines abgeleiteten Records der die konkrete Datenstruktur eines Nested Set Knotens definiert
    class %packagenamespace%_%packagename%_Record_%recordname% extends DragonX_NestedSet_Record_NestedSet
    {}
  • Hinzufügen von neuen Nested Set Knoten
    $logicNestedSet = new DragonX_NestedSet_Logic_NestedSet();
    $logicNestedSet->addNode(
        new %packagenamespace%_%packagename%_Record_%recordname%(),
        new %packagenamespace%_%packagename%_Record_%recordname%(%parent_id%)
    );
  • Wenn beim Hinzufügen kein Parentknoten angegeben wird, wird ein neuer Wurzelknoten erstellt und damit ein neuer Baum
  • Entfernen von Nested Set Knoten
    $logicNestedSet = new DragonX_NestedSet_Logic_NestedSet();
    $logicNestedSet->removeNode(
        new %packagenamespace%_%packagename%_Record_%recordname%(%id%)
    );
  • Das Auslesen der Nested Set Strukturen erfolgt für jeden Anwendungsfall individuell durch optimierte SQL Statements