Trong MSSQL 2005 tôi chỉ tấn công được thông báo lỗi khét tiếng:Vấn đề với khóa ngoại tuyến là nhiều đường dẫn và chu kỳ là gì?
Giới thiệu FOREIGN KEY constraint XXX trên bàn YYY có thể gây ra chu kỳ hoặc nhiều đường thác. Chỉ định ON DELETE NO ACTION hoặc ON UPDATE NO ACTION, hoặc sửa đổi các ràng buộc KEY NGOẠI HỐI khác.
Bây giờ, StackOverflow có một số chủ đề về thông báo lỗi này, vì vậy tôi đã có giải pháp (trong trường hợp của mình, tôi sẽ phải sử dụng trình kích hoạt), nhưng tôi tò mò là tại sao có một vấn đề.
Như tôi đã hiểu, về cơ bản có hai kịch bản mà họ muốn tránh - một chu kỳ và nhiều đường dẫn. Một chu kỳ sẽ là nơi hai bảng có các khóa nước ngoài xếp chồng lên nhau. OK, một chu trình có thể mở rộng nhiều bảng, nhưng đây là trường hợp cơ bản và sẽ dễ phân tích hơn.
Nhiều đường dẫn sẽ là khi TableA có khóa ngoài để TableB và TableC, và TableB cũng có khóa ngoài cho TableC. Một lần nữa - đây là trường hợp cơ bản tối thiểu.
Tôi không thể thấy bất kỳ vấn đề nào phát sinh khi bản ghi bị xóa hoặc cập nhật trong bất kỳ bảng nào trong số đó. Chắc chắn, bạn có thể cần phải truy vấn cùng một bảng nhiều lần để xem bản ghi nào cần cập nhật/xóa, nhưng đó thực sự là một vấn đề? Đây có phải là vấn đề về hiệu suất không?
Trong các chủ đề SO khác, mọi người truy cập nhãn bằng cách sử dụng các thác là "risky" và nêu rõ "resolving cascade paths is a complex problem". Tại sao? Nguy cơ ở đâu? Vấn đề ở đâu?
Thay thế bằng trình kích hoạt có làm cho nó tốt hơn không? Tất nhiên - có một cách tiếp cận như "không dùng chìa khóa nước ngoài" và làm mọi thứ từ mã. Tôi không nghĩ rằng tôi cần phải cho bạn biết tại sao tôi nghĩ rằng đó là một ý tưởng tồi ... –