Sự khác nhau giữa PRIMARY KEY và UNIQUE KEY
Khóa chính (Primary Key) và Khóa duy nhất (Unique Key) là hai khái niệm quan trọng trong thiết kế cơ sở dữ liệu quan hệ, giúp đảm bảo tính toàn vẹn và duy nhất của dữ liệu. Điểm khác biệt lớn nhất là khóa chính không cho phép giá trị NULL, trong khi khóa duy nhất cho phép một giá trị NULL. Bài viết này sẽ đi sâu vào sự khác biệt giữa hai loại khóa này.
Mục Lục
So sánh Khóa Chính và Khóa Duy Nhất
Tiêu chí | Khóa Chính (Primary Key) | Khóa Duy Nhất (Unique Key) |
---|---|---|
Công dụng | Xác định duy nhất mỗi hàng trong bảng, là định danh chính. | Xác định duy nhất một hàng, nhưng không phải là định danh chính. |
Giá trị NULL | Không chấp nhận giá trị NULL. | Chấp nhận một giá trị NULL duy nhất. |
Số lượng | Chỉ có một khóa chính duy nhất trên mỗi bảng. | Có thể có nhiều khóa duy nhất trên mỗi bảng. |
Index | Tạo chỉ mục theo nhóm (clustered index). | Tạo chỉ mục không phân cụm (non-clustered index). |
Khóa Chính (Primary Key)
Khóa chính là một cột hoặc một tập hợp các cột trong bảng, xác định duy nhất mỗi hàng trong bảng đó. Nó đóng vai trò là định danh chính, đảm bảo không có hai hàng nào có cùng giá trị khóa chính và không có giá trị khóa chính nào bị thiếu (NULL). Việc sử dụng khóa chính giúp duy trì tính toàn vẹn của dữ liệu và cho phép liên kết các bảng với nhau thông qua khóa ngoại (foreign key).
Ví dụ, xét bảng “SinhVien” với các thuộc tính như “MaSV” (Mã sinh viên), “TenSV” (Tên sinh viên), “Lop” (Lớp), “SDT” (Số điện thoại) và “CMND” (Chứng minh nhân dân).
Trong trường hợp này, “MaSV” là một lựa chọn tốt cho khóa chính vì mỗi sinh viên sẽ có một mã số duy nhất và không ai có mã số bị bỏ trống.
Khóa chính có thể được tham chiếu bởi khóa ngoại trong các bảng khác, tạo ra mối quan hệ giữa các bảng. Nó tự động tạo một chỉ mục theo nhóm, sắp xếp dữ liệu vật lý trên đĩa theo giá trị của khóa chính. Mỗi bảng chỉ có thể có một chỉ mục theo nhóm, vì dữ liệu chỉ có thể được sắp xếp theo một thứ tự duy nhất.
Khóa Duy Nhất (Unique Key)
Tương tự như khóa chính, khóa duy nhất cũng đảm bảo rằng các giá trị trong một cột hoặc một tập hợp các cột là duy nhất. Tuy nhiên, khóa duy nhất cho phép một giá trị NULL. Điều này có nghĩa là có thể có một hàng trong bảng mà giá trị của cột khóa duy nhất là không xác định. Một bảng có thể có nhiều khóa duy nhất.
Sự khác nhau giữa PRIMARY KEY và UNIQUE KEY
Tiếp tục với ví dụ bảng “SinhVien” ở trên. “CMND” có thể được chỉ định là khóa duy nhất. Mỗi sinh viên có một số chứng minh nhân dân duy nhất, nhưng không phải ai cũng có CMND (ví dụ: sinh viên nước ngoài). Trong trường hợp này, cột “CMND” có thể chứa một giá trị NULL.
Khóa duy nhất cũng có thể được tham chiếu bởi khóa ngoại. Nó tạo ra một chỉ mục không phân cụm. Chỉ mục không phân cụm chứa một con trỏ đến vị trí vật lý của dữ liệu, cho phép truy cập dữ liệu nhanh chóng mà không cần sắp xếp lại dữ liệu trên đĩa.
Tổng kết
Khóa chính và khóa duy nhất đều đảm bảo tính duy nhất của dữ liệu, nhưng có những khác biệt quan trọng:
- Số lượng: Mỗi bảng chỉ có một khóa chính, nhưng có thể có nhiều khóa duy nhất.
- Giá trị NULL: Khóa chính không chấp nhận giá trị NULL, trong khi khóa duy nhất chấp nhận một giá trị NULL.
- Loại chỉ mục: Khóa chính tạo chỉ mục theo nhóm, trong khi khóa duy nhất tạo chỉ mục không phân cụm.
Việc lựa chọn giữa khóa chính và khóa duy nhất phụ thuộc vào yêu cầu cụ thể của cơ sở dữ liệu và cách dữ liệu được sử dụng. Khóa chính thường được sử dụng để xác định duy nhất một hàng trong bảng và làm cơ sở cho các mối quan hệ với các bảng khác. Khóa duy nhất có thể được sử dụng để đảm bảo tính duy nhất của các thuộc tính khác mà không cần phải là định danh chính của bảng.