Одне з запитань, яке вводить Node.js розробника в легкий ступор. Чомусь так склалося, що SQL і розуміння реляційних баз даних - це ахіллесова пʼята в світі backend-розробки на JavaScript.
Referential actions - це правила, які визначають, що має відбутися з рядками в дочірній таблиці, коли в батьківській таблиці оновлюється або видаляється рядок, на який вони посилаються через foreign key.
В основному є три способи контролю, і зараз ми розберемо їх на прикладі. Уявимо, що в нас є таблички users і orders. В таблиці orders є user_id, який представляє собою foreign key і звʼязує orders з конкретним користувачем.
Якщо ми спробуємо видалити користувача з id=1, на який посилаються рядки з orders, то спрацює механізм референційної цілісності (referential integrity), який визначає, чи можливе видалення і, якщо так, то за якими правилами. Далі ми по черзі розберемо правила, і ви зрозумієте, що це дуже просто і зрозуміло.
RESTRICT
Якщо на рядок з users посилається хоча б один рядок з orders, ми не зможемо видалити. Єдиний спосіб видалити такий запис - це спочатку видалити дані з orders, а тільки після того referential integrity дозволить видалити користувача.
CASCADE
Найбільш небезпечне правило, оскільки воно означає, що при видаленні рядка з таблиці users будуть видалені всі рядки з orders, які посилаються на користувача.
SET NULL
При видаленні користувача з таблиці users всім orders, які на нього посилаються, буде записано NULL в foreign key (user_id).
Всі ті самі правила застосовуються і для UPDATE-операції, але так як це використовується доволі рідко, на інтервʼю вас будуть запитувати саме про DELETE.