В тази статия ще научим за ограниченията FOREIGN KEY и как да дефинираме ограничение FOREIGN KEY, за да изградим връзката между две таблици.
В система за управление на релационни бази данни (RDBMS) ВЪНШЕН КЛЮЧ е поле или куп полета, които се използват за изграждане на връзка между две таблици или за свързване на двете таблици.
- ВЪНШЕН КЛЮЧ е известен също като референтен ключ в RDBMS
- Използвайки ограничения FOREIGN KEY между две таблици, ние дефинираме връзка родител-подчинение между две таблици.
- Полето дефинира ограниченията ПЪРВЕН КЛЮЧ в таблица, известна като родителска таблица, докато същото поле дефинира ограниченията FOREIGN KEY в друга таблица, известна като дъщерна таблица.
- В таблицата може да има само един ПЪРВИЧЕН КЛЮЧ, но няма дефинирано ограничение за ВЪНШИЯ КЛЮЧ. Можем да имаме един или повече от един ВЪНШЕН КЛЮЧ на масата.
- Можем да дефинираме ограничения на ВЪНШЕН КЛЮЧ, докато създаваме таблицата, или да дефинираме ограничения на ВЪНШЕН КЛЮЧ върху вече съществуваща таблица.
Нека вземем пример, за да разберем и научим за ограниченията FOREIGN KEY.
Пример:
Тук имаме две таблици, едната е таблицата на курса, а втората е таблицата на студентите:
Студентите избират курсове. Следният пример за ограничения на ВЪНШЕН КЛЮЧ е дефиниран в едно поле.
Таблица номер едно:Студентска маса
Id_Id | Име | Фамилия | Email_Id | Град |
101 | Карина | Сайед | [email protected] | Хайдерабад |
102 | Анмол | Темани | [email protected] | Джалгаон |
103 | Харшал | Пател | [email protected] | Мумбай |
104 | Сакши | Качулка | [email protected] | Пуна |
105 | Суреш | Коли | [email protected] | Хайдерабад |
Таблица номер две:курсова таблица
Course_Id | Име_на_курс | Идентификационен номер на ученика |
C101 | Java | 101 |
C102 | SQL | 102 |
C103 | SOA | Null |
C104 | SAP | 104 |
C105 | MuleSoft | 103 |
C101 | Java | 105 |
В таблицата Student, полето Student_Id е ПЪРВИЧНИЯ КЛЮЧ, а в таблицата на курса Student_Id е ВЪНШИЯТ КЛЮЧ.
FOREIGN KEY
ограничението предотвратява вмъкването на невалидни данни в колоната за външен ключ, защото трябва да е една от стойностите, съдържащи се в родителската таблица.
Дефинирайте ограничения на ВЪНШИЯ КЛЮЧ при CREATE TABLE
Следният пример дефинира ВЪНШЕН КЛЮЧ в таблицата на курса.
Първо, създадохме таблицата Student със следните полета:
СЪЗДАВАНЕ НА ТАБЛИЦА Student( Student_Id int NOT NULL, First_Name varchar(40) NOT NULL, Last_Name varchar(40) NOT NULL, Email_Id varchar(50), City varchar(20) NOT NULL, PRIMARY KEY(Student_Id));предварително>Следващият пример показва как да дефинирате ограниченията FOREIGN KEY на другата таблица.
Курс за име на таблица:
CREATE TABLE Course( Course_Id int NOT NULL, Course_Name varchar(40) NOT NULL, Student_Id int, FOREIGN KEY(Student_Id) REFERENCES Student(Student_Id));В таблицата на курса не сме дефинирали ПЪРВИЧЕН КЛЮЧ. Просто дефинирайте ограниченията FOREIGN KEY за Student_Id.
Следният пример за ограничения на ВЪНШЕН КЛЮЧ е дефиниран за множество полета.
Да предположим, че имаме три таблици, едната е таблицата за пакети, втората е таблицата с данни, а третата е таблицата Talk_time:
Таблица 1:Пакет:
Package_Id | Идентификатор на_данни | Talktime_Id |
P1001 | D1003 | T1001 |
P1002 | D1001 | T1002 |
P1003 | D1002 | T1003 |
P1004 | D1003 | T1004 |
P1005 | D1004 | T1005 |
Таблица 2:Данни:
Data_Id | Данни_Limit | Цена_данни |
D1001 | 5 | 120 |
D1002 | 3 | 75 |
D1003 | 6 | 150 |
D1004 | 10 | 240 |
D1005 | 15 | 320 |
Таблица 3:Време за разговор:
Talk_Time_Id | Talk_Time_Limit | Време за разговор _Цена |
T1001 | 120 | 130 |
T1002 | 70 | 105 |
T1003 | 60 | 90 |
T1004 | 200 | 220 |
T1005 | 150 | 170 |
В таблицата Talk_Time, Talk_Time_Id е ПРАВИЛНИЯ КЛЮЧ.
В таблицата с данни Data_Id е ПЪРВИЧНИЯ КЛЮЧ.
Докато в таблицата с пакети Talk_Time_Id и Data_Id са ЧУЖДИТЕ ключове
Таблица номер едно:Данни:
CREATE TABLE Data(Data_Id varchar(5) NOT NULL, Data_Limit int, Data_Price int, PRIMARY KEY(Data_Id));
Таблица номер две:Talk_Time:
CREATE TABLE Talk_Time(Talk_Time_Id varchar(5) NOT NULL, Talk_Time_Limit int, Talk_Time_Price int , PRIMARY KEY(Talk_Time_Id));
Таблица номер три:Пакет:
CREATE TABLE Package(Package_Id varchar(5) NOT NULL, Data_Id varchar(5), Talk_Time_Id varchar(5), FOREIGN KEY(Data_Id) REFERENCES Данни (Data_Id), FOREIGN KEY(Talk_Time_Id) REFERENCES Talk_Time(Talk));
Ограничения за ВЪНШЕН КЛЮЧ, използвайки ALTER TABLE:
Да предположим, че вече сме създали таблицата и искаме да дефинираме ограниченията FOREIGN KEY в полето. Ще използваме заявката ALTER TABLE, за да добавим ограничения за ВЪНШЕН КЛЮЧ в такъв случай.
Следващата заявка се използва за добавяне на ограничения FOREIGN KEY в полето Student_Id.
ALTER TABLE Курс ДОБАВЯНЕ НА ВЪНШЕН КЛЮЧ(Идентификатор_на_студент) ПРЕПОРЪЧКИ Студент(Идентификатор на_учащ);
Ключова дума ADD се използва след името на таблицата, за да се добавят ограниченията FOREIGN KEY към вече съществуващата таблица.
ИЗПУСКАНЕ НА ВЪНШИЯ КЛЮЧ ограничение от таблицата
Използвайте следната заявка, за да премахнете ограничението FOREIGN KEY от таблицата.
ALTER TABLE Cours DROP FOREIGN KEY course_ibfk_1;
Ключовата дума Drop се използва за премахване на ограниченията FOREIGN KEY от полето Student_Id.
course_ibfk_1 е името на ограничението за външния ключ.
Можем да имаме нулеви стойности в полето за ограничения FOREIGN KEY. Можем да имаме дублиращи се стойности в полето за ограничения FOREIGN KEY.