logo

Обмеження посилальної цілісності в СУБД

Обмеження посилальної цілісності також відоме як обмеження зовнішнього ключа . Зовнішній ключ — це ключ, значення якого походять від первинного ключа іншої таблиці.

Таблиця, з якої отримані значення, називається Майстер або посилання Таблиця, а таблиця, у яку відповідно вставляються значення, називається Дочірній або посилання Таблиця, іншими словами, ми можемо сказати, що таблиця, що містить зовнішній ключ називається дочірній стіл і таблицю, що містить Первинний ключ/ключ-кандидат називається на яку посилається або батьківська таблиця . Коли ми говоримо про реляційну модель бази даних, ключ-кандидат можна визначити як набір атрибутів, який може мати нуль або більше атрибутів.

Синтаксис головної таблиці або таблиці посилання:

зразки програм java
 CREATE TABLE Student (Roll int PRIMARY KEY, Name varchar(25) , Course varchar(10) ); 

Тут виступає колонка Roll первинний ключ, який допоможе отримати значення зовнішнього ключа в дочірній таблиці.

Обмеження посилальної цілісності

Синтаксис дочірньої таблиці або таблиці посилання:

 CREATE TABLE Subject (Roll int references Student, SubCode int, SubName varchar(10) ); 

Обмеження посилальної цілісності

У наведеній вище таблиці стовпець Roll виконує роль Зовнішній ключ, значення якого отримано з використанням рулонного значення первинного ключа з головної таблиці.

Обмеження зовнішнього ключа АБО обмеження посилальної цілісності.

Є два обмеження посилальної цілісності:

Вставити обмеження: Значення не можна вставити в таблицю CHILD, якщо значення не лежить у таблиці MASTER

Видалити обмеження: Значення не можна видалити з таблиці MASTER, якщо значення лежить у таблиці CHILD

Припустімо, ви хочете вставити Roll = 05 з іншими значеннями стовпців у SUBJECT Table, тоді ви одразу побачите помилку ' Обмеження зовнішнього ключа порушено ', тобто під час виконання команди вставки як:

Вставити в SUBJECT значення (5, 786, OS); не оброблятиметься SQL через обмеження вставки (Оскільки ви не можете вставити значення в дочірню таблицю, якщо значення не лежить у головній таблиці, оскільки Roll = 5 немає в головній таблиці, отже, не буде дозволено вводити Roll = 5 у дочірній таблиці)

Подібним чином, якщо ви хочете видалити Roll = 4 із таблиці STUDENT, ви одразу побачите помилку ' Обмеження зовнішнього ключа порушено ' тобто під час виконання команди видалення як:

якщо Редьярд Кіплінг короткий зміст

Видалити зі STUDENT, де Roll = 4; не буде оброблятися SQL через обмеження видалення. (Оскільки ви не можете видалити значення з головної таблиці, якщо значення лежить у дочірній таблиці, оскільки Roll = 5 присутній у дочірній таблиці, отже, не буде дозволено видалити Roll = 5 із головної таблиці, якщо якимось чином нам вдалося видалити Roll = 5, тоді Roll = 5 буде доступним у дочірній таблиці, що зрештою порушить обмеження вставки).

НА ВИДАЛЕННЯ КАСКАДУ.

Згідно з обмеженням видалення: значення не можна видалити з таблиці MASTER, якщо значення лежить у таблиці CHILD. Виникає наступне запитання: чи можемо ми видалити значення з головної таблиці, якщо значення лежить у дочірній таблиці, не порушуючи обмеження видалення? тобто в той момент, коли ми видаляємо значення з головної таблиці, відповідне йому значення також має бути видалено з дочірньої таблиці.

Відповідь на запитання вище: ТАК, ми можемо видалити значення з головної таблиці, якщо значення лежить у дочірній таблиці, не порушуючи обмеження видалення, ми повинні внести незначні зміни під час створення дочірньої таблиці, тобто додавши на видаленні каскаду .

хеш-таблиця java

СИНТАКСИС ТАБЛИЦІ

 CREATE TABLE Subject (Roll int references Student on delete cascade, SubCode int, SubName varchar(10) ); 

У наведеному вище синтаксисі відразу після ключового слова references (використовується для створення зовнішнього ключа) ми додали каскад видалення, додавши його зараз, ми можемо видалити значення з головної таблиці, якщо значення лежить у дочірній таблиці, не порушуючи видалення обмеження. Тепер, якщо ви хочете видалити Roll = 5 із головної таблиці, навіть якщо Roll = 5 лежить у дочірній таблиці, це можливо, тому що в момент, коли ви даєте команду видалити Roll = 5 із головної таблиці, рядок із Roll = 5 із дочірньої таблиці також буде видалено.

Обмеження посилальної цілісності
Обмеження посилальної цілісності

Показано наведені вище дві таблиці STUDENT і SUBJECT, кожна з яких має по чотири значення, тепер припустімо, що ви хочете видалити Roll = 4 із таблиці STUDENT( Master ), написавши команду SQL: видалити зі STUDENT, де Roll = 4;

Коли SQL виконає наведену вище команду, рядок із Roll = 4 із таблиці SUBJECT( Child ) також буде видалено, результат УЧЕНЬ і ПРЕДМЕТ таблиця буде виглядати так:

Обмеження посилальної цілісності
Обмеження посилальної цілісності

З наведених вище двох таблиць STUDENT і SUBJECT ви можете побачити, що в обох таблицях Roll = 4 видаляється за один раз без порушення обмеження видалення.

Іноді під час співбесід задають дуже важливе запитання: чи може зовнішній ключ мати значення NULL?

Відповідь на запитання вище ТАК, він може мати значення NULL, тоді як первинний ключ не може бути NULL за будь-яку ціну. Щоб практично зрозуміти вищезазначене запитання, давайте розберемося з концепцією delete null.

ON DELETE NULL.

Згідно з обмеженням видалення: значення не можна видалити з таблиці MASTER, якщо значення лежить у таблиці CHILD. Виникає наступне запитання: чи можемо ми видалити значення з головної таблиці, якщо значення лежить у дочірній таблиці, не порушуючи обмеження видалення? Тобто в той момент, коли ми видаляємо значення з головної таблиці, відповідне йому значення також має бути видалено з дочірньої таблиці або може бути замінене значенням NULL.

Відповідь на наведене вище запитання ТАК, ми можемо видалити значення з головної таблиці, якщо значення лежить у дочірній таблиці, не порушуючи обмеження на видалення, вставивши NULL у зовнішній ключ, нам потрібно внести незначні зміни під час створення дочірньої таблиці, тобто. шляхом додавання при видаленні null .

СИНТАКСИС ТАБЛИЦІ:

структури даних java
 CREATE TABLE Subject (Roll int references Student on delete null, SubCode int, SubName varchar(10) ); 

У наведеному вище синтаксисі, одразу після ключового слова references (використовується для створення зовнішнього ключа), ми додали значення delete null, додавши його зараз, ми можемо видалити значення з головної таблиці, якщо значення лежить у дочірній таблиці, не порушуючи видалення обмеження. Тепер, якщо ви хочете видалити Roll = 4 із головної таблиці, навіть якщо Roll = 4 лежить у дочірній таблиці, це можливо, тому що в момент, коли ви даєте команду видалити Roll = 4 із головної таблиці, рядок із Roll = 4 із дочірньої таблиці буде замінено значенням NULL.

Обмеження посилальної цілісності
Обмеження посилальної цілісності

Показано наведені вище дві таблиці STUDENT і SUBJECT, кожна з яких має по чотири значення, тепер припустімо, що ви хочете видалити Roll = 4 із таблиці STUDENT( Master ), написавши команду SQL: видалити зі STUDENT, де Roll = 4;

Коли SQL виконає наведену вище команду, рядок із значенням Roll = 4 із таблиці SUBJECT( Child ) буде замінено значенням NULL. УЧЕНЬ і ПРЕДМЕТ таблиця буде виглядати так:

Обмеження посилальної цілісності
Обмеження посилальної цілісності

З наведених вище двох таблиць STUDENT і SUBJECT можна побачити, що в таблиці STUDENT Roll = 4 видаляється, а значення Roll = 4 у таблиці SUBJECT замінюється на NULL. Це доводить, що зовнішній ключ може мати нульові значення. Якщо у випадку таблиці SUBJECT стовпець Roll є первинним ключем разом із зовнішнім ключем, тоді ми не можемо зробити зовнішній ключ таким, щоб він мав значення NULL.