2012-06-18 68 views
0

核心數據中的關係只是讓我感到困惑。我已閱讀和閱讀,但我只是不明白。我想這對閱讀時通常會感到沮喪並沒有幫助。我想要做一些非常簡單的事情:建模核心數據中的反比關係

我有一個實體,名爲Pictures,實體名爲User。我希望用戶能夠喜歡和標籤等人的照片,所以每個Picture實體有兩個關係:

圖片實體:

UsersWhoLikedThePicture(一對多):

Destination: User 
Inverse: Picture 

UsersWhoAreTaggedInThePicture(一對多):

Destination: User 
Inverse: Picture 

但是這引起了很多混淆使用,我甚至無法描述。這是不一致的。有人喜歡圖片會導致它們作爲標記用戶被刪除,並且像一張圖片會導致您的所有其他圖片中的圖片被刪除。啊,這真是太糟糕了。我的結構看起來好嗎?我將如何建模?

回答

2

我不知道這是否可能,但它聽起來像你用兩個關係相同的逆向目標。不要這樣做。

正確的方法是這樣的:

enter image description here

3

除了馬蒂亞斯鮑赫答案,我可以給你一些提示,瞭解關係。

首先,當你處理核心數據時,你必須考慮對象。通過這種方法,您可以在模型中將其視爲一個圖,其中節點是您在模型中創建的實體,而關係是這些實體之間的鏈接。

現在,關於關係,它們可以是不同的類型:一對一,一對多和多對多。根據您擁有的關係類型,您可以在對象圖中創建不同的鏈接。例如,如果UserPicture具有多對多關係,則表示對象(類型爲NSManagedObject)的每個實例都有指向不同Picture的鏈接。 User作爲源,Picture s作爲目的地。

Core Data使用反向關係來維護圖的一致性。特別是,它們在處理刪除規則時非常有用。

每個關係都有一個與其關聯的刪除規則。 級聯意味着如果您刪除了一個對象,例如User,核心數據將刪除爲您鏈接的對象(Picture)。 拒絕如果有Picture鏈接到它,則不允許刪除UserNullify表示從PictureUser的鏈接將被打破。這並不意味着對象被刪除。就對象圖而言,這意味着你不再有這些對象之間的聯繫。 無動作意味着源被刪除,目的地總是在那裏,並且它繼續指向一個不再存在的對象。因此,與Nullify不同,您需要手動打破該鏈接。如果不是,你可能會有一個圖形不一致。儘量避免這種關係。

如果您想了解其他內容,請告訴我。

編輯

看看Core Data Programming Guide Relationships section詢問。