2015-03-25 39 views
36

Tôi hơi mờ về các quy tắc xóa mối quan hệ dữ liệu cốt lõi. Vì vậy, nếu ai đó có thể giúp tôi trả lời một số câu hỏi về họ.Hiểu quy tắc xóa dữ liệu lõi trên One to Many

Tôi có thực thể A và B. A có một mối quan hệ to-Nhiều với B, và B có một to-Một mối quan hệ với A.

Một < --- >> B

Bây giờ, nếu tôi thiết lập các quy tắc xóa tại A để Cascade, tôi hiểu nó sẽ xóa tất cả các Bs liên quan đến nó. Nhưng nếu tôi đặt nó thành Nullify, liệu nó có đặt chữ B thành NIL hay chỉ là khóa ngoài thành Nil?

Và tôi nhìn mọi nơi về mối quan hệ từ B đến A, tôi có nên đặt nó thành Nullify không? Liệu đó có phải là Nullate "B Object" tại A? Hay nó sẽ Nullify tất cả các Bs liên kết với A? Còn Cascade thì sao? Nó sẽ xóa tất cả các B liên kết với A, hay chỉ là B cụ thể? Hoặc tôi chỉ sử dụng "Không có hành động" về mối quan hệ từ B đến A để khi tôi xóa B, sẽ không có thay đổi nào xảy ra với A, nhưng tham chiếu đến B sẽ không tồn tại? Không, không.

Tôi BẤT K PRE BẤT K confused nhầm lẫn với những điều này, vì vậy xin lỗi các câu hỏi của tôi.

Cảm ơn.

+2

Rất đẹp question..upvoted – NSPratik

Trả lời

55

Nếu bạn đặt quy tắc xóa thành "vô hiệu hóa" và xóa đối tượng A, thì các tham chiếu đến đối tượng đó trong B sẽ bị xóa. Nghịch đảo hoạt động theo cùng một cách. Nếu bạn có thác và xóa B thì nó sẽ loại bỏ A mà B chỉ vào. Sau đó nó sẽ thực hiện theo quy tắc xóa từ A đến các B còn lại (hoặc là thác hoặc vô hiệu hóa).

Quy tắc bạn đặt thực sự phụ thuộc vào kiểu dữ liệu của bạn. Nếu A là khách hàng và B là đơn đặt hàng của họ thì bạn có thể đặt quy tắc A-> B để từ chối (ngăn A bị xóa nếu khách hàng có đơn đặt hàng) hoặc xếp hàng (xóa các đơn đặt hàng khi khách hàng bị xóa). B-> Một quy tắc có thể sẽ "vô hiệu hóa". Nếu đơn đặt hàng bị xóa, chỉ cần xóa tham chiếu đến đơn đặt hàng của khách hàng.

Mối quan hệ xóa các quy tắc được mô tả trong Apple Core Data Programming Guide

+1

Và "Không làm gì cả" sẽ đơn giản giữ tài liệu tham khảo, mà không có nó thực sự tồn tại, phải không? – Shamy

+0

Có, việc xóa A bằng "Không có hành động" có thể dẫn đến việc B đề cập đến sự không tồn tại A – Paulw11

+0

"Nullify Xóa mối quan hệ giữa các đối tượng nhưng không xóa đối tượng. Điều này chỉ có ý nghĩa nếu mối quan hệ bộ phận của một nhân viên là tùy chọn, hoặc nếu bạn đảm bảo rằng bạn thiết lập một bộ phận mới cho mỗi nhân viên trước khi thực hiện thao tác lưu tiếp theo Nó cho biết vô hiệu hóa "không xóa một trong hai đối tượng". " Điều này thực sự khó hiểu. Vì vậy, nếu tôi thực sự muốn xóa A, tôi không thể thiết lập quy tắc để vô hiệu hóa? – LShi

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