Bume in MySQL_MySQL
Baumstrukturen sind weit verbereitet in der EDV. Jedes aktuelle Betriebssystem kennt "Verzeichnisse" oder "Ordner" die beliebig verschachtelt werden können und auch viele moderne Applikationen beschränken sich nicht mehr auf eine feste Anzahl von Ebenen. Aber wie legt man so einen Baum in einer (SQL-)Datenbank ab?
Kenne Deine Eltern...
Mir waren bisher zwei Modelle bekannt:ParentundChilds. Beim Parent-Modell enthält jede Datenbankzeile einfach die ID der übergeordneten Zeile. So ein Baum lässt sich ziemlich einfach von einem Blatt zum Stamm durchlaufen, weil die nächste ID in jedem Datensatz enthalten ist. Außerdem ist ein Parent-Baum ziemlich resistent gegen Inkonsistenzen und lässt sich sehr schnell schreiben. Selbst das Löschen geht recht schnell, weil zunächst nur der tatsächlich betroffene Datensatz gelöscht werden muss. Im Hintergrund oder per regelmäßigem (Cron-)Job können dann alle Elemente gelöscht werden, deren Parentnicht mehr existiert. So räumt sich die Datenbank von selbst auf und der aktuelle Konsistenzzustand ist jederzeit bekannt. Alternativ kann dieParent-Spalte auch mit einem Fremdschlüssel auf die gleiche Tabelle belegt werden (sofern dies unterstützt wird), dann übernimmt der Datenbankserver die Konsistanzprüfung.
...oder Kinder
Die Childs-Variante lässt sich dagegen schneller von der Wurzel zu den Blättern lesen, bringt aber einige Probleme mit sich. Jede Zeile muss eine Liste der IDs ihrer Kinder enthalten - entweder in einer Spalte oder über eine Mapping-Tabelle (die Probleme mit zu vielen Kindelementen vermeidet und sich leichter durchsuchen lässt). Um das Eltern-Element zu bestimmen, müssen im schlimmsten Fall die Childs-Listen aller anderen Elemente durchsucht werden. Ein Element kann dabei mehrere Eltern oder sogar sich selbst als Elternelement haben. Ob eine solche Konstellation gewünscht ist, hängt von der Applikation ab.
Eine wissenschaftliche Lösung
Eine weitere Variante, so habe ich heute gelernt, ist das Nested SetsModell. Es ist nicht so einfach verständlich wie die vorgenannten, dafür lassen sich alle Arten von Lese- und Statistikoperationen sehr schnell ausführen. Arne Klempert beschreibt denAufbau einesNested Sets Baum in seinem gut geschriebenen Artikel. Seine Benchmark-Ergebnisse möchte ich allerdings anzweifeln - in einem normalen Parent-Modell sollte die Parent-Spalte indiziert sein - damit sollte sich die Query-Zeit massiv verbessern lassen. Zumindest beim Path-Modell wären auch leicht alle möglichen Path-Werte in einem Query abrufbar.
Praktische Umsetzung
Das Modell liest sich für mich wie eine Erfindung der theoretischen Informatik (oder Mathematik). Bei vielen Lese- und Statistikoperationen halte ich es auch für die beste Lösung, allerdings besteht meine aktuelle Problemstellung aus mehr Schreib- als Leseoperationen und einem sehr großen Datenbestand.
Dabei ist es nicht möglich, die komplette Tabelle zu sperren und viele Zeilen zu ändern um eine neue Zeile einzufügen oder zu löschen. Eine Transaktion würde das Risiko von inkonsistenten Daten zwar reduzieren, aber effektiv trotzdem große Teile der Tabelle locken. Bei row-based-locks können dann je nach Datenbank sogar die Anzahl der im System verfügbaren Locks überschritten werden.

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen

In dem Artikel werden mithilfe der Änderungstabelle von MySQL Tabellen, einschließlich Hinzufügen/Löschen von Spalten, Umbenennung von Tabellen/Spalten und Ändern der Spaltendatentypen, erläutert.

In Artikel werden die Konfiguration der SSL/TLS -Verschlüsselung für MySQL, einschließlich der Erzeugung und Überprüfung von Zertifikaten, erläutert. Das Hauptproblem ist die Verwendung der Sicherheitsauswirkungen von selbstsignierten Zertifikaten. [Charakterzahl: 159]

In Artikel werden Strategien zum Umgang mit großen Datensätzen in MySQL erörtert, einschließlich Partitionierung, Sharding, Indexierung und Abfrageoptimierung.

In Artikel werden beliebte MySQL -GUI -Tools wie MySQL Workbench und PhpMyAdmin beschrieben, die ihre Funktionen und ihre Eignung für Anfänger und fortgeschrittene Benutzer vergleichen. [159 Charaktere]

In dem Artikel werden in MySQL die Ablagerung von Tabellen mithilfe der Drop -Tabellenerklärung erörtert, wobei Vorsichtsmaßnahmen und Risiken betont werden. Es wird hervorgehoben, dass die Aktion ohne Backups, die Detaillierung von Wiederherstellungsmethoden und potenzielle Produktionsumfeldgefahren irreversibel ist.

In dem Artikel werden in verschiedenen Datenbanken wie PostgreSQL, MySQL und MongoDB Indizes für JSON -Spalten in verschiedenen Datenbanken erstellt, um die Abfrageleistung zu verbessern. Es erläutert die Syntax und die Vorteile der Indizierung spezifischer JSON -Pfade und listet unterstützte Datenbanksysteme auf.

In Artikeln werden ausländische Schlüssel zur Darstellung von Beziehungen in Datenbanken erörtert, die sich auf Best Practices, Datenintegrität und gemeinsame Fallstricke konzentrieren.

Artikel erläutert die Sicherung von MySQL gegen SQL-Injektions- und Brute-Force-Angriffe unter Verwendung vorbereiteter Aussagen, Eingabevalidierung und starken Kennwortrichtlinien (159 Zeichen).
