Встречается на собеседованиях • сегодня

Как передать генеалогическое древо в реляционную базу данных

Для хранения генеалогического древа в реляционной БД можно использовать несколько подходов:

  1. Adjacency List (список смежности) - простейший способ, где каждый узел хранит ссылку на родителя:
sql
CREATE TABLE person (
    id INT PRIMARY KEY,
    name VARCHAR(100),
    parent_id INT REFERENCES person(id)
);

Недостаток - сложные запросы для поиска предков/потомков.

  1. Path Enumeration - хранение полного пути к узлу (например, "1/4/7"):
sql
CREATE TABLE person (
    id INT PRIMARY KEY,
    name VARCHAR(100),
    path VARCHAR(255)
);

Упрощает поиск предков, но сложно поддерживать при изменениях.

  1. Closure Table - отдельная таблица связей:
sql
CREATE TABLE person (
    id INT PRIMARY KEY,
    name VARCHAR(100)
);

CREATE TABLE tree_path (
    ancestor INT REFERENCES person(id),
    descendant INT REFERENCES person(id),
    depth INT,
    PRIMARY KEY (ancestor, descendant)
);

Наиболее гибкий вариант, но требует больше места.

Sophi
Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
Попробовать бесплатноArrow

Следующий вопрос

Это единственный вопрос по вашему фильтру

как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы