Database
 sql >> Baza danych >  >> RDS >> Database

Jak utworzyć tabelę z wieloma kluczami obcymi i nie pomylić się?

Zrozumienie relacji między tabelami

Serwer SQL dodaje klucze obce w celu zaimplementowania relacji między tabelami w relacyjnej bazie danych. Tabela może mieć relacje jeden-do-jednego, jeden-do-wielu lub wiele-do-wielu z inną tabelą, w zależności od typu danych, które chcesz przechowywać.

Relacja jeden do jednego jest prosta i rzadko używana. Każdy rekord w określonej tabeli odnosi się dokładnie do jednego rekordu w innej tabeli.

Na przykład możesz przechowywać imię i nazwisko, identyfikator i płeć użytkownika w jednej tabeli (Użytkownik tabeli), a ich adresy będą przechowywane w innej tabeli (Adres stół). Każdy rekord w Użytkowniku tabela będzie odpowiadać jednemu rekordowi w Adresie stół. I odwrotnie, każdy adres w Adresie tabela będzie należeć tylko do jednego rekordu w Użytkowniku tabela.

Relacje jeden-do-wielu i wiele-do-wielu są znacznie częstsze.

Rozważ scenariusz, w którym przechowujesz informacje o pracownikach, działach organizacji, firmach ubezpieczeniowych pracowników i adresach biur pracowników.

Zakładamy, że pracownik może należeć tylko do jednego działu i wykupić abonament tylko w jednej firmie ubezpieczeniowej. Jednak działy i firmy ubezpieczeniowe mogą mieć wielu pracowników. Departament i Pracownik tabele miałyby relację jeden-do-wielu. Podobnie Ubezpieczenie i tabele pracowników miałby związek jeden-do-wielu.

Ponadto organizacja może mieć wiele biur, a pracownik może pracować w więcej niż jednym biurze. Poza tym biuro może mieć wielu pracowników. W takim przypadku Biuro i Pracownik tabele miałyby związek wiele-do-wielu.

Aby zaimplementować relację wiele-do-wielu, należy utworzyć tabelę przeglądową, która łączy dwie tabele w relacji wiele-do-wielu. Oryginalne tabele zawierają relację jeden-do-wielu z tabelą przeglądową.

Zastanówmy się nad stworzeniem relacji wiele-do-wielu między Pracownikiem i Biuro tabele. Utworzyłbyś nową tabelę przeglądową Employee_Office . Następnie tworzysz relację jeden-do-wielu między Pracownikiem i Employee_Office stoły i Biuro i Employee_Office tabele.

Zobaczmy teraz, jak klucze obce pasują do tej dyskusji.

Co to są klucze obce i dlaczego potrzebujesz wielu kluczy obcych?

W relacyjnych bazach danych klucze obce implementują różne typy relacji z bazami danych.

Na przykład, aby zaimplementować relację jeden-do-wielu w SQL Server, musisz dodać klucz obcy w tabeli, która znajduje się w wielu strony relacji jeden-do-wielu.

Klucz obcy odwołuje się do klucza podstawowego lub unikalnego klucza tożsamości tabeli znajdującej się na jednej stronie stołu. Dlatego w relacji jeden-do-wielu między Departamentem i Pracownik tabele omówione powyżej, Pracownik tabela będzie przechowywać klucz obcy, który odwołuje się do klucza podstawowego Działu tabela.

W scenariuszach, w których tabela może mieć relacje z wieloma innymi tabelami, konieczne będzie dodanie wielu kluczy obcych do tabeli. Dla Pracownika tabeli, musisz dodać klucze obce, które odwołują się do kluczy podstawowych Działu tabela i Ubezpieczenia stół. Podobnie Biuro_Pracownika tabela przeglądowa będzie miała dwa klucze obce, które odwołują się do kluczy podstawowych Pracownika i Biuro tabele.

Dodawanie wielu kluczy obcych za pomocą SQL Server

Poniższy diagram przedstawia schemat bazy danych, który zamierzasz zaimplementować w naszym prostym przykładzie:

Tutaj widać, że baza danych zawiera pięć tabel:Pracownik , Ubezpieczenie , Dział , Biuro i Biuro_pracownika .

Departament i Pracownik tabele mają relację jeden-do-wielu. Podobnie Ubezpieczenie i Pracownik tabele mają również relację jeden-do-wielu. Biuro Tabele pracowników mają relację wiele-do-wielu zaimplementowaną przy użyciu dwóch relacji jeden-do-wielu z Employee_Office tabela przeglądowa.

Pracownik tabela ma dwa klucze obce, Dep_Id i Identyfikator ubezpieczenia które odnoszą się do kluczy podstawowych (Id) Departamentu i ubezpieczenie odpowiednio tabele.

Uruchommy teraz skrypt SQL, który tworzy opisaną bazę danych.

Zacznij od utworzenia tabel bez kluczy obcych. Jeśli spróbujesz utworzyć tabele z kluczami obcymi, które odwołują się do innych tabel, które nie zostały jeszcze utworzone, pojawi się błąd.

W naszym schemacie bazy danych Dział , Organizacja i Biuro tabele nie mają kluczy obcych. Poniższy skrypt tworzy fikcyjną bazę danych o nazwie Organizacja i dodaje w nim trzy tabele:Dział , Ubezpieczenie i Biuro .

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
)

Możesz użyć ODNIESIEŃ DO KLUCZY ZAGRANICZNYCH ograniczenie do zaimplementowania relacji klucza obcego w SQL Server. Podaj nazwę tabeli. Następnie określ w nawiasie nazwę kolumny, w której klucz obcy będzie się do niego odwoływać.

Poniższy skrypt tworzy Pracownika tabela z kluczami obcymi Dep_Id i Identyfikator ubezpieczenia które odwołują się do kolumn identyfikatorów w Departamencie i ubezpieczenie odpowiednio tabele.

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)
)

Na koniec poniższy skrypt tworzy Employee_Office tabela z dwoma kluczami obcymi Emp_Id i 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)
)

Wstawianie rekordów do tabel z wieloma kluczami obcymi

Aby wstawić rekordy do tabel z wieloma kluczami obcymi, należy najpierw utworzyć odpowiednie rekordy w tabelach, do których odwołują się klucze obce w oryginalnych tabelach.

W praktyce wstawianie rekordów do Pracownika tabeli, musimy najpierw utworzyć odpowiednie rekordy w Departamencie i ubezpieczenie tabele. Dzieje się tak, ponieważ Pracownik tabela zawiera klucze obce odnoszące się do Działu i ubezpieczenie tabele.

Najpierw próbujemy dodać rekordy do Pracownika tabela bez określania kluczy obcych odwołujących się do Działu i Pracownik tabele.

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

Zobaczysz następujący błąd. Dzieje się tak, ponieważ określona liczba wartości nie odpowiada liczbie kolumn w Pracownik tabela.

Spróbujmy dodać kilka fikcyjnych wartości dla Dep_Id iInsur_Id kolumny (klucze obce):

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

Zobaczysz następujący błąd, ponieważ tabele Department i Insurance nie zawierają rekordów o identyfikatorach odpowiednio 2 i 1.

Wstawmy teraz rekordy do Działu , Ubezpieczenie i Biuro stoły:

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')

Od Wydziału i ubezpieczenie tabele mają teraz rekordy o identyfikatorach 2 i 1, możesz wstawić rekordy do Pracownika tabele z odpowiednimi wartościami kluczy obcych, jak pokazano poniżej:

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

Wstaw kilka rekordów do Employee_Office stół. Ale wcześniej zobaczmy wartości kolumny Id w tabeli Pracownik:

SELECT * FROM Employee

Pracownik kolumna zawiera rekordy o wartościach identyfikatora 2 i 3. Możesz wstawić rekordy do Employee_Office tabela, w której Emp_Id kolumna zawiera 2 lub 3, a Office_Id kolumna zawiera 1 lub 2.

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

Wybieranie rekordów z tabel z wieloma kluczami obcymi

Aby wybrać rekordy z tabel z wieloma kluczami obcymi, potrzebujesz sprzężeń.

Poniższy skrypt zwraca wartości Nazwy i Płeć kolumny od Pracownika tabela i Nazwa kolumny z Działu oraz tabele ubezpieczeniowe. Od Pracownika tabela zawiera dwa klucze obce, musisz użyć dwóch LEFT JOIN oświadczenia:

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

W ten sam sposób możesz wybrać wartości Nazwy i Płeć kolumny od Pracownika tabela i Nazwa kolumna z Biura tabela za pomocą dwóch instrukcji LEFT JOIN w tabeli odnośników Pracownik_Biuro .

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

USUWANIE rekordów z tabel z wieloma kluczami obcymi

Możesz usuwać rekordy z tabel z wieloma kluczami obcymi. Upewnij się jednak, że do tabeli nie odwołuje się klucz obcy w innej kolumnie.

Na przykład nie należy usuwać rekordów z Departamentu tabela, do której odwołuje się Emp_Id klucz obcy w Pracowniku stół. Oto przykład:

DELETE FROM Department WHERE Id = 1

Od rekordu o identyfikatorze 1 w Wydziale do tabeli odwołuje się Emp_Id kolumna w Pracownik tabeli, nie można jej usunąć, jak wspomniano w powyższym błędzie. Najpierw musisz usunąć wszystkie wpisy od Pracownika tabela, w której Emp_Id to 1.

Tabela Pracownik zawiera tylko 1 taki rekord (o wartości Id 3). Spróbujmy usunąć ten rekord za pomocą następującego zapytania:

DELETE FROM Employee WHERE Id = 3

Zobaczysz błąd, który występuje, ponieważ Employee_Office zawiera rekord, w którym Emp_Id Kolumna klucza obcego zawiera 3 rekordy. Dlatego musisz najpierw usunąć ten rekord:

Poniższy skrypt usuwa rekord z Emp_Id wartość 3 z Employee_Office tabela.

DELETE FROM Employee_Office WHERE Emp_Id = 3

Na koniec poniższy skrypt usuwa rekord z wartościami identyfikatora 1 z Pracownika i Dział kolumny.

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

Wniosek

W związku z tym zbadaliśmy dodawanie wielu kluczy obcych w tabelach SQL Server przy użyciu zapytań SQL w celu dodania kluczy obcych. Mam nadzieję, że te praktyczne przykłady użyte w artykule również pomogły Ci opanować ten temat.

Kiedy masz do czynienia z kluczami obcymi i zależnościami tabel w celu wykonywania zadań roboczych, pomocne jest również użycie narzędzi programowych w celu uproszczenia procedur. Wysoce polecany jest Visual Database Diagram jako dedykowane rozwiązanie do przeglądania wszystkich zależności między tabelami. Możesz także wygenerować dokładną dokumentację dla całej bazy danych, bez względu na jej złożoność, dzięki funkcji Database Documenter.

Oba te narzędzia mają na celu zmniejszenie obciążenia ręcznego, zautomatyzowanie procesów i przyspieszenie wydajności, aby odciążyć Twoje barki.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Model danych dostawy do restauracji

  2. Prisma, jak wyczyścić bazę danych

  3. Odkrywanie testów jednostkowych Java za pomocą JUnit Test Framework

  4. Schemat gwiazdy kontra schemat płatka śniegu

  5. Relacyjne vs nierelacyjne bazy danych – część 2