Таблиця замикання (closure table) — це спосіб моделювання даних деревоподібної структури в реляційній базі даних. Вона включає дві таблиці: таблицю node
та таблицю closure
.
root -> child a -> grandchild та root -> child b
Я завантажив базу даних у DB Fiddle, щоб попрацювати з нею https://www.db-fiddle.com/f/vZzmioVV5E3f4iR86pTbj7/0
Переваги:
Легко виконувати запити на нащадків та предків конкретного вузла:
-- отримати предків
SELECT descendant FROM closure_table WHERE ancestor = 2;
-- отримати нащадків
SELECT ancestor FROM closure_table WHERE descendant = 4;
Недоліки:
Вставка даних ускладнена. Щоб вставити новий вузол, потрібно зробити один запис у таблиці вузлів і кілька записів у таблиці closure, по одному для кожного предка.
-- приклад вставки вузла 4, 'Grandchild'
INSERT INTO nodes (id, name) VALUES
(4, 'Grandchild');
-- стосунки в таблиці closure
INSERT INTO closure_table (ancestor, descendant, depth) VALUES
-- стосунки Grandchild
(1, 4, 2), -- Root до Grandchild
(2, 4, 1), -- Child A до Grandchild
(4, 4, 0); -- Grandchild є своїм власним предком
Це можна використовувати, коли запитів на читання більше, ніж на запис.
Знайти правильний баланс є ключем до створення надійних систем баз даних.
Примітка
Якщо ця стаття допомогла вам здобути нові знання, будь ласка, поставте "аплодисменти" і залиште коментар. Не забувайте слідкувати за мною на Medium та на LinkedIn. Ваша підтримка допомагає мені створювати більше такого контенту та підтримує зв'язок у спільноті інженерів даних. Дякую!
Перекладено з: Understanding Normalization in RDBMS with Simple Examples