Giả sử một bảng có 2 trường SOBH (số bảo hiểm) và HOTEN (họ tên): chọn khóa chính nào?

Trả lời nhanh

Nên chọn trường SOBH (số bảo hiểm) làm khóa chính. Khóa chính phải xác định duy nhất từng bản ghi, mà mỗi người chỉ có một số bảo hiểm riêng, còn họ tên thì có thể trùng nhau. Vì vậy HOTEN không thể làm khóa chính một cách an toàn.

Đề bài và các phương án thường gặp

Câu hỏi quen thuộc trong phần Cơ sở dữ liệu quan hệ (Tin học 12, chương trình cũ, Microsoft Access): “Giả sử một bảng có hai trường SOBH (số bảo hiểm) và HOTEN (họ tên). Nên chọn trường nào làm khóa chính?”

  • A. Chọn trường SOBH
  • B. Chọn trường HOTEN
  • C. Chọn cả hai trường SOBH và HOTEN
  • D. Chọn trường nào cũng được

Đáp án đúng: A.

Khóa chính là gì?

Khóa chính (Primary Key) là một trường, hoặc một nhóm trường, có giá trị không trùng nhau ở bất kỳ hai bản ghi nào và không được để trống. Nhờ đó hệ quản trị CSDL phân biệt được từng bản ghi.

Mẹo nhớ: khóa chính giống “số căn cước” của bản ghi – đã có số này là chỉ có đúng một bản ghi tương ứng.

Vì sao chọn SOBH?

  • Mỗi người được cấp một số bảo hiểm riêng, nên giá trị SOBH không lặp lại giữa hai người.
  • SOBH luôn có giá trị khi người đó đã tham gia bảo hiểm, đáp ứng điều kiện không để trống.
  • Tìm kiếm, sắp xếp và liên kết với bảng khác theo SOBH nhanh và chính xác hơn.

Loại trừ các phương án sai

Phương án Vì sao sai
B. HOTEN Họ tên rất dễ trùng (nhiều người cùng tên “Nguyễn Văn An”). Khi trùng, Access báo lỗi không cho nhập bản ghi thứ hai, hoặc không phân biệt được hai người.
C. Cả SOBH và HOTEN Về kỹ thuật vẫn xác định được duy nhất, nhưng thừa: chỉ riêng SOBH đã đủ. Khóa chính nên gọn nhất có thể, tránh nhập dữ liệu rườm rà.
D. Trường nào cũng được Sai vì không phải trường nào cũng có giá trị duy nhất. Phải chọn trường có tính xác định duy nhất.

Ví dụ minh họa

Ví dụ tự đặt: bảng có ba bản ghi.

SOBH HOTEN
BH001 Nguyễn Văn An
BH002 Nguyễn Văn An
BH003 Trần Thị Bình

Hai người cùng tên “Nguyễn Văn An” nhưng SOBH khác nhau. Nếu đặt HOTEN làm khóa chính thì không nhập được dòng thứ hai; đặt SOBH làm khóa chính thì cả ba dòng đều hợp lệ.

Cách đặt khóa chính trong Access

  1. Mở bảng ở chế độ Design View.
  2. Chọn trường SOBH (nhấp vào ô chọn dòng bên trái tên trường).
  3. Nhấn nút Primary Key trên thanh công cụ (biểu tượng chìa khóa).
  4. Lưu bảng. Bên cạnh SOBH xuất hiện biểu tượng chìa khóa.

Lỗi sai thường gặp

  • Chọn HOTEN vì nghĩ “tên là thứ dễ nhận ra nhất” – quên rằng tên có thể trùng.
  • Chọn nhiều trường làm khóa chính khi một trường đã đủ.
  • Chọn trường có thể để trống hoặc có giá trị thay đổi theo thời gian (như địa chỉ, số điện thoại).

Bài luyện tập

  1. Bảng HOCSINH có các trường MAHS, HOTEN, NGAYSINH, LOP. Nên chọn trường nào làm khóa chính? Đáp án: MAHS, vì mỗi học sinh có một mã riêng; HOTEN, NGAYSINH, LOP đều có thể trùng.
  2. Bảng SACH có MASACH, TENSACH, TACGIA. Vì sao không chọn TACGIA làm khóa chính? Đáp án: một tác giả có thể viết nhiều cuốn nên giá trị TACGIA lặp lại.
  3. Bảng DIEM gồm MAHS, MAMON, DIEMTB, mỗi học sinh có một điểm cho mỗi môn. Khóa chính là gì? Đáp án: cặp (MAHS, MAMON) – khóa gồm hai trường, vì riêng từng trường đều lặp lại.

Câu hỏi thường gặp

Khóa chính trong Access có được để trống không?

Không. Trường khóa chính bắt buộc phải có giá trị ở mọi bản ghi và các giá trị không được trùng nhau.

Vì sao không dùng HOTEN làm khóa chính?

Vì họ tên có thể trùng giữa nhiều người, nên không xác định duy nhất được từng bản ghi.

Một bảng có thể có hai khóa chính không?

Một bảng chỉ có một khóa chính, nhưng khóa đó có thể gồm nhiều trường kết hợp (khóa phức hợp) khi cần.

Khi nào nên chọn nhiều trường làm khóa chính?

Khi không có trường nào riêng lẻ có giá trị duy nhất, nhưng tổ hợp của chúng thì duy nhất, ví dụ cặp mã học sinh và mã môn trong bảng điểm.