Wie bewahrt man die Familie Baum Daten in einer mysql-Datenbank
Habe ich einen Stammbaum. Ich möchte, um es zu speichern in einer mysql-Datenbank. Ich habe eine Tabelle mit einer Spalte namens "Familienmitglieder," aber ich weiß nicht, wie Sie diese Familie Mitglieder. So bin ich zum Beispiel unter meinem Vater, und mein Sohn ist unter mir. Also ich denke, wie kann ich Sie speichern diese Art von Baum in eine Datenbank?
- Siehe die Artikel: Speicherung von Hierarchischen Daten in einer Datenbank
- und dieses hier: Managing Hierarchical Data in MySQL
- und eine Präsentation: Modelle für hierarchische Daten
- und ein hervorragendes Buch von Joe Celko: Bäume und Hierarchien in SQL for Smarties
- Ich denke, dass die Nested Set model verhält sich sehr gut mit MySQL. Siehe diesen Vergleich: Nachbarschaft list vs. Nested sets: MySQL
- vielleicht zu spät, um nützlich zu sein, ich habe eine Antwort, geben Sie bitte Ihre Kommentare, da bin ich auch beschäftigt mit der Planung eines solchen schema
- Ja, verwenden Sie Verschachtelte Sätze. Auch - nicht es selbst implementieren! Wenn Sie die Sprache angeben, die Sie verwenden möchten, die mit dieser Datenbank - vorausgesetzt, Sie sind nicht mit einer standalone-Lösung wie Access -, sollten Sie finden, dass es gute Implementierungen dieser bereits. Zum Beispiel, wenn Sie mit Hilfe von PHP, haben einen Blick auf die Propel ORM.
- mögliche Duplikate von MySQL-Store-Beziehung (Familie) Baum
Du musst angemeldet sein, um einen Kommentar abzugeben.
So, Sie sagten, Sie haben eine Tabelle mit einer Spalte namens "Familienmitglieder". Für mich ist das einfach unangemessen, weil es nicht respektiert, Normalisierung 🙂 als Erstes würde ich es nennen "familyTreeId". Nun, lassen Sie uns nun die FamilyTree Tabelle.
Dieser Tabelle wäre so etwas wie dieses:
FamilyTree(id, motherId, fatherId, etc)
--> usw: falls Sie zusätzliche Datenid
wird der Primärschlüssel der TabellemotherId
wird ein link zu der Zeile in derFamilyTree
Tabelle gehört zu der MutterfatherId
wird ein link zu der Zeile in derFamilyTree
Tabelle, die gehört dem VaterAlso die Zeilen:
Andere option wäre zum speichern der Paare
FamilyTreeParents(id, motherId, fatherId)
FamilyTreeNodes(id, familyTreeParentsId)
id
werden die Primärschlüssel der TabellenfamilyTreeParentsId
wird ein Fremdschlüssel auf eineFamilyTreeParents
TabellemotherId
wird ein foreign key zu einer Zeile in derFamilyTreeNodes
Tabelle gehört zu der MutterfatherId
wird ein foreign key zu einer Zeile in derFamilyTreeNodes
Tabelle, die gehört dem VaterAlso die Zeilen:
FamilyTreeParents
FamilyTreeNodes
Daten normalisiert auf diese Weise, weil Sie nicht die Wiederholung von Informationen (wie
you
undyourwife
fürson1
undson2
wie ich im anderen Lösung. Jedoch, diese Lösung ist weniger effizient hinsichtlich der Geschwindigkeit, da wird es erforderlich sein, mehr Verknüpfungen.Ich würde immer zwei Tabellen, eine mit Personen, andere mit Beziehungen.
Frage ist hier, wenn Sie sollten halten Sie die realtion in einem Datensatz (z.B. Mann - Frau) oder auch von der anderen person-view (1:Mann - Frau 2:Frau - Mann)
Vorteil des zweiten Ansatzes ist die schnelle Suche so schnell Rendern von z.B. layout, sondern auch größere Tabelle mit mehr schreibt, wenn Daten geändert werden und mögliche Fehler.
Ich würde den ersten Ansatz und verwenden Sie einen index, um die Suche schneller.
Also mit einem minimum an verbindungen, die Sie schreiben konnte Sie aus der folgenden Familie
Können Sie schema wie dieses
Family( Parent_name, Child_name )
. Der "Tupel"(Parent_name, Child_name)
sind der Schlüssel zu Ihrem Tisch. Vorausgesetzt, es gibt keine doppelten(Parent_name, Child_name)
existieren in Ihrer Familie Baum. Wenn Sie etwas haben, wieSocial Security Number
zur eindeutigen Identifizierung einer person in der Familie Baum, dann sollten Sie dieParent_ssn, Child_ssn
anstelle von Namen und haben eine separate Tabelle zum speichern der Beziehung zwischenssn
undname
, deren Schlüssel wäressn
Elemente in dieser Tabelle können
Hoffe, das hilft