2011-04-06 98 views
1

Apple的文檔建議在CoreData中對數據模型建模時使用反向關係。CoreData建模逆關係

我下面舉個例子:

一本書(實體)有幾個「頁」和一個「frontCover」和一個「後蓋」。 頁面(實體)在一個「書」(所以「書」是「頁」的反面)。

OK,到目前爲止,這是標準的情況下......但現在,我的問題:

我只有一類封面(實體)。封面(實體)在一本「書」上。在這本「書」封面是「frontCover」或「backCover」。所以,「book」的倒數是「frontCover」還是「backCover」。

這不能在CoreData中建模。一種關係只能是一種關係的逆轉,而不能取決於這種或那種關係。

建模的最佳方式是什麼?單向關係(無向)?

謝謝您的回答, 克里斯

回答

2

你可以做類似下面的模型(第一圖片)。這將使Cover的反向關係爲零。不過,這對我來說並不合適。

另一種選擇(第二個圖像)是給Book一個引用2個Cover對象的'封面'關係,並給Cover一個isFront布爾屬性。這將允許稱爲「書」的反向關係。

enter image description here

enter image description here

+0

嗯......我不知何故喜歡第二種選擇。然而,所有書籍的所有封面的顯示將更加困難(可以在第一種情況下的一次操作中完成)。此外,我必須確保Book.covers有2個且只有2個封面,其中只有一個是封面。 ....選項1確實感覺有點奇怪,但實際上是做我想要的...也許我會選擇這個選項...或者我會堅持從書到封面的單向關係。 – naeger 2011-04-12 18:05:41

2

一種方式做到這一點可能是建立封面與兩個子實體的「抽象」實體 - FrontCover &後蓋。然後你可以創建與其中每一個相反的關係&。

+0

+1優雅的解決方案 – westsider 2011-04-08 16:02:27

+0

是的,總的來說我同意。通常,FrontCover和BackCover之間至少有一些區別,所以這將是兩個子類的理由。然而,在我的特殊情況下(書和封面只是一個修剪下來的玩具的例子),封面和封底之間絕對沒有區別。更糟糕的是,在某些情況下,封面可能會變成封底,反之亦然。所以這將在我的特例中反對這個解決方案... – naeger 2011-04-12 17:54:26

+0

但是,無論如何感謝這個答案! – naeger 2011-04-12 17:55:05

0

我只想補充。

一種方法是有2個子實體。但是這隻有在FrontCover和BackCover差別很大時纔有用。

如果它們是完全相同的對象,則應改爲在實體中使用枚舉。

該枚舉區分封面是frontCover還是BackCover。

然後,您從書中設置了1到多個關係。

coredata的目的是保存您的數據。無論如何,你的邏輯應該在代碼中。

另外創建兩個子實體與westSider的答案基本相同。子實體只是在原始實體上添加另一個關係。