2010-08-26 45 views
5

Có lẽ đây là một câu hỏi ngây thơ ... nhưng tôi nghĩ rằng chúng ta nên luôn luôn có tầng xóa và cập nhật. Nhưng tôi muốn biết là có vấn đề với nó và khi nào chúng ta không nên làm điều đó? Tôi thực sự không thể nghĩ về một trường hợp ngay bây giờ, nơi bạn sẽ không muốn làm một thác thác nhưng tôi chắc chắn có một ... nhưng những gì về cập nhật nên được thực hiện luôn luôn?Ưu điểm và nhược điểm của xóa và cập nhật Cascading là gì?

Vì vậy, bất cứ ai có thể vui lòng liệt kê ra ưu và khuyết điểm của việc xóa tầng và cập nhật không? Cảm ơn.

Trả lời

7

Ưu điểm:

  • Khi bạn xóa một hàng từ bảng Chánh tất cả các hàng nước ngoài chủ chốt được xóa
  • này thường nhanh hơn so với thực hiện điều này với trigger
  • hàng mồ côi không có khả năng

Nhược điểm

  • trẻ mồ côi là có thể
  • Nếu do nhầm lẫn bạn xóa một hàng trong bảng cha tất cả các hàng trong bảng con tương ứng sẽ bị xóa và nó sẽ được Pita để tìm ra những gì bạn đã xóa
1

Ưu điểm:

  • toàn vẹn dữ liệu - có thể giúp tránh các tình huống mà một kỷ lục đề cập đến cái gì đó không còn ở đó.

Nhược điểm:

  • Performance - Cascading xóa/cập nhật có thể được sloooooooooooooooooooow.
  • Tính phức tạp - Có vẻ như hầu hết mọi người tôi làm việc đều không được sử dụng để xếp tầng, vì vậy khi bạn cung cấp cho họ một dự án mới có nó, họ có chút ngạc nhiên khi lần đầu tiên họ kích hoạt một trong các thác này.
  • Như những người khác đã đề cập, thực sự có thể gây rối mọi thứ khi sử dụng không đúng cách.
+1

Hoặc, ở dạng chuẩn, SLW O20 – jball

+1

Điểm của bạn về hiệu suất không có ý nghĩa. Việc xóa tầng/cập nhật theo cách thủ công chậm hơn việc cho phép cơ sở dữ liệu xử lý nó. – Gili

5

Điều này phụ thuộc vào các thực thể được chứa trong bảng: nếu bên của khóa ngoại không thể tồn tại mà không có bên của khóa chính, có nghĩa là phải xóa tầng.

E. g .: Chi tiết đơn hàng hóa đơn không có quyền tồn tại nếu hóa đơn bị xóa.

Nhưng nếu bạn có khóa ngoại được sử dụng cho mối quan hệ "hoạt động" cho mối quan hệ giữa nhân viên và người chủ của mình, bạn có muốn xóa nhân viên nếu ông chủ rời công ty không?

Ngoài ra: một vấn đề kỹ thuật là một số công cụ ORM (đối tượng quan hệ ánh xạ) bị nhầm lẫn nếu các mục bảng phụ thuộc thay đổi mà không phải chịu trách nhiệm về điều đó.

+0

Tôi không chắc chắn rằng tôi sẽ xóa các ông chủ chính xác vì lý do này, tôi có lẽ sẽ bất hoạt hàng – SQLMenace

+0

@SQLMenace Bạn có giữ tất cả các nhân viên cũ mãi mãi trong một bảng nhân viên? Nhưng tôi hy vọng bạn thấy điểm: Có những tình huống mà đứa trẻ có sự tồn tại của chính nó, ngay cả khi cha mẹ bị xóa. – Frank

+0

Tôi không gõ câu trả lời của bạn, chỉ cần nói những gì tôi sẽ làm .. chúng tôi ghi lại tất cả các thay đổi dù sao đi nữa và họ đi vào bảng Lịch sử .. tùy thuộc vào chính sách của công ty bạn có thể không được phép xóa hàng – SQLMenace

-1

Pro: nó cho phép bạn cần giảm số lượng câu lệnh SQL cần thiết để thực hiện các hành động xóa.

Con: bạn có thể xóa dữ liệu có phần quan trọng đối với việc kiểm tra sau này.Vì vậy, điều quan trọng là giữ cho nó ngay cả khi hàng cha mẹ đã bị xóa. Trong trường hợp này, khóa ngoại sẽ nhận giá trị NULL chẳng hạn.

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