Khóa ngoại là gì

Các khoá chính & khóa ngoại là hai loại ràng buộc có thể được sử dụng để thực thi vẹn toàn dữ liệu trong các bảng SQL Server & đây là những đối tượng DataBase trọng yếu.

Bạn đang xem: Khóa ngoại là gì

Trong SQL Server, có hai khóa – khóa chính & khoá ngoại hình như giống nhau, nhưng thực tiễn cả hai đều khác nhau về các chức năng & hành vi. Các khoá chính & khóa ngoại là hai loại ràng buộc có thể được sử dụng để thực thi vẹn toàn dữ liệu trong các bảng SQL Server & đây là những đối tượng DataBase trọng yếu.

Trong bài này, tôi mong muốn chia sẻ sự độc đáo trung tâm khóa chính & khoá ngoại.

1. Khóa chính là gì

Khóa chính (hay ràng buộc khóa chính) được sử dụng để định danh duy nhất mỗi record trong table của DataBase.

Không những thế, nó còn dùng để cài đặt quan hệ 1-n (hay ràng buộc tham chiếu) giữa hai table trong DataBase.

Dữ liệu (value) của field khóa chính cần phải có tính duy nhất. & không chứa các giá trị Null.

Mỗi table nên chỉ có một khóa chính, khóa chính có thể tạo thành từ nhiều field của table.

2. Khóa ngoại là gì

Khóa ngoại của một table được coi như con trỏ trỏ tới khóa chính của table khác.

Nếu trường MaSV của table DiemSV được sử dụng để tạo ràng buộc tham chiếu đến table HSSV, thông qua khóa chính là MaSV thì MaSV của table DiemSV được gọi là khóa ngoại của bảng này. Đây cũng chính là nguyên nhân mà ta nói, khóa ngoại được coi như con trỏ trởi tới khóa chính.

Xem Thêm  CƠ SỞ DỮ LIỆU DROP của MySQL - cách xóa cơ sở dữ liệu

Để tinh thông hơn về ý nghĩa sử dụng của khóa chính, khóa ngoại tất cả chúng ta hãy xét chẳng hạn sau: Giả sử DataBase QLDiemSV có hai table: HSSV & DiemSV như sau:

Table HSSV gồm 6 field, trong đó MaSV được chọn làm khóa chính của table này.

Table DiemSV gồm 6 field, trong đó STT là khóa chính & MaSV được chọn làm khóa ngoại của table này.

*

Như thế, hai table HSSV & DiemSV quan hệ dữ liệu với nhau thông qua field MaSV của mỗi table (đây là quan hệ 1 – ɳ). Hay nói cách khác, ràng buộc tham chiếu đã được tạo giữa hai table (từ table DiemSV đến table HSSV).

Với ràng buộc này thì, việc người tiêu dùng vô tình hay cố tình tàn phá các link sẽ bị ngăn chặn. &, người tiêu dùng cũng chẳng thể nhập vào cột khóa ngoại một giá trị mà giá trị đó không hiện ra ở cột khóa chính mà khóa này trỏ tới (chẳng thể nhập điểm cho một sinh viên, vào table DiemSV, mà mã của họ không hiện ra ở cột MaSV ở table HSSV).

3. Cài đặt khóa chính

Để tạo khóa chính ngay trong lúc tạo table ta có thể sử dụng câu lệnh SQL Create Table như sau:

(MaSV varchar (8) NOT NULL,Holot varchar(20), Ten varchar(8),NgaySinh Date, MaLop varchar(8) NOT NULL,Lienhe varchar(11) NOT NULL,PRIMARY KEY (MaSV));Câu lệnh này dùng để tạo table HSSV, cùng lúc chỉ định field MaSV làm khóa chính cho nó.

Trong trường hợp khóa chính được thành lập từ nhiều field & ta cần đặt tên cho ràng buộc khóa này thì có thể sử dụng câu lệnh Create Table như sau:

(MaSV varchar (8) NOT NULL,Holot varchar(20), Ten varchar(8),NgaySinh DATE, MaLop varchar(8) NOT NULL,Lienhe varchar(11) NOT NULL,CONSTRAINT Ma PRIMARY KEY (MaSV, MaLop));Vậy khóa chính table này được thành lập từ hai field: MaSV & MaLop & tên của ràng buộc này là Ma.

Xem Thêm  Cách tạo bố cục hai cột - cách tạo cột trong html

Tìm hiểu thêm: Khối Lượng Là Gì – & Khối Lượng Riêng Là Gì

3.1 Tạo khóa chính cho table đã tạo

Sử dụng câu lệnh sau:

ALTER TABLE HSSV ADD PRIMARY KEY (MaSV)

Hoặc:

ALTER TABLE HSSV ADD CONSTRAINT Ma PRIMARY KEY (MaSV, MaLop)

Cụ thể, trong trường hợp này các field MaSV, MaLop phải đã được khai báo ràng buộc NOT NULL (trng khi tạo table).

3.2 Xóa khóa chính

Sử dụng câu lệnh sau:

ALTER TABLE HSSV DROP PRIMARY KEY;

Hoặc:

ALTER TABLE HSSV DROP CONSTRAINT Ma

4. Cài đặt khóa ngoại

Để tạo khóa ngoại ngay trong lúc tạo table ta có thể sử dụng câu lệnh SQL Create Table như sau:

(STT INT NOT NULL AUTO_INCREMENT,MaSV varchar(8) NOT NULL,MonHoc varchar(6) NOT NULL,HKI, HKII, ĐTB_Nam INT,PRIMARY KEY (STT),FOREIGN KEY (MaSV) REFERENCES HSSV(MaSV))Câu lệnh này: Tạo table DiemSV gồm 6 field, trong đó khóa chính là field STT & field khóa ngoại là MaSV. Table này tạo ràng buộc tham chiếu đến table HSSV thông qua field MaSV.

Dạng khác:

(STT INT NOT NULL AUTO_INCREMENT,MaSV varchar(8) NOT NULL,MonHoc varchar(6) NOT NULL,HKI, HKII, ĐTB_Nam INT,PRIMARY KEY (STT),CONSTRAINT Ma FOREIGN KEY (MaSV) REFERENCES HSSV(MaSV))Khi cần đặt tên cho ràng buộc khóa ngoại & khóa ngoại được tạo dựng từ nhiều field thì ta phải sử dụng câu lệnh Create Table theo dạng này.

4.1 Tạo khóa ngoại cho table đã tạo

Chẳng hạn:

REFERENCES HSSV(MaSV)Hoặc:

FOREIGN KEY (MaSV) REFERENCES HSSV(MaSV)Câu lệnh này được sử dụng trong trường hợp cần đặt tên cho ràng buộc khóa ngoại & khóa ngoại được tạo dựng từ nhiều field.

Xem Thêm  Python SciPy là gì và làm thế nào để sử dụng nó? - python scipy là gì

4.2 Xóa khóa ngoại

Chẳng hạn:

ALTER TABLE DiemSV DROP FOREIGN KEY Ma

Câu lệnh MySQL ALTER được sử dụng rất thông dụng trong các trường hợp biến đổi tên của table, tên của field hoặc thêm/xóa các field trong một table nào đó. Chính vì như vậy, tất cả chúng ta sẽ trở lại câu lệnh này ở các bài sau.

5. Bảng so sánh

Khóa chínhKhóa ngoại

Khóa đúng đắn định duy nhất một bản ghi trong bảng.
Khóa ngoại là một trường trong bảng & là khóa chính trong một bảng khác.

Khóa chính không chấp thuận các giá trị rỗng.
Khóa ngoại có thể chấp thuận nhiều giá trị rỗng.

Theo mặc định, khoá chính là chỉ mục được nhóm & dữ liệu trong bảng DataBase được tổ chức theo thứ tự của dãy chỉ mục nhóm.
Khóa ngoại không auto tạo thành một chỉ mục, nhóm hoặc không nhóm. Bạn có thể tự tạo một chỉ mục trên khoá ngoại.

Tất cả chúng ta chỉ có thể có một khóa chính trong một bảng.
Tất cả chúng ta có thể có nhiều khoá ngoại trong một bảng.

6. Kết luận

Tất cả chúng ta chỉ sử dụng các cách trên để tạo khóa chính trong MySQL & không những có ở MySQL mà ở SQL Server cũng có cú pháp tương đương vì chúng đều sử dụng từ ngữ Ƭ-SQL.

Tìm hiểu thêm: Cre Là Gì – Là Viết Tắt Của Từ Gì Trên Fb

Thông thường khi làm việc với các vận dụng website thì ta hiếm khi sử dụng khóa ngoại bởi vì sẽ rất chậm, chính vì như thế người ta sẽ phấn đấu kiến trúc DataBase làm sao tối ưu để không tồn tại khóa ngoại.

Chuyên đề: Hỏi Đáp

Viết một bình luận