Khi tên người có thể trùng
Nếu hai người cùng tên, riêng tên không đủ phân biệt. Ta đã có `idNhacsi` và `idCasi` làm mã riêng cho từng người; có thể thêm `ngaySinh` vào **cả** bảng nhacsi và casi khi bài toán cần quản lí thông tin ấy. Ngày sinh giúp đối chiếu, nhưng cũng có thể trùng; khóa chính vẫn là mã. Không thu ngày sinh thật của học sinh để làm bài tập.
Nếu muốn lưu nơi sinh theo tỉnh/thành phố, có thể thêm bảng `tinh(idTinh, tenTinh)` rồi đặt `idTinhNoiSinh` ở **cả** nhacsi và casi, tham chiếu `tinh.idTinh`. Có thể lưu tên tỉnh trực tiếp ở mỗi người nếu phạm vi rất nhỏ, nhưng sẽ lặp tên và khó sửa đồng bộ. Phải xác định yêu cầu quản lí trước khi thêm bảng, trường hoặc quy tắc. Ví dụ này dùng địa danh hư cấu, không coi mã hay danh sách minh họa là dữ liệu hành chính hiện hành.
Mô hình phường/xã thuộc tỉnh/thành phố
Theo yêu cầu vận dụng của **trang SGK đã cập nhật**, chỉ xét hai cấp: `tinh(idTinh, tenTinh)` và `xa(idXa, tenXa, idTinh)`. Ví dụ giả T01 = Tỉnh Mẫu A, T02 = Thành phố Mẫu B; X01 là Phường Mẫu thuộc T01, X02 là Xã Mẫu thuộc T01, X03 là Phường Khác thuộc T02. `xa.idTinh` là khóa ngoại, giúp biết mỗi hàng phường/xã thuộc tỉnh/thành phố nào trong dữ liệu ví dụ.
Nếu `idXa` duy nhất **toàn bộ CSDL**, dùng `idXa` làm khóa chính. Nếu chỉ đánh số xã từ 1 trong **từng tỉnh**, mã số xã có thể lặp ở tỉnh khác, lúc ấy có thể dùng cặp `(idXa, idTinh)` làm khóa chính. Tên một phường/xã có thể giống nơi khác, nên không suy chỉ từ tên mà biết thuộc tỉnh nào. Đây là bài thiết kế quan hệ, không phải bản đồ hay danh sách địa giới thực tế.
Bài luyện
Muốn quản lí thêm ngày sinh để phân biệt người cùng tên trong cả hai nhóm, cần sửa bảng nào?
Ca sĩ cũng có thể trùng tên và cần ngày sinh.
Nhạc sĩ cũng có thể trùng tên và cần ngày sinh.
banthuam không là bảng thông tin cá nhân của hai nhóm.
Hai nhóm được lưu ở hai bảng riêng.
Lời giải
Thêm trường ngày sinh ở cả nhacsi và casi khi yêu cầu quản lí bao gồm cả nhạc sĩ lẫn ca sĩ. Mã người vẫn là khóa chính.
Bài luyện
Trong mô hình tỉnh–phường/xã của ví dụ, xa.idTinh dùng để làm gì?
Mã tham chiếu không tự đếm số địa bàn.
Đây là khóa ngoại sang tinh.idTinh.
Tên phường/xã vẫn cần trường tenXa.
Mã tỉnh không biểu diễn ngày sinh.
Lời giải
xa.idTinh tham chiếu tinh.idTinh để biết hàng phường/xã trong ví dụ thuộc tỉnh/thành phố nào.
Bài luyện
Nếu idXa chỉ được đánh số từ 1 trong từng tỉnh, hai tỉnh đều có xã số 1. Khóa chính nào có thể phân biệt hai hàng?
Số 1 sẽ lặp ở hai tỉnh.
Tên xã có thể trùng và không mang mã tỉnh.
Cặp mã xã trong tỉnh và mã tỉnh phân biệt hai hàng.
Một tỉnh có nhiều phường/xã nên idTinh lặp.
Lời giải
Khi mã xã chỉ duy nhất trong phạm vi từng tỉnh, kết hợp idXa với idTinh. Nếu idXa đã duy nhất toàn CSDL thì một mình idXa đủ.
Đang học