Обмеження посилальної цілісності також відоме як обмеження зовнішнього ключа . Зовнішній ключ — це ключ, значення якого походять від первинного ключа іншої таблиці.
Таблиця, з якої отримані значення, називається Майстер або посилання Таблиця, а таблиця, у яку відповідно вставляються значення, називається Дочірній або посилання Таблиця, іншими словами, ми можемо сказати, що таблиця, що містить зовнішній ключ називається дочірній стіл і таблицю, що містить Первинний ключ/ключ-кандидат називається на яку посилається або батьківська таблиця . Коли ми говоримо про реляційну модель бази даних, ключ-кандидат можна визначити як набір атрибутів, який може мати нуль або більше атрибутів.
Синтаксис головної таблиці або таблиці посилання:
зразки програм 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.