Database
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Database

Cách tạo bảng với nhiều phím ngoại và không bị nhầm lẫn

Hiểu mối quan hệ bảng

Máy chủ SQL thêm các khóa ngoại để thực hiện quan hệ giữa các bảng trong cơ sở dữ liệu quan hệ. Một bảng có thể có quan hệ một-một, một-nhiều hoặc nhiều-nhiều với một bảng khác, tùy thuộc vào loại dữ liệu bạn muốn lưu trữ.

Mối quan hệ một-một rất đơn giản và hiếm khi được sử dụng. Mỗi bản ghi trong một bảng cụ thể liên quan đến chính xác một bản ghi trong một bảng khác.

Ví dụ:bạn có thể lưu trữ tên, id và giới tính của người dùng trong một bảng ( Người dùng bảng) và địa chỉ của họ sẽ được lưu trữ trong bảng khác ( Địa chỉ bàn). Mỗi bản ghi trong Người dùng bảng sẽ tương ứng với một bản ghi trong Địa chỉ bàn. Ngược lại, mỗi địa chỉ trong Địa chỉ bảng sẽ chỉ thuộc về một bản ghi trong Người dùng bảng.

Quan hệ một-nhiều và nhiều-nhiều thường xuyên hơn nhiều.

Hãy xem xét một tình huống mà bạn lưu trữ thông tin về nhân viên, phòng ban, công ty bảo hiểm của nhân viên và địa chỉ văn phòng của nhân viên trong tổ chức.

Chúng tôi giả định rằng một nhân viên chỉ có thể thuộc một bộ phận duy nhất và chỉ có thể đăng ký vào một công ty bảo hiểm. Tuy nhiên, các phòng ban và công ty bảo hiểm có thể có nhiều nhân viên. Vụ Nhân viên các bảng sẽ có mối quan hệ một-nhiều. Tương tự, Bảo hiểm và Nhân viên bảng sẽ có mối quan hệ một-nhiều.

Ngoài ra, tổ chức có thể có nhiều văn phòng và một nhân viên có thể làm việc tại nhiều văn phòng. Bên cạnh đó, một văn phòng có thể có nhiều nhân viên. Trong trường hợp này, Văn phòng Nhân viên các bảng sẽ có mối quan hệ nhiều-nhiều.

Để triển khai mối quan hệ nhiều-nhiều, bạn cần tạo một bảng tra cứu kết nối hai bảng trong mối quan hệ nhiều-nhiều. Các bảng ban đầu chứa mối quan hệ một-nhiều với bảng tra cứu.

Hãy xem xét việc tạo ra mối quan hệ nhiều-nhiều giữa Nhân viên Văn phòng những cái bàn. Bạn sẽ tạo một bảng tra cứu mới Employee_Office . Sau đó, bạn tạo mối quan hệ một-nhiều giữa Nhân viên Employee_Office bảng và Văn phòng Employee_Office bảng.

Bây giờ chúng ta hãy xem các khóa ngoại phù hợp như thế nào trong cuộc thảo luận này.

Khóa ngoại là gì và tại sao bạn cần nhiều khóa ngoại?

Trong cơ sở dữ liệu quan hệ, khóa ngoại triển khai các kiểu quan hệ cơ sở dữ liệu khác nhau.

Ví dụ:để triển khai mối quan hệ một-nhiều trong SQL Server, bạn cần thêm khóa ngoại trong bảng nằm trên nhiều các mặt của mối quan hệ một-nhiều.

Khóa ngoại tham chiếu đến khóa chính hoặc khóa nhận dạng duy nhất của bảng nằm trên one cạnh bàn. Do đó, trong mối quan hệ một-nhiều giữa Bộ phận Nhân viên bảng mà chúng tôi đã thảo luận ở trên, Nhân viên bảng sẽ lưu trữ một khóa ngoại tham chiếu đến khóa chính của Cục bảng.

Trong trường hợp một bảng có thể có mối quan hệ với nhiều bảng khác, bạn sẽ cần thêm nhiều khóa ngoại vào một bảng. Đối với Nhân viên bảng, bạn cần thêm các khóa ngoại tham chiếu đến các khóa chính của Cục bảng và Bảo hiểm bàn. Tương tự, Employee_Office bảng tra cứu sẽ có hai khóa ngoại tham chiếu đến khóa chính của Nhân viên Văn phòng bảng.

Thêm nhiều khóa ngoại với SQL Server

Sơ đồ sau đây cho thấy lược đồ cơ sở dữ liệu mà bạn sẽ triển khai cho ví dụ đơn giản của chúng tôi:

Tại đây, bạn có thể thấy rằng cơ sở dữ liệu có năm bảng: Nhân viên , Bảo hiểm , Cục , Văn phòng Employee_Office .

Vụ Nhân viên các bảng có mối quan hệ một-nhiều. Tương tự, Bảo hiểm Nhân viên các bảng cũng có mối quan hệ một-nhiều. Văn phòng và bảng Nhân viên có mối quan hệ nhiều-nhiều được triển khai bằng cách sử dụng hai mối quan hệ một-nhiều với Employee_Office bảng tra cứu.

Nhân viên bảng có hai khóa ngoại, Dep_Id Insur_Id tham chiếu đến các khóa chính (Id) của Cục Bảo hiểm bảng tương ứng.

Bây giờ chúng ta hãy thực thi Tập lệnh SQL tạo cơ sở dữ liệu được mô tả.

Bắt đầu bằng cách tạo bảng mà không có bất kỳ khóa ngoại nào. Nếu bạn cố gắng tạo bảng có khóa ngoại tham chiếu đến các bảng khác chưa được tạo, bạn sẽ gặp lỗi.

Trong lược đồ cơ sở dữ liệu của chúng tôi, Vụ , Tổ chức Văn phòng bảng không có khóa ngoại. Tập lệnh sau tạo cơ sở dữ liệu giả có tên Tổ chức và thêm ba bảng trong đó: Cục , Bảo hiểm Văn phòng .

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
)

Bạn có thể sử dụng TÀI LIỆU THAM KHẢO CHỦ YẾU NƯỚC NGOÀI ràng buộc để thực hiện một mối quan hệ khóa ngoài trong SQL Server. Chỉ định tên bảng. Sau đó, chỉ định trong ngoặc đơn tên cột cho khóa ngoại tham chiếu đến nó.

Tập lệnh sau tạo Nhân viên bảng có khóa ngoại Dep_Id Insur_Id cột Id tham chiếu đó trong Bộ phận Bảo hiểm bảng tương ứng.

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

Cuối cùng, tập lệnh sau tạo Employee_Office bảng có hai khóa ngoại 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)
)

Chèn các bản ghi vào các bảng có nhiều khóa ngoại

Để chèn bản ghi vào bảng có nhiều khóa ngoại, trước tiên bạn nên tạo bản ghi tương ứng trong bảng được tham chiếu bởi khóa ngoại trong bảng gốc.

Trên thực tế, để chèn bản ghi vào Nhân viên , trước tiên chúng ta phải tạo các bản ghi tương ứng trong Bộ phận Bảo hiểm những cái bàn. Đó là bởi vì Nhân viên bảng chứa các khóa ngoại tham chiếu đến Cục Bảo hiểm bảng.

Trước tiên, chúng tôi cố gắng thêm bản ghi vào Nhân viên bảng mà không chỉ định khóa ngoại tham chiếu đến Cục Nhân viên bảng.

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

Bạn sẽ thấy lỗi sau. Điều này xảy ra do số lượng giá trị được chỉ định không khớp với số cột trong Nhân viên bảng.

Hãy thử thêm một số giá trị giả cho Dep_Id Insur_Id cột (khóa ngoài):

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

Bạn sẽ thấy lỗi sau vì bảng Phòng ban và Bảng bảo hiểm không có các bản ghi có id 2 và 1 tương ứng.

Bây giờ chúng ta hãy chèn hồ sơ vào Bộ phận , Bảo hiểm Văn phòng bảng:

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

Kể từ khi Cục Bảo hiểm bảng hiện có các bản ghi với Id 2 và 1, bạn có thể chèn bản ghi vào Nhân viên bảng với các giá trị khóa ngoại tương ứng như được hiển thị bên dưới:

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

Chèn một số bản ghi vào Employee_Office bàn. Nhưng trước đó, hãy xem các giá trị cột Id trong bảng Nhân viên:

SELECT * FROM Employee

Nhân viên cột chứa các bản ghi có giá trị Id là 2 và 3. Bạn có thể chèn các bản ghi vào Nhân viên_ Văn phòng bảng trong đó Emp_Id cột chứa 2 hoặc 3 và Office_Id cột chứa 1 hoặc 2.

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

Chọn bản ghi từ các bảng có nhiều phím ngoại

Để chọn bản ghi từ các bảng có Nhiều khóa ngoại, bạn cần có các THAM GIA.

Tập lệnh sau trả về các giá trị của Tên Giới tính các cột từ Nhân viên bảng và Tên các cột từ Cục và Bảng bảo hiểm. Kể từ khi Nhân viên bảng chứa hai khóa ngoại, bạn phải sử dụng hai THAM GIA TRÁI tuyên bố:

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

Theo cách tương tự, bạn có thể chọn các giá trị của Tên Giới tính các cột từ Nhân viên bảng và Tên từ Văn phòng bảng sử dụng hai câu lệnh LEFT JOIN trên bảng tra cứu 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

XÓA bản ghi khỏi các bảng có nhiều khóa ngoại

Bạn có thể xóa bản ghi khỏi bảng có nhiều khóa ngoại. Tuy nhiên, hãy đảm bảo rằng bảng không được tham chiếu bởi khóa ngoại trong cột khác.

Ví dụ:bạn không nên xóa hồ sơ khỏi Bộ phận bảng được tham chiếu bởi Emp_Id khóa ngoại trong Nhân viên bàn. Đây là một ví dụ:

DELETE FROM Department WHERE Id = 1

Kể từ bản ghi với Id 1 trong Cục bảng được tham chiếu bởi Emp_Id trong cột Nhân viên bảng, bạn không thể xóa nó như đã đề cập trong lỗi ở trên. Trước tiên, bạn phải xóa tất cả các bản ghi khỏi Nhân viên bảng trong đó Emp_Id là 1.

Bảng Nhân viên chỉ chứa 1 bản ghi như vậy (với giá trị Id là 3). Hãy thử xóa bản ghi đó bằng truy vấn sau:

DELETE FROM Employee WHERE Id = 3

Bạn sẽ thấy lỗi xảy ra do Employee_Office chứa một bản ghi trong đó Emp_Id cột khóa ngoại chứa 3 bản ghi. Do đó, bạn sẽ cần xóa bản ghi đó trước:

Tập lệnh sau xóa bản ghi bằng Emp_Id giá trị 3 từ Employee_Office bảng.

DELETE FROM Employee_Office WHERE Emp_Id = 3

Cuối cùng, tập lệnh sau sẽ xóa bản ghi có các giá trị Id là 1 khỏi Nhân viên Cục cột.

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

Kết luận

Do đó, chúng tôi đã kiểm tra việc thêm nhiều khóa ngoại trong bảng SQL Server bằng cách sử dụng các truy vấn SQL để thêm khóa ngoại. Hy vọng rằng những ví dụ thực tế được sử dụng trong bài viết cũng giúp bạn nắm vững chủ đề này.

Khi bạn xử lý các khóa ngoại và phụ thuộc bảng để thực hiện các tác vụ công việc, việc sử dụng các công cụ phần mềm để đơn giản hóa các quy trình cũng rất hữu ích. Rất khuyến khích là Sơ đồ cơ sở dữ liệu trực quan như một giải pháp chuyên dụng để xem tất cả các phụ thuộc giữa các bảng. Ngoài ra, bạn có thể tạo tài liệu chính xác cho toàn bộ cơ sở dữ liệu, bất kể độ phức tạp của nó với tính năng Trình lập tài liệu cơ sở dữ liệu.

Cả hai công cụ này đều nhằm mục đích giảm tải thủ công, tự động hóa các quy trình và tăng tốc hiệu suất để giảm bớt gánh nặng cho bạn.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Sử dụng Trình hướng dẫn Khám phá Siêu dữ liệu

  2. So sánh SQL, trình tạo truy vấn và ORM

  3. Người Thiết Kế Cơ Sở Dữ Liệu Cần Những Kỹ Năng Và Kiến Thức Gì?

  4. Lập trình cơ sở dữ liệu Python với SQL Express cho người mới bắt đầu

  5. Giải thích về bí danh SQL