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

Ràng buộc khóa ngoại có thể gây ra chu kỳ hoặc nhiều đường dẫn tầng?

SQL Server thực hiện việc đếm đơn giản các đường dẫn theo tầng và thay vì cố gắng tìm hiểu xem có chu trình nào thực sự tồn tại hay không, nó sẽ giả định điều tồi tệ nhất và từ chối tạo các hành động tham chiếu (CASCADE):bạn có thể và vẫn nên tạo các ràng buộc mà không có các hành động tham chiếu. Nếu bạn không thể thay đổi thiết kế của mình (hoặc làm như vậy sẽ ảnh hưởng đến mọi thứ) thì bạn nên xem xét sử dụng trình kích hoạt như một phương sách cuối cùng.

FWIW giải quyết các đường dẫn tầng là một vấn đề phức tạp. Các sản phẩm SQL khác sẽ đơn giản bỏ qua vấn đề và cho phép bạn tạo các chu trình, trong trường hợp đó sẽ là một cuộc chạy đua để xem cái nào sẽ ghi đè giá trị cuối cùng, có thể là do người thiết kế thiếu hiểu biết (ví dụ:ACE / Jet thực hiện điều này). Tôi hiểu một số sản phẩm SQL sẽ cố gắng giải quyết các trường hợp đơn giản. Sự thật vẫn còn, SQL Server thậm chí không thử, chơi nó cực kỳ an toàn bằng cách không cho phép nhiều hơn một đường dẫn và ít nhất nó cho bạn biết như vậy.

Bản thân Microsoft cũng khuyên bạn nên sử dụng các trình kích hoạt thay vì các ràng buộc FK.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Giới thiệu về các hàm có giá trị bảng nội tuyến (ITVF) trong SQL Server

  2. Tách chuỗi trong máy chủ sql

  3. Khóa tổng hợp duy nhất của SQL Server của hai trường với tự động tăng trường thứ hai

  4. SQL, bảng số bổ trợ

  5. Tham số Sniffing (hoặc Spoofing) trong SQL Server