Meridian312
@Meridian312

Как можно организовать таблицы SQL как контейнер содержащий контейнер?

Необходимо представить организационную иерархию в базе данных, т.е

Group 0 { Group 1 { Group 1.1 ... Group 1.N }, Group 2 { Group 2.1 ... Group 2.N } ... Group N }

CREATE TABLE "main"."groups" (
"id" INTEGER,
"name"  TEXT NOT NULL,
PRIMARY KEY ("id" ASC)
);

CREATE TABLE "main"."groups_in_groups" (
"id"  INTEGER NOT NULL,
"group_one_id"  INTEGER NOT NULL,
"group_two_id"  INTEGER NOT NULL,
PRIMARY KEY ("id"),
CONSTRAINT "fkey0" FOREIGN KEY ("group_one_id") REFERENCES "groups" ("id") ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT "fkey1" FOREIGN KEY ("group_two_id") REFERENCES "groups" ("id") ON DELETE CASCADE ON UPDATE CASCADE
);


Можно ли считать это подходящим решением?
  • Вопрос задан
  • 2671 просмотр
Пригласить эксперта
Ответы на вопрос 2
Melkij
@Melkij
PostgreSQL DBA
Мне известны 4 популярные структуры, у каждой свои заморочки:
habrahabr.ru/post/46659
habrahabr.ru/post/193166
Ответ написан
Комментировать
@gleb_kudr
Я базовую таблицу делал типа name, id, parent_id + добавлял туда денормализации в виде результатов вычисления дерева (для быстрых выборок). Получались еще поля path (типа 1.2.3), а так же nested_left + nested_right + level (уровень вложенности).
По факту path остался неюзаным (хотя он удобен для интерфейсных вещей). В целом такой подход мне понравился, нужно только жестко за консистентностью следить.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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