Các loại khóa khác nhau trong DBMS:
- Khóa ứng viên (Candidate Key): Tập các khóa tối thiểu có thể xác định duy nhất bất kỳ hàng dữ liệu nào trong bảng.
- Khóa chính (Primary Key): Được chọn từ một trong các khóa ứng viên và trở thành khóa xác định của bảng. Xác định duy nhất bất kỳ hàng dữ liệu nào của bảng.
- Siêu khóa (Super Key): Siêu tập của khóa chính. Chứa tập thuộc tính, bao gồm khóa chính, có thể xác định duy nhất bất kỳ hàng dữ liệu nào.
- Khóa tổ hợp (Composite Key): Nếu bất kỳ thuộc tính đơn lẻ nào không thể làm khóa (không xác định duy nhất hàng), kết hợp hai hoặc nhiều thuộc tính để tạo khóa.
- Khóa phụ (Secondary Key): Chỉ một khóa ứng viên được chọn làm khóa chính. Các khóa còn lại gọi là khóa phụ.
- Khóa ngoại (Foreign Key): Giá trị thuộc tính trong một bảng đóng vai trò khóa chính trong bảng khác. Khóa ngoại hữu ích liên kết hai bảng. Dữ liệu nhập vào cột khóa ngoại phải cẩn thận, vì dữ liệu sai có thể vô hiệu hóa quan hệ giữa hai bảng.
Ví dụ giải thích các khóa khác nhau:
<STUDENT>
| Student_Number | Student_Name | Student_Phone | Subject_Number |
|---|---|---|---|
| 1 | Andrew | 6615927284 | 10 |
| 2 | Sara | 6583654865 | 20 |
| 3 | Harry | 4647567463 | 10 |
<SUBJECT>
| Subject_Number | Subject_Name | Subject_Instructor |
|---|---|---|
| 10 | DBMS | Korth |
| 20 | Algorithms | Cormen |
| 30 | Algorithms | Leiserson |
<ENROLL>
| Student_Number | Subject_Number |
|---|---|
| 1 | 10 |
| 2 | 20 |
| 3 | 10 |
Các Siêu khóa (Super Keys) trong bảng <Student>:
{Student_Number} {Student_Phone} {Student_Number,Student_Name} {Student_Number,Student_Phone} {Student_Number,Subject_Number} {Student_Phone,Student_Name} {Student_Phone,Subject_Number} {Student_Number,Student_Name,Student_Phone} {Student_Number,Student_Phone,Subject_Number} {Student_Number,Student_Name,Subject_Number} {Student_Phone,Student_Name,Subject_Number}
Các Siêu khóa trong <Subject>:
{Subject_Number} {Subject_Number,Subject_Name} {Subject_Number,Subject_Instructor} {Subject_Number,Subject_Name,Subject_Instructor} {Subject_Name,Subject_Instructor}
Siêu khóa trong <Enroll>:
{Student_Number,Subject_Number}
Khóa ứng viên (Candidate Key) trong <Student>: {Student_Number} hoặc {Student_Phone}
Khóa ứng viên trong <Subject>: {Subject_Number} hoặc {Subject_Name,Subject_Instructor}
Khóa ứng viên trong <Enroll>: {Student_Number, Subject_Number}
Khóa chính (Primary Key) trong <Student>: {Student_Number}
Khóa chính trong <Subject>: {Subject_Number}
Khóa chính trong <Enroll>: {Student_Number, Subject_Number}
Khóa tổ hợp (Composite Key) trong <Enroll>: {Student_Number, Subject_Number}
Khóa phụ (Secondary Key) trong <Student>: {Student_Phone}
Khóa phụ trong <Subject>: {Subject_Name,Subject_Instructor}
{Subject_Number} là Khóa ngoại của <Student> và Khóa chính của <Subject>.