Cột (hoặc các cột) của khóa chính phải KHÔNG ĐẦY ĐỦ. Một bản ghi không thể được xác định duy nhất bởi một NULL. Vì vậy, các cột ID trên phần cuối được tham chiếu của khóa ngoại phải được định nghĩa là KHÔNG ĐẦY ĐỦ.
Tuy nhiên, đó là một quyết định thiết kế hợp pháp đối với mối quan hệ khóa ngoại là tùy chọn và cách thể hiện điều đó là làm cho phần cuối tham chiếu của khóa là tùy chọn, tức là cho phép NULL.
Theo thuật ngữ mô hình hóa dữ liệu, những gì bạn đã mô tả là một vòng cung (độc quyền):"một bảng ... có hai hoặc nhiều khóa ngoại trong đó một và chỉ một trong số chúng có thể khác rỗng." Trong mô hình logic, các cung tròn hoàn toàn có thể chấp nhận được, nhưng có nhiều ý kiến ủng hộ việc triển khai chúng dưới dạng các bảng riêng biệt. Trong trường hợp của bạn, đó sẽ là Sale
chung chung bảng cộng với hai bảng loại phụ, VehicleSale
và PieceSale
.
Ưu điểm của việc triển khai bảng riêng là:
- dễ dàng hơn để thực thi các ràng buộc khóa ngoại;
- dễ dàng hơn để thêm các cột bổ sung liên quan đến (giả sử) doanh số bán xe không áp dụng cho doanh số bán lẻ;
- dễ dàng mở rộng mô hình hơn với các loại phụ bổ sung;
- mô hình dữ liệu rõ ràng hơn, có thể đơn giản hóa việc phát triển ứng dụng.
Tuy nhiên, lợi thế không phải một sớm một chiều. Mặc dù khá dễ dàng để đảm bảo rằng một Sale
áp dụng cho VehicleSale
hoặc PieceSale
nhưng không phải cả hai, thực thi quy tắc Sale
phải có một hồ sơ trẻ em thực sự trở nên đáng sợ.
Vì vậy, lời khuyên phổ biến là một vòng cung độc quyền là nhầm lẫn, và nó thường là lời khuyên tốt. Nhưng nó không rõ ràng như một số nhận định.