Giá trị khóa phải phân biệt được bản ghi
**Khóa** là một trường hoặc một nhóm trường có giá trị giúp phân biệt từng bản ghi trong bảng. **Khóa chính** là khóa được chọn để định danh bản ghi. Trong CSDL vận hành, giá trị khóa chính phải **không trùng và không để trống**.
Trong bảng Bản nhạc đã học, `K01`, `K02`, `K03` là ba **Mã bài** khác nhau, nên Mã bài là khóa chính phù hợp. **Mã tác giả** không làm khóa cho bảng này: cả K01 và K03 đều mang `T01`. Tên bài hiện khác nhau ở ba hàng, nhưng nếu thư viện cho phép hai tác giả có bài trùng tên, chỉ dựa vào Tên bài sẽ không đủ phân biệt về lâu dài.
Chọn khóa theo quy tắc quản lí
Một bảng có thể có nhiều cách định danh hợp lệ. Chọn khóa chính ngắn và ổn định thường thuận tiện hơn khi bảng khác cần tham chiếu tới nó. Quy tắc “mỗi bản ghi có một Mã bài riêng” phải được giữ cả khi thêm dữ liệu mới; ba hàng đang khác mã chưa tự chứng minh hệ thống sẽ luôn tránh trùng.
Ví dụ, nếu thêm bài thứ tư cũng dùng mã `K02`, ta không còn biết `K02` chỉ bản ghi nào. Nếu thêm bài khác cùng tác giả `T01` nhưng mã mới `K04`, khóa Mã bài vẫn phân biệt được cả bốn bản ghi. Khóa chính dùng để **nhận diện** hàng; không có quy tắc rằng hàng phải tự xếp theo thứ tự mã.
Bài luyện
Với quy tắc mỗi bài có một mã riêng, trường nào phù hợp làm khóa chính của bảng Bản nhạc?
T01 xuất hiện ở K01 và K03.
Quy tắc đã cho phép tên trùng.
Mã bài khác nhau và được quy định riêng cho từng bài.
Vị trí cột không quyết định khóa.
Lời giải
Mỗi bản nhạc được cấp một Mã bài không trùng. Mã tác giả có thể lặp vì một người viết nhiều bài; Tên bài có thể trùng theo quy tắc nêu trong đề.
Bài luyện
Thêm một bản nhạc mới với Mã bài K02, trong khi K02 đã có. Điều gì xảy ra với quy tắc khóa chính?
Khóa chính vẫn phải phân biệt hàng dù tên khác.
K02 đã định danh một hàng cũ.
Vấn đề là trùng mã, không phải thứ tự.
Không tự thay khóa chính khi nhập dữ liệu.
Lời giải
Khóa chính Mã bài phải có giá trị riêng ở mỗi bản ghi. Hai hàng cùng K02 sẽ không thể phân biệt bằng mã ấy, nên bản mới phải dùng mã khác.
Bài luyện
Vì sao Mã tác giả không làm khóa chính cho bảng Bản nhạc trong ví dụ?
Hai hàng khác nhau có cùng T01, nên trường này không duy nhất ở Bản nhạc.
Mã dạng văn bản vẫn có thể làm khóa.
Số hàng ở bảng kia không quyết định tính duy nhất tại đây.
Khóa chính không bắt buộc là tên người.
Lời giải
K01 và K03 cùng có Mã tác giả T01. Một giá trị T01 không xác định duy nhất một bản nhạc, nên trường này không là khóa của bảng Bản nhạc.
Đang học