Предлагаю подробнее описать конечную цель всего этого. А то выглядит как «мне в багажник Запорожца надо положить два кубометра дров и еще самосвал картошки. И уехать со всем этим»
Впрочем, можно оставить и так, но тогда высокий шанс, что модераторы удалят вопрос по причине «вопрос необходимо конкретизировать».
Мне кажется, вы пытаетесь скрестить несколько нескрестимых сущностей.
В любой момент времени мы должны рассматривать конкретного человека.
И в этот момент он - центр и опора, а остальное должно к нему подтягиваться - предки, потомки, супруги, сиблинги - всё это вокруг него, главного в данный момент.
Тогда у вас в любой момент есть два прямых предка, несколько сиблингов (братьев/сестер), несколько супругов и несколько детей. Это всё, что должно быть у любого отдельного человека.
Имея это у каждого, в любой момент вы можете выстроить дерево как в прошлое, так и в будущее. Но корнем всегда должен быть конкретный человек.
Не должно быть узла «брак». Это не сущность. Соответственно, не может быть такого узла. Узлы - это люди.
Поскольку в этой структуре есть поколения, то все супруги - это одно поколение. У основного человека две связи наверх - родители; какое-то количество связей вбок - супруги и сиблинги; какое-то вниз - потомки.
Заметьте, для основного человека нет никакой разницы, от какого супруга или постороннего человека у него потомки. Это не его атрибут, это атрибут потомка. Если надо, его можно получить оттуда.
Egor2119, чтобы не изобретать велосипед, сделайте БД SQLite in-memory, зато всё будет стандартно и любому понятно.
Кажущаяся сложность на начальном этапе в дальнейшем может оказаться облегчением, т.к. у БД стандартный интерфейс и всегда можно её заменить на более взрослую.
Впрочем, и обычный словарь для начала вполне пойдёт.
alekseiami, Конечно, будет сложно поддерживать консистентность базы, будут проблемы со сквозным индексом и т.п., но раз уж условие стоять на одной ноге, а второй чесать за ухом, то уж чего теперь…
alekseiami, может, побить базу на куски? В SQLite нет партишинга, но можно же извратиться и насоздавать баз под каждый чих и базу, в которой ссылаться на нужную базу…
nihi1ist, ну и, кстати, вы молодец, что самостоятельно решили свою проблему. Только это и двигает нас вперед. Приносите сложные, интересные и главное - конкретные вопросы.
nihi1ist, во-первых, это уже другой вопрос. Тут правило «в одни вопросе - один вопрос», см.п.3.7 Регламента.
Во вторых, на вопрос «как сделать» отвечает документация и поиск в интернет.
Тут отвечают на вопросы «почему я сделал, как в документации, а оно не работает. Поискал в интернет, вот запросы, в ответах не нашел. Что я делаю не так?»
Покажите, как вы пробовали решить проблему, приведите код попытки (пусть неудачной), опишите, как запускали, что ожидали и что получилось.
За готовыми решениями - на фриланс. В текущем виде это не вопрос, а задание. Нарушен п.5.12 Регламента.