2012-06-07 42 views
0

我有兩個型號:做一個一對多的關係中使用的核心數據IOS

Card with has_many relation to Works 

我的意思是,我有我的數據庫7級靜態的作品,我可以選擇其中的一些,當我創建一個卡。

我定義這樣的關係的has_many:

Has many relationship

我的問題很奇怪...這似乎工作,但是當我探索我的sqlite的文件,我看不出之間的任何關係表卡和工作。

我在等待一個card_id和work_id表。

核心數據存儲如何有很多關係?

回答

2

首先,我會提醒你打開sqlite文件核心數據吐出並試圖從他們推斷的事情。它意味着一種不透明的格式:您只能通過Core Data API與Core Data持久存儲進行交互。

但是,要回答您的問題:通常在數據庫設計中,您不會使用像您描述的一對多關係的鏈接表,而只能用於多對多關係。對於一對多,你需要在'一端'的表中有一個外鍵字段,並且該字段的內容是另一個表的主鍵。例如(抱歉隨便舉個例子我在谷歌找到):

one-to-many

tblOrdertblOrderDetails一個一對多的關係。這是通過在關係的多方中具有一個Order#字段來實現的,該字段是涉及tblOrder表的主鍵的外鍵。正如你所看到的,不需要鏈接表。

一個多對多的關係需要一個鏈接表,但一對多沒有。

最後一點:我在你的截圖中注意到,你沒有爲你的workscustomer關係設置相反的關係。核心數據要求所有關係具有相反關係,否則您的數據可能會損壞。 (這有點簡化,因爲還有其他方法來解決它,但通常使反轉最容易。)

+0

謝謝你的回答。我很抱歉,但我認爲我在做一個多對多的關係實際上......我如何實現鏈接表?我認爲核心數據本身生成它? – Sebastien

+0

噢,好的。那麼,我會再說,如果它在Core Data領域工作,不要惹惱底層數據庫:它只是一個實現細節,它是如何處理連接的。但無論哪種方式,在屏幕截圖中似乎都沒有多對多的關係,因爲多對多關係肯定需要相反的關係。添加相反的關係(確保它也是一對多)並再次查看? –

+0

是的,我添加了一個逆,它工作正常,我的鏈接表是自動創建的。 – Sebastien