2011-01-05 13 views
21

Tôi biết mục đích "Thực thi ràng buộc khóa ngoại" trong RDBMS. Nhưng có lợi ích gì khi nó được đặt thành "KHÔNG"?Sql Server: Lợi ích của việc sử dụng "Thực thi ràng buộc khóa ngoài" khi nó được đặt thành "KHÔNG" là gì?

+0

Khi bạn có hai khóa chính giống nhau trong hai bảng và bạn phải tạo mối quan hệ khóa ngoài, thì bạn phải đặt "Thực thi ràng buộc khóa ngoài" thành "Không". Điều này là khá khó hiểu, vì vậy tôi đưa url youtube dưới đây, bạn sẽ được rõ ràng sau khi kết thúc video này. https://www.youtube.com/watch?v=H7uGGg1BQ2Y –

Trả lời

21

Trong quá trình sản xuất bình thường, cài đặt này phải không bao giờ được đặt thành NO.

Nhưng: khi bạn đang phát triển hoặc cơ cấu lại cơ sở dữ liệu hoặc khi bạn thực hiện ví dụ: một lượng lớn tải dữ liệu lớn mà bạn sẽ cần phải "khử trùng" (làm sạch), sau đó có thể có ý nghĩa để tắt các ràng buộc khóa ngoài để cho phép dữ liệu "không hợp lệ" được tải vào bảng. Tất nhiên, như tôi đã nói - bạn không nên tắt cài đặt đó trong một thời gian dài - bạn nên tiến hành xóa dữ liệu, xóa các hàng vi phạm ràng buộc FK hoặc cập nhật giá trị của chúng để chúng khớp với hàng gốc.

Vì vậy, một lần nữa: ở chế độ sản xuất "bình thường", cài đặt này sẽ không bao giờ là NO - nhưng đối với các tác vụ cụ thể, nó có thể giúp thực hiện công việc dễ dàng hơn. Sử dụng nó một cách thận trọng, và luôn luôn bật các ràng buộc FK trở lại càng sớm càng tốt!

+0

Cảm ơn bạn đã lưu ý, nhưng có những trường hợp chúng tôi nhập dữ liệu vào một cột để nói ví dụ như tất cả dữ liệu được xác định trước. Tôi có nghĩa là nếu dữ liệu hợp lệ là 1,2 và 3 sau đó để nói tất cả chúng tôi đặt -1 trong cột. Trong tình huống này, chúng ta nên đặt "Thực thi ràng buộc khóa ngoài" thành NO trong sơ đồ. đúng? như vậy là nó thực sự cần thiết để tạo ra một mối quan hệ? – odiseh

+1

@odiseh: Không. Trong trường hợp của bạn, tốt hơn hết là nên loại bỏ khóa ngoại trừ vì nó không phục vụ mục đích hữu ích nào cả. Thay vào đó bạn có thể tạo ràng buộc CHECK để xác nhận hợp lệ các giá trị dữ liệu. – sqlvogel

+3

+1 để cho nó giống như vậy. Tôi thấy cài đặt này bị lạm dụng mọi lúc trong một số công ty mà tôi ký hợp đồng. Nó liên tục dẫn đến các vấn đề. Tôi sẽ thêm rằng đôi khi tôi sử dụng nó như là một bước trung gian khi một khóa nước ngoài nên tồn tại không và tôi muốn thêm nó. Đôi khi tôi không tự tin rằng tất cả các ứng dụng tham chiếu đều hoạt động theo đúng thứ tự và điều này cho phép tôi xác định mối quan hệ ngay lập tức, kiểm tra các ứng dụng được đề cập (hoặc tìm kiếm mã của chúng) và sau đó bật thực thi. –

3

Không sử dụng hàng ngày, theo như tôi biết. Thời gian tôi đã không thực thi các khóa ngoại trong một thời gian là khi có vấn đề với dữ liệu và sửa chữa chúng bị che khuất bởi các kiểm tra mối quan hệ.

Trong khi kiểm tra hạn chế hoạt động hàng loạt tạm thời bị bỏ qua để tăng hiệu suất.

Các vấn đề liên quan