Der folgende Inhalt stellt den Prozess und die Lösung von MySQL vor, bei dem die Adjazenzliste zum Speichern der Baumstruktur verwendet wird, und analysiert das gespeicherte Diagramm. Heute wollen wir uns mit einem schwierigeren Problem befassen: Wie speichert man eine Baumstruktur in einer Datenbank? Relationale Datenbanken wie MySQL eignen sich besser zum Speichern flacher Daten wie Tabellen, sind jedoch bei tiefen Daten wie Baumstrukturen schwer zu kontrollieren. Beispielsweise müssen wir die Personalstruktur des Unternehmens speichern. Die allgemeine hierarchische Struktur ist wie folgt: (Ein Bild zu zeichnen ist nicht einfach..) Wie also wird diese Struktur gespeichert? Und holen Sie sich folgende Informationen: 1. Finden Sie heraus, wer Xiaotians direkter Vorgesetzter ist. 2. Überprüfen Sie die direkten Mitarbeiter unter der Leitung von Lao Song. 3. Überprüfen Sie alle Vorgesetzten von Xiaotian. 4. Fragen Sie alle von Lao Wang verwalteten Mitarbeiter ab. Lösung 1: (Adjazenzliste) speichert nur die übergeordneten Knoteninformationen des aktuellen Knotens. CREATE TABLE Mitarbeiter( Die aufgezeichneten Informationen sind einfach und grob, daher speichern Sie jetzt diese Strukturinformationen: OK, kommen wir nun zum Antwortteil: 1. Anfrage an Xiaotians direkten Vorgesetzten: WÄHLEN Sie e2.eid, e2.ename VON Mitarbeiter e1, Mitarbeiter e2, WO e1.parent_id=e2.eid UND e1.ename='Mitarbeiter'; 2. Befragen Sie die direkten Mitarbeiter unter der Leitung von Lao Song: WÄHLEN Sie e1.eid, e1.ename VON Mitarbeiter e1, Mitarbeiter e2, WO e1.parent_id=e2.eid UND e2.ename='Mitarbeiter'; 3. Überprüfen Sie alle Vorgesetzten von Xiaotian. Hier gibt es definitiv keine Möglichkeit, direkt zu prüfen. Sie können nur eine Schleife verwenden, um in einer Schleife abzufragen. Überprüfen Sie zuerst den direkten Vorgesetzten, dann den direkten Vorgesetzten des direkten Vorgesetzten und so weiter. Für so eine lästige Sache müssen Sie immer noch zuerst eine gespeicherte Prozedur erstellen: Augen auf und genau hinschauen, der nächste Schritt ist die Show-Operation: CREATE DEFINER=`root`@`localhost` FUNCTION `getSuperiors`(`uid` int) GIBT varchar(1000) CHARSET gb2312 ZURÜCK BEGINNEN DECLARE Vorgesetzte VARCHAR(1000) DEFAULT ''; DECLARE sTemp INTEGER DEFAULT uid; DECLARE tmpName VARCHAR(20); WÄHREND (sTemp>0) TUN Wählen Sie parent_id in sTemp aus, wobei eid = sTemp ist. Wählen Sie ename in tmpName aus, wobei eid = sTemp; WENN(sTemp>0)DANN SET Vorgesetzte = concat(tmpName,',',Vorgesetzte); ENDE, WENN; ENDE WÄHREND; SETze Vorgesetzte = LINKS(Vorgesetzte, ZEICHENLÄNGE(Vorgesetzte)-1); RÜCKKEHR Vorgesetzte; ENDE Diese gespeicherte Prozedur kann alle übergeordneten Knoten der untergeordneten Knoten abfragen. Probieren wir es aus. Okay, der Vorgang ist abgeschlossen. Anscheinend das. Es ist mühsam, alle übergeordneten Knoten eines untergeordneten Knotens abzurufen. . 4. Fragen Sie alle von Lao Wang verwalteten Mitarbeiter ab. Die Idee ist folgende: Holen Sie sich zuerst die Mitarbeiter-IDs aller Mitarbeiter, deren übergeordneter Knoten die ID von Lao Wang ist, fügen Sie dann den Namen des Mitarbeiters zur Ergebnisliste hinzu und rufen Sie dann eine magische Suchfunktion auf, um eine magische Suche durchzuführen: CREATE DEFINER=`root`@`localhost` FUNCTION `getSubordinate`(`uid` int) GIBT varchar(2000) CHARSET gb2312 ZURÜCK Sehen Sie die erstaunlichen Ergebnisse: Obwohl ich es herausgefunden habe, war es ehrlich gesagt nicht einfach. . . Der Vorteil dieser Methode besteht darin, dass weniger Informationen gespeichert werden müssen und sie sehr praktisch ist, um direkte Vorgesetzte und direkte Untergebene zu überprüfen. Der Nachteil besteht darin, dass mehrstufige Abfragen sehr schwierig durchzuführen sind. Wenn Sie also nur die direkte Vorgesetzten-Untergebenen-Beziehung verwenden müssen, ist diese Methode immer noch eine gute Wahl und kann viel Platz sparen. Später werden noch weitere Aufbewahrungslösungen vorgestellt. Einen absoluten Unterschied zwischen gut und schlecht gibt es nicht, sie eignen sich lediglich für unterschiedliche Anlässe. Das könnte Sie auch interessieren:
|
<<: Zusammenfassung von 4 Möglichkeiten zum Hinzufügen von Benutzern zu Gruppen in Linux
>>: Vue realisiert Preiskalendereffekt
Ich bin während der Entwicklung auf ein solches P...
In diesem Artikelbeispiel wird der spezifische JS...
1. Welche Zeilenformate gibt es? Sie können Ihre ...
Inhaltsverzeichnis Themen dynamisch ändern Die er...
Hintergrund Als ich heute mit anderen Projektteam...
Ein ES-Image vom Docker-Hub heruntergeladen, Vers...
In diesem Artikel sind einige sogenannte Spezifik...
Inhaltsverzeichnis 1. Detaillierte Syntax der Met...
Inhaltsverzeichnis Der Hintergrund ist: Was wird ...
1. Was ist Eventdelegation? Ereignisdelegierung: ...
Inhaltsverzeichnis 1. Rendern 2. Daten binden und...
Ich glaube, dass Leute, die Erfahrung mit React h...
HTML + CSS + JS imitieren den Helligkeitsanpassun...
Wir alle wissen, dass Docker-Container voneinande...
Inhaltsverzeichnis Werkzeug: Anmeldeszenario: übe...