Как стать автором
Обновить

Комментарии 7

Вставлю свои "5 копеек". Состояния "женился", "развелся", "родился", "умер" - привязаны ко времени.
И если два человека женились / развелись / снова женились, то имеет смысл показывать текущее состояние на какую-то дату, например на сегодняшнюю.

Это, кстати, даёт возможность видеть изменение состояний в динамике. Визуально - в виде, например, анимированного GIF-а.

Эта мысль (просмотр генеалогического дерева в динамике) у меня давно сидит в голове, но я ни в одной из программ не видел реализации.

По сути всё привязано ко времени. Т.е. все связи между людьми, все атрибуты людей. Т.е. сегодня вы холостой, а завтра уже муж.
Как вариант, тут нужно делать ползунок с датой и чтобы отображалось состояние на указанную дату. И вот тут возникает вопрос, как показывать состояние объекта из будущего.
К примеру мы смотрим состояние на дату 1 мая, а свадьба 15 мая этого же года. Тогда отношение "брачная связь" будет находится в состоянии "неопределено" потому что она ещё даже не случилась. И тут я вижу два варианта:
1. Вообще не показывать
2. Добавить к состоянию активно/неактивно ещё состояние неопределено
Вариант 1 проще, но менее информативен.
Вариант 2 более информативен, но нужно придумать как лучше всего его отображать чтобы с одной стороны было видно что произойдет, а с другой что этого ещё не произошло.

Кровное родство

Усыновление/удочерение

А вариант: нагуляла, папа отрёкся, а настоящий отец не известен?

Женщины также имеют возможность отречься от своего ребёнка, в отличии о мужчин, не знаю, может ли при этом остаться только папа у ребёнка. В общем, я к тому, что фамильная связь и генетическая, это два разных дерева. И всяких нюансов может быть масса: хоть партогенез и не находит подтверждения у человека, зато химеризм и инцест - да.

нагуляла, папа отрёкся, а настоящий отец не известен

Это всё будет выглядеть одинаково на схеме.

нагуляла, папа отрёкся, а настоящий отец не известен?
нагуляла, папа отрёкся, а настоящий отец не известен?

Не стоит задачи показывать полную историю кто кого бросил, кто кого нагулял и т.д. и т.п., тут стоит задача сохранить генеалогическое и фамильное дерево чтобы посмотреть своих родственников. При необходимости можно создать вершину "неизвестный человек" и указать его как отца.

Женщины также имеют возможность отречься от ребёнка

Я брал распространенные примеры, но мать тоже по тому же принципу указывается. Её, к примеру, могли лишить родительских прав, а ребенка усыновили в детдоме (рис.1) или ребенок остался с отцом после развода, отец заново женился и дочку удочерила новая жена (рис.2).

Ну и помимо "донора спермы" есть ещё , например, "суррогатное материнство". Там вообще не особо понятно. Вроде даже может и не быть генетического родства с матерью которая вынашивала ребенка. При этом схема всё равно применима. Если генетическое родство есть, то суррогатную мать указываем, если нет - можно её и вообще не указывать, потому что она ребенку никто.

Главное что схема всё-равно применима, даже к таким заковыристым случаям.

На самом деле, фамильные деревья создаются не потому что хочется что-то узнать, а по той же причине, по какой разрешено иметь одну жену или мужа: наследование и переход имущества и прав. То есть это финасово-политический roadmap, при этом генетическое родство, по сути не имеет никакого значения, если доказано право. Наоборот, генетическое дерево, это попытка хакнуть эту систему, типа "незаконно рождённый сын из рода, происходящего от самого бога и людские законы ему - не указ". Вы же, делая дерево "родства" никак не поможете определить кто на что может претендовать.

Тогда и все существующие системы фамильных деревьев "пролетают мимо". Ни на одном из них нет отметок о праве собственности.

Вообще тут идеальный кейс для event sourcing вырисовывается, т.к. первичны события, а граф - это уже производное представление данных, полученное путём обработки последовательной цепочки событий на определённую дату.

Тогда не надо будет и костылей "все атрибуты привязаны ко времени, кроме вот этих, которые сами время", и упомянутая выше идея с "ползунком с датой" реализуется самоочевидно, и расширяемость на новые типы событий/атрибутов облегчается.

Единственное, надо подумать, как в такую модель данных уложить события с неизвестной датой, каковых в случае составления родословной будет немало ("точно знаем, что прапрадедушка умер, но не знаем, когда" и т.п.)

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории