@0ldn0mad

Как правильно построить таблицу для построения БД родственников?

Добрый день, Гуру!
Доскажите, пожалуйста, как правильно построить таблицу (может и не одну) и идентифицировать строки таблицы так, чтобы можно было строить простые запросы.
Ну, допустим, есть пользователь: Иванов Иван Анатольевич, он может быть сыном и отцом одновременно! Значит у него отец - Иванов Анатолий Максимович и есть сын - Иванов Матвей Иванович. Соответственно, у пользователя Иванова Анатолия Максимовича есть сын - Иванов Иван Анатольевич и внук - Иванов Матвей Иванович. Правило железобетонное одно - у отца всегда один сын.
Вот у меня и дилемма - как построить таблицу и как упорядочить индексы обозначающие отцов, дедов и внуков одной родственной линии, чтобы потом просто и быстро строить запросы такого рода: Вывести всех внуков основных пользователей или вывести всех тех, кто является текущим отцом? Или вывести прадедушек текущих пользователей?
  • Вопрос задан
  • 52 просмотра
Пригласить эксперта
Ответы на вопрос 2
@vdem
Правило железобетонное одно - у отца всегда один сын.

Эээ... нипонял. Сын может быть только один? Или имеется в виду, что сущность "отец" подразумевает существование сущности "сын", относящейся к этому "отцу"? Но как насчет "дочерей", ведь по Вашему определению "отец" не будет "отцом", если у него только "дочь/дочери" и нет "сыновей". Ну и само собой, по Вашему же определению, если у "отца" больше одного сына, он уже не является "отцом".
Ответ написан
sim3x
@sim3x
Влоб решение
Human:
  ancestor_female = ForeignKey(Human)
  ancestor_male = ForeignKey(Human)


Решения, оптимальные для разных случаев
https://en.wikipedia.org/wiki/Tree_traversal

Выборки делаются в процедурах или серией запросов

Единственное железобетонное правило
если всех устраивают их родственники, то лучше не проводить ДНК-исследование для проверки родственности
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы