2014-05-08 52 views
0

可以說我有一個實體A和實體B。關係是1:1。如果我刪除A然後B也應該刪除。我已經設置了級聯刪除規則。現在讓我們假設我添加另一個實體C,它與1:1到B有關係。核心數據如何糾正設計

我不知道如何正確處理這個問題。如果AC具有相同的B它應該是相同的實例B?或者我應該複製條目?如果它是相同的刪除A不能刪除B如果C有一個引用它。

此外,我怎樣才能強制執行這種1:1關係AB?在我創建實體的那一刻,我也創建了一個實體,不檢查它是否已經在數據庫中。這不會失敗,並導致重複B

編輯:爲了更好地理解我想要實現:

一個必須有一個C也必須始終有一個B

例如讓我們假設我有一個實體商店(B)和一個實體收藏(A)。在未來,我可能會添加另一個也會使用Shop的實體。因此,如果用戶創建收藏夾,他會給它一個名稱和一個。現在如果我不檢查這個已經在數據庫中,我會創建另一個。另一方面,如果我允許重複我可以使用級聯刪除規則,一定不要害怕,如果我刪除一個收藏夾,它會離開另一個收藏一個空的

我感覺有點失落,我不確定這種情況下最佳做法是什麼。任何幫助都會增加。

+0

唯一的好答案需要理解數據代表什麼以及如何使用它。有重複的** B **有意義嗎?也許,也許不是,答案取決於** B **實際代表什麼以及它與** C **的關係。 –

+0

編輯了這個問題。我希望現在能更清楚我想實現的目標。 – kukudas

回答

1

這取決於你正在嘗試做什麼。如果沒有A的情況下B不能存在,那麼級聯仍然適用。但是,如果C可以導致B仍然存在,那麼您應該刪除級聯刪除。

但是這也引出了一個問題,如果其中任何一個不存在,其他人是否不存在。這可能意味着如果A被刪除,則需要刪除B和C.

讓我們把這個應用到一個例子中。

A =身體 B =頭 C =腦

可以說,這些都是人體需要活着的東西。沒有身體,頭部和大腦就無法工作。對於其餘部分也是如此。所以如果這些部分中的任何一個死亡,其他部分就會死亡好的,現在如果A和C有相同的B,那麼這應該是唯一的B,而不是重複的。

CoreData的任何實現都應該在創建新實體之前檢查實體的存在,除非您可以保證它只會屬於一個特定的實體。如果您不想檢查重複項,您的A和B必須始終是唯一的。總是有獨特的真實世界價值。具體的時間將是一個總是唯一的例子。這第二個只存在於現在,不會再存在,也不存在過。

如果一個新的A創建一個B,那很好。但是,如果A和C都可以有相同的B,那麼你必須檢查一個存在的B,否則A和C將永遠不能共享一個B.如果你的A永遠只有1B,並且沒有其他人使用B,那麼只要你總是創造獨特的A,你就可以做到這一點。

+0

謝謝你的詳細解答。在我的情況下,如果我創建一個它必須有一個B.如果我創建一個C它也必須有一個B. A和C沒有關係。 – kukudas

+0

好吧,他們確實有關係,如果他們有相同的B,他們通過B相關。無論如何,你應該在這種情況下檢查B的重複。 :P祝你好運! – ColdLogic