2010-10-03 28 views
2

我的應用程序是基於CoreData,但他們可能是所有關係數據庫的公共理論:CoreData引用

我有一個輸出 - 輸入一對多的關係在我的模型。每個實體的這種關係下可能有無限數量的鏈接。識別特定輸入或輸出的最佳方式是什麼?

到目前爲止,我實現這一目標的唯一方法是在可以保存輸出和輸入名稱的關係中放置一箇中間實體。然後,一個實體可以循環輸入/輸出以在需要時找到正確的關係。有沒有更好的辦法?

有效地我試圖提供一個通用的實體,可以有任何數量的關係與其他通用實體。

道歉,如果我的描述不是最清楚的。

編輯迴應以下答案: 首先感謝您的迴應。我當然有一個雙向太多的關係。但是,如果一個窗口小部件有兩個其他窗口小部件與它的輸入關係相關聯,那麼什麼是確定哪個輸入提供的最佳方式,比如說「年齡」或「年服務」,當兩者都可以擁有此屬性時,我只對特定每個人的價值?

回答

2

我和喬舒亞一樣困惑 - 它告訴我可能你沒有清楚你想要達到什麼或者它有些複雜(都是?)。

我最好的猜測是,你有這樣的:

實體的Widget 屬性:

  • 標識

關係

  • outputWidgets < < - >>小工具
  • inputWidgets < < - >>的widget

(其中按照標準一 - >>是一對多的關係和< < - >>是具有一對多反向關係的一對多的關係)。

因此,每個小部件將存儲它作爲輸出所具有的小部件集以及它作爲輸入所具有的小部件集。

因此,特定的小部件會維護一組inputWidgets和outputWidgets。這些關係中的每一個也都是相反的,所以您可以 - 對於輸入或輸出中的任何窗口小部件 - 查看您的窗口小部件是否在輸入或輸出列表中。

雖然這是血腥的醜陋。

我認爲你的問題是如何在標記關係時實現上述目標。你提到你想爲每個關係都有一個字符串標識符(唯一的?)。

你可以通過這樣做:

screengrab

如果您爲每個雙面關係的新widgetNamedRelationship。請注意,我假設每個關係都是雙面的。

然後,對於每個小部件,您都有一組命名輸入和命名輸出。這也允許小部件被連接到自己,但只有獨立的輸入和輸出總線。

那麼接下來爲您例如,在您的實現類的Widget實例調用aWidget 「年齡」 你有這樣的:

NSPredicate * agePredicate = [NSPredicate predicateWithFormat:@ 「NAME = '年齡'」]; NSSet * ageInputs = [aWidget.inputs filteredSetUsingPredicate:agePredicate];

我理解了這個問題嗎?

+0

謝謝你做我無法做到的事情,並且連貫地表達我自己的問題。你提出的解決方案正是我目前解決問題的方法。我同意這種安排是醜陋的,因此想知道是否有更優雅的解決方案。我希望沒有,我畢竟可能會要求CoreData的行爲方式不是爲了利用預先製作的數據存儲處理的便利性而設計的。非常感謝。 – Deano 2010-10-30 12:30:58

0

如果您希望能夠充分利用快速高效的店內查詢的便利,真的沒有更好的辦法。目前還不清楚你在附加評論中提出的問題,我想這就是爲什麼你還沒有得到任何答案。

請記住,核心數據不支持「連接表」,而是支持多對多關係。如果Widget有許多輸入或輸出(我猜可能是同一個實體),那麼Widget和Input之間的多對多,雙向關係(與核心數據說法中的反向關係)是你所需要的全部。然後,您需要做的就是查看您的Input實例是否位於Widget實例的-inputs中,或者Widget實例是否位於Input實例的-widgets中。

這是你在找什麼?如果不是,請嘗試澄清您的問題(通過編輯它,而不是通過附加評論:-))。