Как объединить два Древа в одно?

Перед тем, как задать вопрос, ознакомьтесь с ответами на часто задаваемые вопросы и со Справкой. Пожелания пишем на reformal.ru

Модераторы: Genery, Elena Polyanskikh

Ответить
Сообщение
Автор
PeterMinin
Сообщения: 15
Зарегистрирован: 17 янв 2014 01:22

Re: Как объединить два Древа в одно?

#46 Сообщение PeterMinin » 16 май 2014 16:12

o22 писал(а):Ну, мне показалось, что в этой вашей фразе, а особенно слове "перегнать" не подразумевался "полуавтомат" :)
И поначалу вас даже удивляло, что opalex говорит о какой-то ручной работе в таком деликатном деле, как объединение баз.
Без обид :)
Просто для меня ручное разрешение конфликтов и неоднозначностей само собой разумеется, а под ручной работой я подразумевал все лишние клики, которые человек вынужден делать как машина.
В общем, недопонимание наконец устранили :) И если в этом свете посмотреть на то, что я расписывал, насколько этот концепт, по-вашему, может приблизиться к "идеальному инструменту"?

Аватара пользователя
o22
Сообщения: 662
Зарегистрирован: 12 дек 2010 00:13
Контактная информация:

Re: Как объединить два Древа в одно?

#47 Сообщение o22 » 17 май 2014 01:51

Это не тянет даже на концепт. Просто набор пожеланий без попытки заглянуть вовнутрь проблемы.
Полезной была картинка из какой-то программы (там где 2 события с одной стороны и 3 с другой).
Такое можно сделать, но чтобы не потерялись, например, участники события "выход на пенсию" любимой бабушки, а также у дедушки не появилось 2 события "обрезание", например, нужно это делать достаточно навороченно. При этом все-равно останется куча ручной работы. Ведь абсолютно все решения , какое событие оставить слева иди справа, человек должен принять сам. Никакого автомата, любое неверное предположение сделанное программно, рано или поздно приведет к потере данных.
Также сомнительным выглядит предложение объединение 2-х событий у разных персон в одно. Я даже не представляю, как это визуально может выглядеть, учитывая кучу разнообразных полей, которые могут присутствовать в событии. Также не считаю, что можно (и нужно) делать полноценное редактирование событий в ходе изменений.
И еще изрядное количество более мелких gap-ов
:)
Сайт программ GedcomReport, DrevoReport http://go.inf.ua
Исследования: Васильковський, Киевский, Звенигородский уезды Киевской губернии
Нежинский уезд Черниговской губернии

PeterMinin
Сообщения: 15
Зарегистрирован: 17 янв 2014 01:22

Re: Как объединить два Древа в одно?

#48 Сообщение PeterMinin » 17 май 2014 02:32

Кажется, про алгоритм сопоставления деревьев я написал невидимым шрифтом. Или нужно всю логику представить графически, но это уже как-то слишком затратно для досужего обсуждения, там уже, может, быстрее будет написать реализацию. Ладно, не получилось обсудить, ну бывает.

Аватара пользователя
o22
Сообщения: 662
Зарегистрирован: 12 дек 2010 00:13
Контактная информация:

Re: Как объединить два Древа в одно?

#49 Сообщение o22 » 19 май 2014 00:15

Сопоставление (сравнение баз на выявление двойников) и их объединение это совсем 2 разные задачи. Не стоит мешать все в кучу. Для решения сложных задач требуется их "разложить на слагаемые".
там уже, может, быстрее будет написать реализацию.
Это лучший способ понять те нюансы, которые придется решать тому, кто возьмется за реализацию.
Сайт программ GedcomReport, DrevoReport http://go.inf.ua
Исследования: Васильковський, Киевский, Звенигородский уезды Киевской губернии
Нежинский уезд Черниговской губернии

Аватара пользователя
o22
Сообщения: 662
Зарегистрирован: 12 дек 2010 00:13
Контактная информация:

Re: Как объединить два Древа в одно?

#50 Сообщение o22 » 19 май 2014 00:24

hippocamus писал(а):Но объединение 2 редакций одной базы, или двух кусков одной базы - можно, мне кажется сделать. Сейчас изменённые записи из 2-й базы просто отсекаются, как и дубликаты. А хотелось бы, чтобы при слиянии, для изменённых записей с одним и тем же id предлагалось выбрать.
Объяснение тут простое... Хотя... Лучше сделаю одно предложение.
Удалите перед слиянием баз из 1-й базы персону, которую нужно подменить из 2-й базы (имеющую тот-же id). Тогда в 1-й базе у вас будет именно та персона, которую Вы желаете. ;)
Сайт программ GedcomReport, DrevoReport http://go.inf.ua
Исследования: Васильковський, Киевский, Звенигородский уезды Киевской губернии
Нежинский уезд Черниговской губернии

Аватара пользователя
Руслан Грибков
Сообщения: 327
Зарегистрирован: 01 май 2005 23:28
Откуда: Нижегородская обл. Городец

Re: Как объединить два Древа в одно?

#51 Сообщение Руслан Грибков » 19 май 2014 11:31

o22 писал(а):Тогда в 1-й базе у вас будет именно та персона, которую Вы желаете
действительно будет, только с информацией из базы 2, а всё что было накоплено в базе 1 потеряно.
Ищу: по Нижегородской обл. - Грибковых, . По г. Козьмодемьянску - Грибковых, Соколовых, Никоновых.
по Украине - Янчишены, Сумашевские, Заблоцкие, Чегурко, Петруша.
по Хабаровску - Клюевых, по Москве - Бажковых, Владимирская обл. - Гоцуц.

Аватара пользователя
o22
Сообщения: 662
Зарегистрирован: 12 дек 2010 00:13
Контактная информация:

Re: Как объединить два Древа в одно?

#52 Сообщение o22 » 19 май 2014 13:28

Вот именно! Это как раз то, что я и хотел объяснить, но решил, чтобы вы сами к этому пришли.
Когда Дмитрий делал слияние баз, он поступил очень просто и очень мудро, когда не стал трогать персону в базе 1, имеющую своего близнеца в базе 2.
Этим самым он избежал необходимости объединения персон и, как следствие, всех проблем, с этим связанных
Сайт программ GedcomReport, DrevoReport http://go.inf.ua
Исследования: Васильковський, Киевский, Звенигородский уезды Киевской губернии
Нежинский уезд Черниговской губернии

Алла
Сообщения: 2
Зарегистрирован: 10 апр 2014 11:43

Re: Как объединить два Древа в одно?

#53 Сообщение Алла » 20 май 2014 16:09

Похоже, что Вы строите дерево от персоны, которая никак не связана с добавленными персонами.
Свяжите одну из персон из числа тех, что у вас в дереве с любой из персон, которые импортировались, и тогда в дереве будут присутствовать все[/quote]


o22 Добрый день. Два дерева построены от одной и той же персоны. При соединении двух деревьев персоны переносятся только в вкладку Персоны. В дереве никак не отображаются.

Аватара пользователя
hippocamus
Сообщения: 923
Зарегистрирован: 09 дек 2009 16:28
Откуда: Рыбинск, Ярославская обл.
Контактная информация:

Re: Как объединить два Древа в одно?

#54 Сообщение hippocamus » 20 май 2014 20:37

o22 писал(а):Вот именно! Это как раз то, что я и хотел объяснить, но решил, чтобы вы сами к этому пришли.
Когда Дмитрий делал слияние баз, он поступил очень просто и очень мудро, когда не стал трогать персону в базе 1, имеющую своего близнеца в базе 2.
Этим самым он избежал необходимости объединения персон и, как следствие, всех проблем, с этим связанных
Да ладно! Пусть уж будут потеряны!
Но с другой стороны можно ведь и события по id сравнивать. Маловероятно, что мы добавили независимо друг от друга 2 одинаковых события с разными id, например, смерть. Но если и так - создать 2 таких события, пусть пользователь сам разбирается. Программа же берёт для отображения то, что старше по дате.
Скачать Информер (для Древа Жизни 4.х). Установить.
Заменить экзешник на вот этот: https://yadi.sk/d/v49r7N46tdixe
Запустить от администратора. Указать путь к базе. Отключить автообновление.
Будет последняя версия 2.43. Рабочая )

Аватара пользователя
o22
Сообщения: 662
Зарегистрирован: 12 дек 2010 00:13
Контактная информация:

Re: Как объединить два Древа в одно?

#55 Сообщение o22 » 20 май 2014 22:29

Алла писал(а):
Похоже, что Вы строите дерево от персоны, которая никак не связана с добавленными персонами.
Свяжите одну из персон из числа тех, что у вас в дереве с любой из персон, которые импортировались, и тогда в дереве будут присутствовать все
o22 Добрый день. Два дерева построены от одной и той же персоны. При соединении двух деревьев персоны переносятся только в вкладку Персоны. В дереве никак не отображаются.
Вы связали персону, как я Вам предлагал?
Сайт программ GedcomReport, DrevoReport http://go.inf.ua
Исследования: Васильковський, Киевский, Звенигородский уезды Киевской губернии
Нежинский уезд Черниговской губернии

Аватара пользователя
o22
Сообщения: 662
Зарегистрирован: 12 дек 2010 00:13
Контактная информация:

Re: Как объединить два Древа в одно?

#56 Сообщение o22 » 20 май 2014 22:50

hippocamus писал(а):Да ладно! Пусть уж будут потеряны!
Ну тогда удаляй персону из 1-й базы перед слиянием. В чем проблема?
hippocamus писал(а):Но с другой стороны можно ведь и события по id сравнивать. Маловероятно, что мы добавили независимо друг от друга 2 одинаковых события с разными id, например, смерть. Но если и так - создать 2 таких события, пусть пользователь сам разбирается. Программа же берёт для отображения то, что старше по дате.
А вот здесь появляются риски, которые Дмитрий вполне оправданно не захотел на себя брать. И я-бы не брал, если-бы делал что-то подобное.

1 случай - ID у событий одинаковый.
Удаляя событие из 1-й базы мы его теряем окончательно - его не будет ни в 1-й ни во 2-й базе (в отличие от существующего варианта, когда все остаются "при своих").
Вместе с событием канут в лету вся информация с ним связанная - даты, места, комментарии, связи с другими персонами - участниками событий, документы, привязанные к событию и т.д.

2-й случай - ID разные.
Мы гарантированно получаем дубликаты событий Рождение, смерть (если человек умер), т.е. то, что случается с человеком 1 раз. Так как на персоне может быть прописано только одно такое событие (посмотри структуру таблицы Persons), то одно из этих событий однозначно повиснет в воздухе. Если в одной из баз человек умер, а в другой живой, то возникает коллизия (вспомни твое "любимое" поле Live, которое ты когда-то назвал невнятным :)).
Если у персоны есть дети, то получаем "левых" детей-дубликатов в случае разных ID у их событий, и аналогичную дилемму с событиями, если ID у них совпадают.
При наличии браков возникает многоженство (причем с одной и той-же женой, а может быть и "разными", если ID у жены в разных базах отличаются), но это уже цветочки.
Я могу продолжать, но, по-моему, уже этого достаточно :)
Сайт программ GedcomReport, DrevoReport http://go.inf.ua
Исследования: Васильковський, Киевский, Звенигородский уезды Киевской губернии
Нежинский уезд Черниговской губернии

Аватара пользователя
hippocamus
Сообщения: 923
Зарегистрирован: 09 дек 2009 16:28
Откуда: Рыбинск, Ярославская обл.
Контактная информация:

Re: Как объединить два Древа в одно?

#57 Сообщение hippocamus » 20 май 2014 22:55

Но ведь в данной ситуации информация тоже теряется! Теряется тихо, безо всяких оповещений.
Ну и что, что мой друг уточнил событие рождения моей троюродной бабушки? Указал ей место рождения и комментарии! Я об этом даже не узнаю: она у меня в базе есть, так, значит, и останется! Хоть бы оповещение об этом какое было! Что при слиянии во 2-й базе были обнаружены следующие различия...
Скачать Информер (для Древа Жизни 4.х). Установить.
Заменить экзешник на вот этот: https://yadi.sk/d/v49r7N46tdixe
Запустить от администратора. Указать путь к базе. Отключить автообновление.
Будет последняя версия 2.43. Рабочая )

Аватара пользователя
o22
Сообщения: 662
Зарегистрирован: 12 дек 2010 00:13
Контактная информация:

Re: Как объединить два Древа в одно?

#58 Сообщение o22 » 20 май 2014 23:07

hippocamus писал(а):Но ведь в данной ситуации информация тоже теряется! Теряется тихо, безо всяких оповещений.
Ну и что, что мой друг уточнил событие рождения моей троюродной бабушки? Указал ей место рождения и комментарии! Я об этом даже не узнаю: она у меня в базе есть, так, значит, и останется! Хоть бы оповещение об этом какое было! Что при слиянии во 2-й базе были обнаружены следующие различия...
Она не теряется, она остается во 2-й базе "девственно чистой". Ты рассматриваешь частный случай (уточнили в той базе, которую ты подливаешь) и здесь вроде ты как и прав. Но программа-то этого не знает. А если-бы ты в своей 1-й базе уточнил все то же самое? То твоя информация накрылась-бы медным тазом.
Что касается оповещения, то согласен, его можно было-бы сделать. Но даже для этого нужно "перешерстить" всех персон, у которых совпали ID (и все значение полей, связанных с персоной), а также все их события (и все значения полей, связанных с событием) на нахождение различий.
А это само по себе не такая уж тривиальная задачка. Но попроще, чем объединение и безусловно безопаснее для данных.
Сайт программ GedcomReport, DrevoReport http://go.inf.ua
Исследования: Васильковський, Киевский, Звенигородский уезды Киевской губернии
Нежинский уезд Черниговской губернии

Аватара пользователя
hippocamus
Сообщения: 923
Зарегистрирован: 09 дек 2009 16:28
Откуда: Рыбинск, Ярославская обл.
Контактная информация:

Re: Как объединить два Древа в одно?

#59 Сообщение hippocamus » 20 май 2014 23:15

Но я хочу перенести изменения из 2-й базы в первую, мою и основную! А я даже немогу узнать, что же во второй базе поменялось? (без поперсонного просматривания и выписывания на листочек, или удаления персон подвергшихся изменению из моей базы). Согласись, что это - не айс! :!:
Скачать Информер (для Древа Жизни 4.х). Установить.
Заменить экзешник на вот этот: https://yadi.sk/d/v49r7N46tdixe
Запустить от администратора. Указать путь к базе. Отключить автообновление.
Будет последняя версия 2.43. Рабочая )

Аватара пользователя
o22
Сообщения: 662
Зарегистрирован: 12 дек 2010 00:13
Контактная информация:

Re: Как объединить два Древа в одно?

#60 Сообщение o22 » 20 май 2014 23:29

Соглашусь, но что это меняет?
Можно было-бы зацепиться за журнал изменений, который в Древе есть, хоть и в зачаточном состоянии. Из этого журнала в интерфейс программы попадает только дата создания и последнего изменения (как персоны, так и события).
Если-бы такая задача стояла передо мной при текущем состоянии дел, то я бы выгрузил с помощью своего DrevoReport-а данные по персонам в CSV из двух баз (с датами изменений) и кинул-бы на сравнение 2 файла.
Так можно определить хотя-бы что менялось в базах, начиная с конкретной даты
Сайт программ GedcomReport, DrevoReport http://go.inf.ua
Исследования: Васильковський, Киевский, Звенигородский уезды Киевской губернии
Нежинский уезд Черниговской губернии

Ответить

Кто сейчас на конференции

Сейчас этот форум просматривают: Google [Bot] и 20 гостей