busyboy
10.03.2020, 17:37:33
Witam
Zamierzam zrobić drzewo genealogiczne. I w przypadku jakby to były zwykłe dane typ data urodzenia, miejsce, imię, nazwisko itp. Nie było by problemu. Problem pojawia się w momencie dodatkowych informacji typu matka, ojciec, współmałżonek oraz dzieci.
W takim przypadku każde wpisane dziecko może być rodzicem oraz posiadać współmałżonka, jak również każde wpisany współmałżonek może posiadać dzieci.
Nie mam pojęcia w jaki sposób to rozwiązać
czy da się zrobić na jednej tabeli ? czy użyć jednej tabeli głównej a dodatkowych tabel dla współmałżonka oraz dodatkowej tabeli dla dzieci. Tylko jak bym zastosował takie rozwiązanie jak powyżej to w przypadku np. dodania dziecka do tabeli dodatkowej to powinien również dodać wpis do tabeli głównej bo przecież dziecko może być również ojcem czy matką.
Przykład poniżej
Tabela główna
Id_główne – imię – nazwisko – data urodzenia – miejsce – współmałżonek itp.
Tabela dodatkowa (współmałżonek)
Id_współ – id_główne – imię – nazwisko - data urodzenia – miejsce itp.
Tabela dodatkowa (dziecko)
Id_dziecko – id_główne - imię – nazwisko - data urodzenia – miejsce itp.
Proszę o pomoc...
viking
10.03.2020, 18:06:15
Poczytaj na stronie depesz.com o drzewach. Tu się prosi o zwykłe drzewko id, parentid.
busyboy
10.03.2020, 18:44:06
Dziękuje za przykład, a jaka metoda drzewa w moim przypadku byłaby najlepsza ? bo na stronie jest kilka.
viking
10.03.2020, 19:32:22
A która ma id, parentid?
busyboy
11.03.2020, 20:03:39
Generalnie 3 metody mają parametr id i parent_id w przykładzie
metoda wielu tabel
metoda “śledzenie rodzica”
metoda pełnych ścieżek
Witam ponownie
Przeanalizowałem sugerowane rozwiązanie – id, parentid
I generalnie w drzewie genealogicznym nie można tego zastosować – już tłumacze dlaczego – proszę o sprostowanie jeżeli podszedłem do zagadnienia.
Jest Ojciec Marek
[id] [parenid] [nazwa]
1 0 Marek
I ma Córkę Zosię i syna Olka
[id] [parenid] [nazwa]
2 1 Zosia
3 1 Olek
A syn Olek na Córkę Marysie
[id] [parenid] [nazwa]
4 3 Marysia
I tak dalej – to oczywiście jest jasne i przejrzyste.
A co w przypadku gdy Ojciec Marek ma żonę Annę ? Przecież nie mogę nie mogę dodać wpisu w takiej formie
[id] [parenid] [nazwa]
5 0 Anna
Ponieważ Dziecko nie będzie powiązane z dwoma rodzicami a tylko z jednym.
Z powyższego przykładu wynika że drzewo należy wprowadzać od korzenia. A co w przypadku gdy okaże się że będę chciał wprowadzić Ojca i Matkę Marka, w powyższym przykładzie nie ma takiej możliwość.
viking
11.03.2020, 21:55:58
Jakoś tak, nie chce mi się już myśleć o tej porze
http://sqlfiddle.com/#!17/f6c3e/1
busyboy
11.03.2020, 22:00:36
Ok to jest dla mnie jasne, ale jak dodać wpis do bazy. Bo przecież np. Ojciec jest dodany, następnie dodajemy Dziecko do Ojca a co z Matką ? Soko już Dziecko jest dodane ? do Ojca ?
A co z wprowadzaniem danych ? w tym przypadku można tylko i wyłącznie wprowadzać dane od korzenia.
Pyton_000
11.03.2020, 22:16:55
Ja bym się chyba pokusił o Nested Set ale z założeniem że małżonek jest przyklejony przez np. partner_id. Cała reszta by była spoko. Zaczynasz od zerowego korzenia a potem dodajesz pierwszy wpis
busyboy
11.03.2020, 22:25:19
Pyton_000 ja rozumie jedną i drugą metodę (Nested Set z tego co doczytałem jest to metoda left - right) strukturę w bazię itp. A jak dodawać w tym przypadku rekordy. Skoro jak dodam Ojca a następnie jego dziecko to w jaki sposób mam dodać Matkę do dziecka skoro już zostało dodane do Ojca ?
Pyton_000
11.03.2020, 22:27:06
Nie dodajesz.
Jeśli dzieckiem rodzica jest Mężczyzna to żona jest przyklejona jako partner_id
Potem dziecko przyklejasz do ojca. Ojciec ma "w sobie" informację o matce.
busyboy
11.03.2020, 22:33:33
Nie rozumiem

Dodaje pierwszy wpis
[id] [parenid] [Nazwa]
1 0 Marek (Ojciec)
Dodaje drugi wpis
[id] [parenid] [Nazwa]
2 1 Kasia (Córka)
A Matka gdzie ? jak ją dodam skoro już jest jeden wpis z dzieckiem i nie może być dwóch ?
Pyton_000
11.03.2020, 22:37:56
ja mówię o nested set z partner_id
Coś takiego:
Kod
root (1,8)
|
/
Marek (ojciec) (2,7) partner_id = 1(Ola)
|
/ \
Ala(3,4) Tomek(5,6)
tabela partners
id, name
---------------
1, Ola
Czyli Ola (matka) jest przyklejona do Marka przez kolumnę partner_id (obok parametrów left i right)
busyboy
11.03.2020, 22:51:57
Czyli można również to zrobić w taki sposób (dodać)
[id_rodzic] [id_dziecko] [nazwa]
1 0 Marek (Ojciec)
2 1 Kasia (Córka)
3 1 Monika (Córka)
A następnie dodać e oddzielnej tabeli (partner)
[id] [id_partner][nazwa]
1 1 Marta (Żona Martka)
2 3 Tomek (Mąż Moniki)
Dobrze rozumiem ?
viking
12.03.2020, 04:35:11
Dałem ci pełen przykład z twoimi danymi a ty się upierasz na wciskanie imienia do drzewa. A jak będziesz chciał date urodzenia np dodać? Oczywiste że musisz zacząć od góry choćby ze względu na klucze obce których mi się nie chciało zakładać. Metoda z przypieciem matki też może być.
Tomplus
12.03.2020, 05:49:15
Rozdziel sobie tabele na 2 lub więcej
W jednej są tabele identyfikacyjne ludzi, imiona, nazwiska, daty
W drugiej powiązania.
W ogóle co z dziećmi, skąd wiadomo które jest czyje. Przecież są różne przypadki rodzicielstwa.
Więc powinna być kolejna tabela z gdzie:
id_child | id_men_parnter | id_women_partner | id_relationship
id_relationship - to typ relacji
np. 1 - dziecko rodzone
2 - adopcja
3 - etc.
busyboy
12.03.2020, 15:03:51
Czy tak może wyglądać tabela ? przykład poniżej
[id] [id_partner] [id_dziecko] [imie] [płec] [naziwsko] [data_urodzenia] [miejsce]
1 0 0 Marek M Nowak 10.08.1965 Warszawa Tata
2 1 0 Anna K Nowak 15.05.1969 Warszawa Mama
3 0 1 Zosia K Kowalska 20.03.1989 Toruń Córka (Taty i Mamy)
4 0 1 Tomek M Nowak 15.04.1990 Wrocław Syn (Taty i Mamy)
5 3 0 Wojtek M Kowlaski 13.02.2987 Toruń Mąż Zosi
6 3 0 Marek M Lisiecki 15.06.1985 Poznań 2 Mąż Zosi
7 0 6 Bosia K Lisiecka 10.02.2017 Poznań Córka (Zosi i 2 męża Marka)
Tomplus
12.03.2020, 23:12:41
Tak jak powiedział Viking, nie wrzucaj do drzewa danych osobowych. W drzewie zostaw podstawowe powiązania czyli same ID.
Dwa... [id_partner] [id_dziecko]
Po co to tutaj?
Co z przypadkami wielożeństwa, wielodzietnością? Z dziećmi z małżeństw mieszanych?
Nazewnictwo:
Tata, mama to tak się mówi w domu, powinieneś używać oficjalnego nazewnictwa powiązań:
Ojciec, matka, stryj, pasierb, wuj, ciotka, swat, teść, teściowa, świekr, świekra, szwagier, zięć, synowa, probant, kuzyn, brat/siostra cioteczny/wujeczny etc.
busyboy
12.03.2020, 23:31:43
Witam,
Nazewnictwo typu Mat,Tata podał tylko i wyłącznie do przykładu (oczywiście że te dane nie zostaną napisane)
Jeżeli chodzi o nazewnictwo (w tym przypadku nie jest mi coś takiego potrzebne - stryj,treść,wuj etc.) Chodzi mi tylko o podstawowe informacje imię,nazwisko,data urodzenia,miejsce plus ewentualnie inne dane które można dodać (podstawowe)
Wielożeństwo jest brane pod uwagę, wielodzietność też a jeżeli chodzi o małżeństwa mieszane hmm nie idźmy aż w takie strajności to ma być proste drzewo genealogiczne przedstawiające rodziców oraz ich dzieci nic więcej.
Dlaczego nie mogę do tabeli wrzucać dodatkowych danych tylko powiązania ? W takim przypadku (tak mi się wydaje) jestem w stanie zrobić to w jednej tabeli...
W przykładzie powyżej (tabeli) pokazałem moje rozwiązanie (mam dzieje poprawne) i prosiłem Was o weryfikację. Jest tam uwzględniona wielodzietność oraz przypadek wielożeństwa
[id] [id_partner] [id_dziecko] [imie] [płec] [naziwsko] [data_urodzenia] [miejsce]
3 0 1 Zosia K Kowalska 20.03.1989 Toruń Córka (Taty i Mamy)
4 0 1 Tomek M Nowak 15.04.1990 Wrocław Syn (Taty i Mamy)
[id] [id_partner] [id_dziecko] [imie] [płec] [naziwsko] [data_urodzenia] [miejsce]
3 0 1 Zosia K Kowalska 20.03.1989 Toruń Córka (Taty i Mamy)
5 3 0 Wojtek M Kowlaski 13.02.2987 Toruń Mąż Zosi
6 3 0 Marek M Lisiecki 15.06.1985 Poznań 2 Mąż Zosi
viking
13.03.2020, 05:37:33
Zrób jak uważasz. Najwyżej przepiszesz.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę
kliknij tutaj.