AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Stammbaum-Erzeugung

Offene Frage von "BUG"
Ein Thema von hansklok · begonnen am 7. Okt 2015 · letzter Beitrag vom 14. Okt 2015
Antwort Antwort
Seite 1 von 2  1 2      
hansklok

Registriert seit: 14. Apr 2004
Ort: Karlsruhe
318 Beiträge
 
Delphi 2010 Architect
 
#1

Stammbaum-Erzeugung

  Alt 7. Okt 2015, 13:56
Hallo,

ich habe hier schon sehr oft, sehr erfolgreich Hilfe von Euch erhalten. Danke dafür. Und heute versuche ich es wieder.

Geplant ist die Erstellung einer Genealogie-Anwendung, in der Benutzer ihre Stammbäume verwalten können. Die Daten sollen in einer Datenbank gespeichert werden (SQLite) mit folgenden Tabellen (sehr vereinfachtes Schema, da es um den Grundaufbau gehen soll):

Persons
  • Gender: Varchar
  • Name: Varchar
  • StartPerson: Boolean

Families
  • PartnerA: Integer
  • PartnerB: Integer

Children
  • FamilyID: Integer
  • PersonID: Integer
  • Order: Integer

StartPerson kann zur Laufzeit im Programm jeder x-beliebigen Person in der Personen-Tabelle zugewiesen werden (beispielsweise über eine ListBox, die alle Personen abbildet), jedoch darf nur eine Person diesen True-Wert erhalten. Ausgehend davon, welche Person aktuell als StartPerson selektiert ist, soll dann vermutlich durch eine Baumstruktur, der Stammbaum erstellt werden. Dabei gibt es den Probanden (Root-Knoten) und zu diesem sollen nun rekursiv alle Verwandten aus der Datenbank ausgelesen werden (Vater, Mutter, Kinder, Geschwister, Partner(innen)). Diesen wiederum sollen solange alles Verwandten ausgelesen werden, bis es keine Verknüpfungen mehr gibt. Genau da hakt mein Denkansatz, da ich keinerlei Ahnung habe, wie ich das rekursiv umsetzen soll. Geplant ist nämlich eine Art Verwandtschaftsrechner, der ausgehend von der StartPerson zu einer x-beliebigen anderen Person der Personen-Tabelle den Verwandtschaftsgrad ausgibt (Sohn/Tochter, Frau/Mann, Großmutter/-vater, Urgroßmutter/-vater, Neffe, Enkel etc.), vorausgesetzt, es gibt ein Verwandtschaftsverhältnis. Wie könnte sich das Umsetzen lassen, wie schaut solch eine Datenstruktur aus bzw. ist der Datenbankansatz der richtige?

Fragt mit dankenden Grüßen,

hansklok
  Mit Zitat antworten Zitat
jobo

Registriert seit: 29. Nov 2010
3.072 Beiträge
 
Delphi 2010 Enterprise
 
#2

AW: Stammbaum-Erzeugung

  Alt 7. Okt 2015, 14:08
Ich würde sagen, du sammelst die Herkunftsknoten nach oben (Richtung Oppa&Omma) der beiden Personen und prüfst, ob es einen identischen Knoten gibt.
Wie das sql technisch aussieht, hängt von der konkreten Implementiernug des Stammbaums ab.
Gruß, Jo
  Mit Zitat antworten Zitat
hansklok

Registriert seit: 14. Apr 2004
Ort: Karlsruhe
318 Beiträge
 
Delphi 2010 Architect
 
#3

AW: Stammbaum-Erzeugung

  Alt 7. Okt 2015, 14:11
Ich würde sagen, du sammelst die Herkunftsknoten nach oben (Richtung Oppa&Omma) der beiden Personen und prüfst, ob es einen identischen Knoten gibt.
Wie das sql technisch aussieht, hängt von der konkreten Implementiernug des Stammbaums ab.
Kannst Du das bitte etwas ausführlicher erläutern?
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Stammbaum-Erzeugung

  Alt 7. Okt 2015, 14:15
Die Startperson gehört nicht zum Objekt Person.
Families würde ich PartnerShip o.ä. nennen, da eine Familie ja weiter gefasst ist.
Children besser ParentShip ( im Sinne ist Kind von: Person -> Person). Diese würde ich auch unabhängig von PartnerShip modellieren ( unehelige Kinder, Alleinerziehende usw.)
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#5

AW: Stammbaum-Erzeugung

  Alt 7. Okt 2015, 14:20
Die Startperson gehört nicht zum Objekt Person.
Families würde ich PartnerShip o.ä. nennen, da eine Familie ja weiter gefasst ist.
Children besser ParentShip ( im Sinne ist Kind von: Person -> Person). Diese würde ich auch unabhängig von PartnerShip modellieren ( unehelige Kinder, Alleinerziehende usw.)
Es würde sicb als Begrifflichkeit Zeugungsgemeinschaft anbieten. Und wenn man das Vormittagsprogramm auf den privaten Sendern anschaut, so legt man dort eine 1:n Struktur dahinter
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
hansklok

Registriert seit: 14. Apr 2004
Ort: Karlsruhe
318 Beiträge
 
Delphi 2010 Architect
 
#6

AW: Stammbaum-Erzeugung

  Alt 7. Okt 2015, 14:22
Die Startperson gehört nicht zum Objekt Person.
In dem Falle hast Du recht, aber da die Daten nur in der SQLite-Tabelle gespeichert werden und bei einem erneuten Programmaufruf die StartPerson automatisch gezeigt werden soll, muss ich sie ja irgendwo kenntlich machen und abspeichern. Deshalb

Zitat:
Families würde ich PartnerShip o.ä. nennen, da eine Familie ja weiter gefasst ist.
Children besser ParentShip ( im Sinne ist Kind von: Person -> Person). Diese würde ich auch unabhängig von PartnerShip modellieren ( unehelige Kinder, Alleinerziehende usw.)
Die Namensgebung ist im Moment zweitrangig, ich weiß, was Du meinst. Es gibt einen zugrundeliegenden Standard, @Sir Ruf kennt ihn aus älteren Beiträgen. Er heißt GEDCOM-Standard. Alleinerziehende Familien werden einfach durch Auslassen eines der beiden Partner gekennzeichnet (Wert -1 beispielsweise).
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: Stammbaum-Erzeugung

  Alt 7. Okt 2015, 14:25
Zitat:
In dem Falle hast Du recht, aber da die Daten nur in der SQLite-Tabelle gespeichert werden und bei einem erneuten Programmaufruf die StartPerson automatisch gezeigt werden soll, muss ich sie ja irgendwo kenntlich machen und abspeichern. Deshalb
Aber nicht bei jeder einzelnen Person. Besser in Ini/XML oder gesonderten Tabelle
Markus Kinzler
  Mit Zitat antworten Zitat
hansklok

Registriert seit: 14. Apr 2004
Ort: Karlsruhe
318 Beiträge
 
Delphi 2010 Architect
 
#8

AW: Stammbaum-Erzeugung

  Alt 7. Okt 2015, 14:27
Zitat:
In dem Falle hast Du recht, aber da die Daten nur in der SQLite-Tabelle gespeichert werden und bei einem erneuten Programmaufruf die StartPerson automatisch gezeigt werden soll, muss ich sie ja irgendwo kenntlich machen und abspeichern. Deshalb
Aber nicht bei jeder einzelnen Person. Besser in Ini/XML oder gesonderten Tabelle
Eine gesonderte Tabelle mit dann immer nur einem Datensatz, der die StartPerson kennzeichnet? Ini/Xml bietet sich nicht an, da der Benutzer ja beliebig viele Familiengeschichten (Stammbaum-Datenbanken) aufzeichnen kann.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#9

AW: Stammbaum-Erzeugung

  Alt 7. Okt 2015, 14:30
Mit eine Datensatz pro Stammblatt
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von BUG
BUG

Registriert seit: 4. Dez 2003
Ort: Cottbus
2.094 Beiträge
 
#10

AW: Stammbaum-Erzeugung

  Alt 7. Okt 2015, 14:45
Diese würde ich auch unabhängig von PartnerShip modellieren ( unehelige Kinder, Alleinerziehende usw.)
Potenziell lässt sich das alles als Ereignis modellieren. Damit lässt sich auch eine Menge Zusatzinformation unterbringen, die sonst oft null wäre.

Was macht jemand zum leiblichen Kind? Die Geburt, womöglich mit zwei bekannten biologischen Eltern und einem Datum.
Wie kommt das Kind in eine andere Familie? Durch eine Adoption, mit extra Datum und dem anderem Verwaltungskram.

Families ist schon eine 2er-Relation, ließe sich aber auch gut in Ereignisse umwandeln: Begin/Ende der Partnerschaft, Verlobung, Heirat/Trennung mit jeweils einem eigenem Datum.


Als Datensammlung/Archiv würde ich solche Ereignisse nützlicher finden als einen einfachen Baum. Wenn du diese ganzen Informationen erfassen kann, kannst du die dann natürlich nach Belieben zu einer traditionellen Baumansicht zusammenfassen.
BTW: Interessant wäre es auch, Ereignisse untereinander ordnen zu können ohne Zeitangaben zu kennen: z.B. A und B haben geheiratet vor C und D, B und D hatten ein Kind nach der der Heirat von E und F. Dazu passend wäre eine Unterstützung für Zeiträume: z.B. es ist bekannt das Herr A mit null/unbekannt zwischen 1960 und 1970 einen verschollenen Sohn hatten.

Geändert von BUG ( 7. Okt 2015 um 14:52 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      

 

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:23 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz