Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> SQL

Secondary Key (Khóa phụ / Khóa thay thế) trong RDBMS


Secondary Key (Khóa phụ / Alternate Key) là **Candidate Key (Khóa ứng viên) KHÔNG được chọn làm Primary Key**. Nó vẫn đảm bảo tính duy nhất (unique) và có thể dùng để truy vấn, index, nhưng không phải khóa chính đại diện cho thực thể.

Định nghĩa chính xác

  • Candidate Key: Thuộc tính (hoặc tập hợp) đủ điều kiện làm PK (duy nhất, tối thiểu, không NULL).
  • Primary Key: Candidate Key được **chọn** làm đại diện chính.
  • Secondary Key (Alternate Key): Các Candidate Key **còn lại** sau khi chọn PK.

⚠️ Lưu ý quan trọng: Secondary Key **KHÔNG PHẢI** Foreign Key. Foreign Key tham chiếu PK của bảng khác. Secondary Key là khóa duy nhất của **chính bảng đó**.

Ví dụ 1: Bảng Student

Student_ID Student_Enroll Student_Name Student_Age Student_Email
0969122717Manish25aaa@gmail.com
0559122655Manan23abc@gmail.com
0679122699Shreyas28pqr@gmail.com

Phân tích:

  • Candidate Keys: {Student_ID}, {Student_Enroll}, {Student_Email} (mỗi cái đều duy nhất, không NULL, tối thiểu).
  • Chọn Student_ID làm Primary Key.
  • Secondary Keys: Student_Enroll và Student_Email.

Ví dụ 2: Bảng Employee

Employee_ID Employee_No Employee_Name Employee_Email Employee_Dept
0989E7897Jacobjacob@example.comFinance
0777E8768Annaanna@example.comHR
0656E8789Tomtom@example.comOperations

Phân tích:

  • Candidate Keys: Employee_ID, Employee_No, Employee_Email.
  • Chọn Employee_ID làm PK.
  • Secondary Keys: Employee_No, Employee_Email.

So sánh: Secondary Key vs Foreign Key vs Primary Key

Đặc điểmPrimary KeySecondary KeyForeign Key
Số lượng/bảng10 hoặc nhiều0 hoặc nhiều
Duy nhất (Unique)CóCóKhông (có thể trùng)
Cho phép NULLKhôngThường không (unique constraint)Có (nếu không NOT NULL)
Vai tròĐịnh danh chínhĐịnh danh thay thế, tìm kiếmLiên kết bảng khác
Tham chiếuKhôngKhôngPK của bảng khác

Ứng dụng thực tế

  • Tạo **Unique Index** trên Secondary Key để tăng tốc truy vấn (tìm kiếm theo email, số CMND, mã nhân viên...).
  • Dùng trong **WHERE clause**, JOIN (khi join trên alternate key).
  • Hỗ trợ **Business Key** trong Data Warehouse (Natural Key).
  • Dùng cho ON CONFLICT (secondary_key) DO UPDATE (PostgreSQL upsert).

Best Practice

  1. Luôn khai báo UNIQUE CONSTRAINT hoặc UNIQUE INDEX cho Secondary Key.
  2. Đặt tên constraint rõ ràng: UK_student_email, UK_employee_no.
  3. Không dùng Secondary Key làm Foreign Key target (dùng PK).
  4. Nếu Secondary Key thay đổi (ví dụ đổi email), cần cập nhật cẩn thận (cascade hoặc application logic).