Khác biệt giữa khóa chính và khóa ngoại trong SQL

Trong hệ quản trị cơ sở dữ liệu SQL Server, khóa chính và khóa ngoại là hai loại ràng buộc quan trọng để đảm bảo tính toàn vẹn dữ liệu trong các bảng. Mặc dù chúng có vẻ giống nhau, nhưng thực tế khác biệt về tính năng và hành vi. Trong bài viết này, chúng ta sẽ tìm hiểu sự khác biệt chính giữa khóa chính và khóa ngoại.

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

  • Khóa chính là một ràng buộc được sử dụng để định danh duy nhất mỗi bản ghi trong bảng cơ sở dữ liệu.
  • Ngoài ra, khóa chính còn thiết lập quan hệ 1-n (ràng buộc tham chiếu) giữa hai bảng.
  • Dữ liệu của trường khóa chính phải là duy nhất và không được chứa giá trị Null.
  • Mỗi bảng chỉ nên có một khóa chính, nhưng khóa chính có thể được tạo từ nhiều trường của bảng.

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

  • Khóa ngoại của một bảng được coi như một con trỏ trỏ tới khóa chính của bảng khác.
  • Ví dụ, nếu trường “MaSV” của bảng “DiemSV” được sử dụng để tạo ràng buộc tham chiếu đến bảng “HSSV” thông qua khóa chính là “MaSV”, thì trường “MaSV” của bảng “DiemSV” được gọi là khóa ngoại. Điều này chính là lý do mà ta nói khóa ngoại được coi như một con trỏ trỏ tới khóa chính.
  • Khóa ngoại ngăn chặn việc xóa hoặc thay đổi dữ liệu của khóa chính mà nó trỏ tới. Điều này giúp đảm bảo tính toàn vẹn của dữ liệu.

3. Thiết lập khóa chính

  • Để tạo khóa chính khi tạo bảng, ta có thể sử dụng câu lệnh CREATE TABLE như sau: (chúng ta chỉ xem ví dụ về tạo khóa chính từ một trường)
    CREATE TABLE TenBang (
      Truong1 Type1,
      Truong2 Type2,
      ...
      CONSTRAINT TenRangBuoc PRIMARY KEY (Truong1)
    );
  • Trong trường hợp khóa chính được tạo từ nhiều trường và muốn đặt tên cho ràng buộc, chúng ta sử dụng câu lệnh CREATE TABLE như sau:
    CREATE TABLE TenBang (
      Truong1 Type1,
      Truong2 Type2,
      ...
      CONSTRAINT TenRangBuoc PRIMARY KEY (Truong1, Truong2)
    );
  • Để tạo khóa chính cho bảng sau khi đã tạo, ta sử dụng câu lệnh ALTER TABLE như sau:
    ALTER TABLE TenBang ADD PRIMARY KEY (Truong1);

    hoặc

    ALTER TABLE TenBang ADD CONSTRAINT TenRangBuoc PRIMARY KEY (Truong1, Truong2);
  • Để xóa khóa chính, chúng ta sử dụng câu lệnh ALTER TABLE như sau:
    ALTER TABLE TenBang DROP PRIMARY KEY;

4. Thiết lập khóa ngoại

  • Để tạo khóa ngoại khi tạo bảng, ta sử dụng câu lệnh CREATE TABLE như sau: (chỉ xem ví dụ về tạo khóa ngoại từ một trường)
    CREATE TABLE TenBang (
      Truong1 Type1,
      Truong2 Type2,
      ...
      FOREIGN KEY (Truong1) REFERENCES TenBangKhac (TruongKhac)
    );
  • Trong trường hợp muốn đặt tên cho ràng buộc khóa ngoại và tạo khóa ngoại từ nhiều trường, chúng ta sử dụng câu lệnh CREATE TABLE như sau:
    CREATE TABLE TenBang (
      Truong1 Type1,
      Truong2 Type2,
      ...
      CONSTRAINT TenRangBuoc FOREIGN KEY (Truong1, Truong2) REFERENCES TenBangKhac (TruongKhac1, TruongKhac2)
    );
  • Để tạo khóa ngoại cho bảng sau khi đã tạo, ta sử dụng câu lệnh ALTER TABLE như sau:
    ALTER TABLE TenBang ADD FOREIGN KEY (Truong1) REFERENCES TenBangKhac (TruongKhac);

    hoặc

    ALTER TABLE TenBang ADD CONSTRAINT TenRangBuoc FOREIGN KEY (Truong1, Truong2) REFERENCES TenBangKhac (TruongKhac1, TruongKhac2);
  • Để xóa khóa ngoại, chúng ta sử dụng câu lệnh ALTER TABLE như sau:
    ALTER TABLE TenBang DROP FOREIGN KEY TenRangBuoc;

5. Bảng so sánh

Khóa chính Khóa ngoại
Xác định duy nhất một bản ghi trong bảng Là trường trong bảng và là khóa chính trong một bảng khác
Khóa chính không chấp nhận các giá trị rỗng Khóa ngoại có thể chấp nhận nhiều giá trị rỗng
Khóa chính tự động tạo ra một chỉ mục, nhóm và dữ liệu trong bảng được tổ chức theo thứ tự của chỉ mục nhóm Khóa ngoại không tự động tạo ra một chỉ mục, nhóm hoặc không nhóm. Có thể tự tạo chỉ mục trên khóa ngoại
Chỉ có một khóa chính trong một bảng Có thể có nhiều khóa ngoại trong một bảng

6. Tổng kết

  • Trên đây là cách tạo khóa chính và khóa ngoại trong SQL Server. Tuy nhiên, khi làm việc với các ứng dụng web, chúng ta ít sử dụng khóa ngoại vì tốn nhiều thời gian. Thay vào đó, chúng ta nên thiết kế cơ sở dữ liệu sao cho tối ưu và tránh sử dụng khóa ngoại nếu không cần thiết.
FEATURED TOPIC