Генеалогическое древо — это не просто красивая схема для настенного плаката. С точки зрения информатики и математики, оно представляет собой направленный ациклический граф (DAG), в котором вершины — это люди, а рёбра — родственные связи. В отличие от классического дерева в теории графов, здесь допускаются множественные родительские связи (двух родителей у ребёнка), что делает модель более сложной и реалистичной.
Понимание того, какой модели соответствует ваше родословное древо, критически важно для выбора ПО, проектирования базы данных и корректного визуализирования связей. Неправильный выбор модели приведёт к потере данных о усыновлении, сводных братьях или полутёзках.
Математическая природа: граф, а не дерево
В строгом смысле термин «древо» вводит в заблуждение. Классическое дерево в теории графов требует, чтобы у каждой вершины был ровно один родитель (кроме корня). В генеалогии у каждого человека два биологических родителя, а при учёте усыновления — и больше. Поэтому родословная структура — это направленный ациклический граф (Directed Acyclic Graph, DAG).
Ацикличность здесь означает отсутствие циклов: никто не может быть своим же предком. Направленность рёбер идёт от родителей к детям (или наоборот, в зависимости от соглашения). Это фундаментальное отличие от сетевых моделей с циклами.
⚠️ Внимание: многие популярные программы для генеалогии внутренне хранят данные именно как DAG, но экспортируют в формат GEDCOM, который имеет ограничения при представлении сложных связей (например, полутёзок без общих родителей). Проверяйте экспорт перед миграцией.
Основные модели представления родословных данных
Существует несколько подходов к моделированию семейных связей. Каждый решает свои задачи и имеет компромиссы.
- 🌳 Иерархическая модель — классическое «дерево» с одним корнем (прототипом) и ветвлением вниз. Удобна для агнатной линии (по мужской линии), но ломается при попытке показать полные связи.
- 🕸 Графовая модель (DAG) — наиболее точная математически. Вершины = личности, рёбра = отношения «родитель-потомок», «супруг», «усыновитель-усыновлённый». Поддерживает любые конфигурации семьи.
- 🗃 Реляционная модель — таблицы:
Individuals,Families,Events,Sources. Стандарт де-факто в ПО (GEDCOM, SQLite-базы Gramps, Family Tree Maker). - 📄 Документная модель (NoSQL) — один JSON-документ на человека со вложенными связями. Гибка для неструктурированных данных (фото, письма, ДНК), но сложна для выборок «все потомки X».
Выбор модели определяет, какие запросы будут быстрыми, а какие — мучительными. Графовые БД (Neo4j, JanusGraph) выдают «все предки за 5 поколений» за миллисекунды. Реляционные требуют рекурсивных CTE-запросов. Документные — полного сканирования.
Сравнительная таблица моделей
| Модель | Сложность связей | Скорость обхода предков | Поддержка нестандартных связей | Инструменты |
|---|---|---|---|---|
| Иерархическая | Низкая (только прямая линия) | O(n) — мгновенно | Плохая (усыновление, полутёзки ломают структуру) | Excel, MindMap, бумага |
| Графовая (DAG) | Максимальная (любые связи) | O(k) — очень быстро на графовых БД | Отличная (любые типы отношений) | Neo4j, JanusGraph, GraphDB |
| Реляционная (SQL) | Высокая (через таблицу связей) | O(log n) с рекурсивными CTE | Хорошая (стандарт GEDCOM 5.5.1/7.0) | Gramps, RootsMagic, Family Tree Maker, MySQL/PostgreSQL |
| Документная (NoSQL) | Средняя (вложенность или ссылки) | O(n) — требует сканирования или индексов | Гибкая (любые поля в документе) | MongoDB, CouchDB, Notion, Obsidian (Dataview) |
Практический выбор: от задачи к модели
Если вы только начинаете собирать родовую — начните с реляционной модели в формате GEDCOM. Это стандарт обмена: любой софт его поймёт. Создайте файл family.ged и ведите его в бесплатном Gramps или FamilySearch (онлайн). Не изобретайте велосипед с JSON в Notion — при переносе в серьезную программу потеряете метаданные источников.
Для глубокого анализа (генетческие заболевания, наследование имущества, демографические исследования) — разверните графовую БД. Импортируйте GEDCOM в Neo4j через плагин gedcom-to-neo4j. Тогда запросы вроде «все носители гемофилии в ветке Романовых» выполняются одной строчкой Cypher.
☑️ Чек-лист выбора модели для вашего проекта
Частые ошибки моделирования
Самая распространённая ошибка — попытка запихнуть сложную реальность в строгое дерево. Пример: у человека два отца (биологический и приёмный). В иерархической модели приходится дублировать вершину ребёнка или терять одного отца. В DAG — просто добавляете второе ребро типа «усыновитель».
Вторая ошибка — игнорирование событий как сущностей первого класса. Рождение, брак, смерть, переезд — это не атрибуты человека, а отдельные узлы графа с датами, местами, источниками и участниками. Только так можно корректно моделировать: «Иван и Мария поженились 12.05.1890 в церкви Николо-Угрешского монастыря, свидетели — Петр и Анна».
⚠️ Внимание: стандарт GEDCOM 7.0 добавил поддержку жесточайших связей (LGBTQ+, половые партнёры без брака, суррогатное материнство) через тегиSEX,FAMCс подтегамиPEDI(adopted, birth, foster, sealing). Старые программы их не понимают — данные теряются при импорте.
Визуализация: модель ≠ представление
Не путайте модель хранения и модель отображения. Одну и ту же графовую базу можно рисовать:
- 🌲 Классическое «древо» сверху вниз (предки → потомки)
- 🌲 «Обратное древо» снизу вверх (потомок → предки)
- ⏳ Хронологическая лента жизни (Timeline)
- 🗺 Карта миграций (география событий)
- 🕸 Сетевой граф (force-directed) — все связи сразу
- 📊 Круговая диаграмма ДНК-наследия (по гаплогруппам)
Современные инструменты (Gramps Web, RootsMagic, FamilyTreeJS, Ancestris) позволяют переключать представления не меняя базу. Это ключевой принцип: данные — единые, виды — множественные.
Пример Cypher-запроса для Neo4j (все предки до 7-го колена)
MATCH (me:Person {id: 'I1'})-[:CHILD_OF*1..7]->(ancestor:Person) RETURN DISTINCT ancestor ORDER BY ancestor.birth_date LIMIT 1000
Перспективы: семантические графы и ДНК
Современный тренд — семантические графы знаний (Knowledge Graphs) на базе RDF/OWL. Каждая сущность получает URI, связи — типы из онтологий (FOAF, BIO, GENO). Это позволяет объединять родословные с викиданными, архивами, генетическими базами. Пример: запрос «все потомки Рюриковичей, у кого гаплогруппа N1a1» выполняется через SPARQL над федерированными эндпоинтами.
Интеграция с ДНК-генеалогией добавляет вероятностные рёбра: «Иван и Петр — 3-е кузины с вероятностью 98% по автосомной ДНК». Такие рёбра имеют вес (confidence) и тип DNA_MATCH. Классический GEDCOM это не поддерживает — нужны расширения или графовая БД.
Храните исходные файлы GEDCOM в Git-репозитории. Каждое изменение — коммит с сообщением «Добавлен дядя Василий по метрике 1912 г.». Это даёт полную историю изменений, откат ошибок и командную работу без конфликтов.
Резюме: какая модель вам нужна
Для 95% любительских задач — реляционная модель в GEDCOM 7.0 внутри Gramps или Family Tree Maker. Это стандарт, переносимость, поддержка источников, медиа, приватности. Для научных проектов, больших родов (10 000+ персон), ДНК-анализа — графовая БД (Neo4j) с онтологией. Для веб-публикации — экспорт в Gramps Web или генерация статического сайта через gedcom-to-html.
Не начинайте с выбора технологии. Начинайте с сбора первичных источников (метрические книги, переписи, устные истории). Модель данных — это контейнер. Пустой контейнер бесполезен, какой бы элегантный он ни был.
Главное правило: модель выбирается под задачи анализа, а не под привычный вид рисунка. DAG — единственная математически корректная модель полных родственных связей.
FAQ: частые вопросы о моделях родословных
Можно ли хранить родословную в Excel?
Можно, но только для малых деревьев (до 200 человек) и простых линий. Excel не поддерживает ссылочную целостность, версионирование, медиа-файлы, сложные запросы. При росте данных получите неразбериху с дубликатами и ошибками. Лучше сразу Gramps — он бесплатен и экспортирует в GEDCOM.
Что такое GEDCOM и зачем он нужен?
GEDCOM (GEnealogical Data COMmunication) — открытый стандарт обмена генеалогическими данными. Версия 7.0 (2021) поддерживает UTF-8, JSON-LD, медиа, ДНК, сложные связи. Любая серьезная программа импортирует/экспортирует GEDCOM. Это ваша страховка от vendor lock-in.
Как моделировать однополые пары и суррогатное материнство?
В GEDCOM 7.0: тег FAM с типом FAM.COUP (couple) для партнёров любого пола. Суррогатное материнство — через FAMC с PEDI FOSTER или PEDI OTHER + заметка. В графе — отдельные рёбра GESTATIONAL_MOTHER, GENETIC_MOTHER, SOCIAL_FATHER.
Нужна ли мне графовая БД, если у меня 5000 человек?
Для 5000 человек SQLite (внутри Gramps) работает отлично. Графовая БД оправдана от 20–50 тысяч узлов или при сложных аналитических запросах (пути между людьми, кластеры ДНК, демография). До этого — оверхед на настройку и обучение Cypher/SPARQL.
Как объединить бумажные записи, фото и ДНК в одной модели?
Используйте модель «событие-центрическая»: каждое событие (рождение, тест ДНК, фото) — узел с датой, местом, источником, участниками. Люди связаны с событиями рёбрами ролей. Это позволяет запросить «все фото Ивана 1900–1910 гг.» или «все ДНК-матчи для потомков Анны». Gramps частично поддерживает это через цитации и медиа-объекты.