Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Khóa ngoại có thể trống không?

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ụ, VehicleSalePieceSale .

Ư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.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Trả về con trỏ tham chiếu từ một Hàm Oracle

  2. Oracle.DataAccess.Client Dependencies

  3. Kết nối với Oracle DB hỗ trợ SSL thông qua Java (JDBC)

  4. Mở hộp thoại phương thức thông qua JavaScript Oracle APEX

  5. Các tham chiếu vòng tròn có được chấp nhận trong cơ sở dữ liệu không?