Розуміння нормалізації в RDBMS з простими прикладами

Таблиця замикання (closure table) — це спосіб моделювання даних деревоподібної структури в реляційній базі даних. Вона включає дві таблиці: таблицю node та таблицю closure.

pic

pic

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

Leave a Reply

Your email address will not be published. Required fields are marked *