Database
 sql >> база данни >  >> RDS >> Database

Как да създадете таблица с множество чужди ключове и да не се объркате

Разбиране на релациите на таблицата

SQL сървърът добавя външни ключове за реализиране на връзки между таблици в релационна база данни. Една таблица може да има релации едно към едно, едно към много или много към много с друга таблица, в зависимост от типа данни, които искате да съхраните.

Връзката един към един е проста и рядко се използва. Всеки запис в определена таблица се отнася точно до един запис в друга таблица.

Например, можете да съхранявате името, идентификатора и пола на потребителя в една таблица (Потребител таблица) и техните адреси ще бъдат съхранени в различната таблица (Адрес таблица). Всеки запис в Потребител таблица ще съответства на един запис в Адрес маса. И обратно, всеки адрес в Адрес таблицата ще принадлежи само на един запис в Потребител таблица.

Отношенията едно към много и много към много са много по-чести.

Помислете за сценарий, при който съхранявате информация за служителите на организацията, отделите, застрахователните компании на служителите и адресите на офисите на служителите.

Предполагаме, че един служител може да принадлежи само към един отдел и може да се абонира само за една застрахователна компания. Въпреки това отделите и застрахователните компании могат да имат няколко служители. Отдел и Служител таблиците биха имали връзка едно към много. По същия начин, Застраховката и таблици на служителите ще има връзка един към много.

Също така, организацията може да има няколко офиса и служител може да работи в повече от един офис. Освен това един офис може да има няколко служители. В този случай Office и Служител таблиците ще имат връзка много към много.

За да приложите връзката много към много, трябва да създадете таблица за търсене, която свързва две таблици във връзка много към много. Оригиналните таблици съдържат връзка едно към много с таблицата за търсене.

Нека помислим за създаване на връзка много към много между Служителя и Офис маси. Ще създадете нова справочна таблица Employee_Office . След това създавате връзка едно към много между Служителя и Employee_Office таблици и Офис и Employee_Office таблици.

Нека сега да видим как външните ключове се вписват в тази дискусия.

Какво са чуждите ключове и защо са ви нужни множество чужди ключове?

В релационните бази данни външните ключове реализират различни типове релации на база данни.

Например, за да приложите връзка един към много в SQL Server, трябва да добавите външен ключ в таблица, която е на много страни на връзката едно към много.

Външният ключ препраща към първичния ключ или уникалния идентификационен ключ на таблицата, която е на един страна на масата. Следователно във връзка едно към много между Отдел и Служител таблици, които обсъдихме по-горе, Служител таблицата ще съхранява външен ключ, който препраща към първичния ключ на Отдел таблица.

В сценарии, при които една таблица може да има връзки с множество други таблици, ще трябва да добавите множество външни ключа към таблица. За Служителя таблица, трябва да добавите външни ключове, които препращат към първичните ключове на Отдел таблицата и Застраховката маса. По същия начин, Employee_Office справочната таблица ще има два външни ключа, които препращат към първичните ключове на Служителя и Офис таблици.

Добавяне на множество външни ключа със SQL Server

Следната диаграма показва схемата на базата данни, която ще приложите за нашия прост пример:

Тук можете да видите, че базата данни има пет таблици:Служител , Застраховка , Отдел , Офис и Офис на служителите .

Отдел и Служител таблиците имат връзка едно към много. По същия начин, Застраховката и Служител таблиците също имат връзка едно към много. Офисът и таблиците Employee имат връзка много към много, реализирана чрез две връзки един към много с Employee_Office справочна таблица.

Служителят таблицата има два външни ключа, Dep_Id и Insur_Id които се отнасят до първичните ключове (Id) на Отдел и Застраховка таблици, съответно.

Нека сега изпълним SQL скрипта, който създава описаната база данни.

Започнете със създаване на таблици без външни ключове. Ако се опитате да създадете таблици с външни ключове, които препращат към други таблици, които все още не са създадени, ще получите грешка.

В нашата схема на база данни Отдел , Организация и Офис таблиците нямат външни ключове. Следният скрипт създава фиктивна база данни с име Организация и добавя три таблици в него:Отдел , Застраховка и Офис .

CREATE DATABASE Organization

USE Organization
CREATE TABLE Department
(
Id INT PRIMARY KEY,
Name VARCHAR (50) NOT NULL
)

USE Organization
CREATE TABLE Insurance
(
Id INT PRIMARY KEY,
Name VARCHAR (50) NOT NULL
)

USE Organization
CREATE TABLE Office
(
Id INT PRIMARY KEY,
Name VARCHAR (50) NOT NULL
)

Можете да използвате ЧУЖДНИ КЛЮЧЕВИ РЕФЕРЕНЦИ ограничение за реализиране на връзка с външен ключ в SQL Server. Посочете името на таблицата. След това посочете в скоби името на колоната за външния ключ, за да го препратите.

Следният скрипт създава Служител таблица с външни ключове Dep_Id и Insur_Id които се позовават на колоните с идентификатор в Отдел и Застраховка таблици съответно.

USE Organization
CREATE TABLE Employee
(
Id INT PRIMARY KEY IDENTITY(1,1),
Name VARCHAR (50) NOT NULL,
Age INT,
Gender VARCHAR (50),
Dep_Id int FOREIGN KEY REFERENCES Department(Id),
Insur_Id int FOREIGN KEY REFERENCES Insurance(Id)
)

И накрая, следният скрипт създава Employee_Office таблица с два външни ключа Emp_Id и Office_Id .

USE Organization
CREATE TABLE Employee_Office
(
Id INT PRIMARY KEY IDENTITY(1,1),
Emp_Id int FOREIGN KEY REFERENCES Employee(Id),
Office_Id int FOREIGN KEY REFERENCES Office(Id)
)

Вмъкване на записи в таблици с множество външни ключа

За да вмъкнете записи в таблици с множество външни ключове, първо трябва да създадете съответни записи в таблиците, които се препращат от външни ключове в оригиналните таблици.

На практика за вмъкване на записи в Служител таблица, първо трябва да създадем съответните записи в Отдел и Застраховка маси. Това е така, защото Служителят таблицата съдържа външни ключове, отнасящи се до Отдел и Застраховка таблици.

Първо се опитваме да добавим записи в Служител таблица без посочване на външни ключове, отнасящи се до Отдел и Служител таблици.

INSERT INTO Employee
VALUES ('James', 10, 'Male'),
('Sara', 7, 'Female')

Ще видите следната грешка. Това се случва, защото посоченият брой стойности не съвпада с броя на колоните в Служител таблица.

Нека се опитаме да добавим някои фиктивни стойности за Dep_Id и Insur_Id колони (външни ключове):

INSERT INTO Employee
VALUES ('James', 10, 'Male', 2, 2),
('Sara', 7, 'Female', 1, 1)

Ще видите следната грешка, тъй като таблиците Department и Insurance нямат записи съответно с идентификатори 2 и 1.

Нека сега вмъкнем записи в Отдел , Застраховка и Офис таблици:

INSERT INTO Department
VALUES (1, 'Finance'),
(2, 'HR')

INSERT INTO Insurance
VALUES (1, 'Company A'),
(2, 'Company B')

INSERT INTO Office
VALUES (1, 'Paris'),
(2, 'London')

От Отдел и Застраховка таблиците вече имат записи с идентификатори 2 и 1, можете да вмъквате записи в Служител таблици със съответните стойности на външния ключ, както е показано по-долу:

INSERT INTO Employee
VALUES ('James', 10, 'Male', 2, 2),
('Sara', 7, 'Female', 1, 1)

Поставете някои записи в Employee_Office маса. Но преди това нека видим стойностите на колоната Id в таблицата Employee:

SELECT * FROM Employee

Служителят колоната съдържа записи със стойности на Id от 2 и 3. Можете да вмъквате записи в Employee_Office таблица, където Emp_Id колоната съдържа 2 или 3 и Office_Id колона съдържа 1 или 2.

INSERT INTO Employee_Office
VALUES (2, 1),
(2, 2),
(3,2)

Избиране на записи от таблици с множество външни ключа

За да изберете записи от таблици с множество външни ключове, имате нужда от JOIN.

Следният скрипт връща стойности на Име и Пол колони от Служител таблица и Име колони от Отдел и застрахователни маси. Тъй като Служител таблицата съдържа два външни ключа, трябва да използвате два LEFT JOIN изявления:

SELECT 
Employee.Name AS Employee_Name, 
Employee.Gender, 
Department.Name as Department_Name, 
Insurance.Name as Insurance

FROM Employee
LEFT JOIN Department ON Employee.Dep_Id  =  Department.Id
LEFT JOIN Insurance  ON Employee.Insur_Id = Insurance.Id

По същия начин можете да изберете стойности на Име и Пол колони от Служител таблица и Име колона от Офис таблица, използваща два оператора LEFT JOIN в таблицата за търсене Employee_Office .

SELECT 
Employee.Name AS Employee_Name, 
Employee.Gender, 
Office.Name as Office_Name

FROM Employee
LEFT JOIN Employee_Office ON Employee.Id  =  Employee_Office.Emp_Id
LEFT JOIN Office  ON Office.Id = Employee_Office.Office_Id

ИЗТРИВАНЕ на записи от таблици с множество чужди ключове

Можете да изтривате записи от таблици с множество външни ключове. Уверете се обаче, че таблицата не е посочена от външен ключ в друга колона.

Например, не трябва да изтривате записи от Отдел таблица, която е посочена от Emp_Id външен ключ в Служител маса. Ето един пример:

DELETE FROM Department WHERE Id = 1

От записа с Id 1 в Отдел таблицата се препраща от Emp_Id колона в Служител таблица, не можете да я изтриете, както е посочено в горната грешка. Първо, трябва да изтриете всички записи от Служител таблица, където Emp_Id е 1.

Таблицата Employee съдържа само 1 такъв запис (със стойност на Id 3). Нека се опитаме да изтрием този запис със следната заявка:

DELETE FROM Employee WHERE Id = 3

Ще видите грешката, която възниква, защото Employee_Office съдържа запис, където Emp_Id колоната с външен ключ съдържа 3 записа. Следователно първо ще трябва да премахнете този запис:

Следният скрипт премахва записа с Emp_Id стойност 3 от Employee_Office таблица.

DELETE FROM Employee_Office WHERE Emp_Id = 3

И накрая, следният скрипт премахва записа със стойности на Id от 1 от Служител и Отдел колони.

DELETE FROM Employee WHERE Id = 1
DELETE FROM Department WHERE Id = 1

Заключение

По този начин, ние разгледахме добавянето на множество външни ключове в таблици на SQL Server, използвайки SQL заявките за добавяне на външни ключове. Надяваме се, че тези практически примери, използвани в статията, също са ви помогнали да овладеете тази тема.

Когато се занимавате с външни ключове и зависимости от таблици, за да изпълнявате работните задачи, също така е полезно да използвате софтуерните инструменти за опростяване на рутините. Силно препоръчителна е Visual Database Diagram като специално решение за преглед на всички зависимости между таблиците. Освен това можете да генерирате точна документация за цялата база данни, независимо от нейната сложност с функцията Database Documenter.

И двата инструмента имат за цел да намалят ръчното натоварване, да автоматизират процесите и да ускорят производителността, за да свалят малко тежестта от плещите си.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да промените текста на малки букви в SQL

  2. Преглед на функцията DBCC CheckDB

  3. Помощна програма за проверка на клъстер, генерираща голям брой xml файлове във файловата система “/u01”.

  4. Модел на данни за грижи за домашни любимци

  5. MuleSoft прегръща GraphQL за усъвършенстване на интеграцията на API