2010-03-16 25 views
2

從閱讀上的核心數據的蘋果文檔中,我瞭解到,當你需要一個動態的架構,你不應該使用核心數據。如果我想給用戶提供了創建自己的屬性,如果我創造了一些「虛擬」屬性,如「自定義小數1」,「定製小數2」,「自定義文本1」,將工作的能力,在覈心數據模型, 「自定義文本2」等,用戶可以爲自己的目的命名和使用?在Core Data中僞造一個動態模式?

顯然這不適用於關係,但對於簡單的屬性,它似乎是一個合理的解決方法。在大多數用戶未使用的實體上創建一堆虛擬屬性會明顯降低它們的性能嗎?有沒有人嘗試過這樣的事情?謝謝!

+0

你可以嘗試解釋你如何設想在實踐中使用這些虛擬的屬性? – 2010-03-16 03:40:03

+0

當然,假設你的模型中有一個汽車實體,並且你可能有一些屬性,如顏色,製造商,型號,年份。但是,你可能會創建一些虛擬的特徵,使用戶可以重命名用於重你的「自定義整個1號」屬性,因爲使用的應用程序,特別是經銷商可能需要跟蹤重量計算運費什麼的,我無法預料。軟件的另一個用戶可以使用「自定義整數1」作爲他們的庫存控制編號或其他類似的東西。 – Gouldsc 2010-03-16 03:50:03

回答

2

首先,請參閱核心數據文檔on relationships。使用你的榜樣,考慮是這樣的:

  1. 一個CarAttributeType實體,一個名稱,如「重磅」
  2. 與爲2765.
  3. 這樣的價值汽車實體
  4. 一個CarAttribute實體,與你提到所需的值(例如,「顏色」,「製造」,等)

然後,具有CarAttribute和CarAttributeType(許多CarAttributes可以具有相同類型),一個一個之間的多對一的關係Car和CarAttribute之間的一對多關係(每輛車可以有很多屬性)。這個解決方案比硬編碼的NULL字段要複雜一些。但是,它避免了repeating groups並希望更易於維護。

編輯:是的,我錯過了。我想你會想要一個StringCarAttribute,StringCarAttributeType,FloatCarAttribute,FloatCarAttributeType等等。然後,在StringCarAttribute和StringCarAttributeType之間有一個多對一的關係,等等。汽車將​​具有一個具有StringCarAttribute和FloatCarAttribute的manys。多類型實體的原因是您沒有StringCarAttribute和FloatCarAttribute,都聲明自己使用單個權重屬性類型。

擁有一個所有類型的CarAttribute都違背了1NF#4。

+0

如何輸入CarAttributes?我需要一個StringCarAttribute實體和一個FloatCarAttribute實體?或者我應該創建一個帶有floatValue,boolValue,stringValue等屬性的CarAttribute實體,然後讓用戶選擇合適的類型,並只使用該值,而將其餘的值留爲NULL? 您的解決方案將允許無限數量的屬性,這似乎更合適。我想我沒有考慮使用泛型意義上的關係。謝謝。 – Gouldsc 2010-03-16 04:59:32

0

它的工作,這純粹是可怕的。考慮在數據庫中使用平坦的表格,因爲這正是你要做的。請嘗試創建一個可以用應用程序可以理解的方式描述模式的模式。然而,仍然會有相當多的代碼參與其中,儘管如果正確完成,您可以像SQL數據庫一樣模仿。當然,核心數據是建立在SQL(或其他存儲類型,但是那不是我點)之上,但基本上你會創建一個層,以模仿的東西兩層下降,這也只是愚蠢。

+0

感謝您的迴應。我最關心的是如何適應用戶可能擁有的獨特用法。我打算在用戶可能需要的許多標準/通用屬性中進行構建,但我也希望允許用戶添加自己的一些額外屬性(因爲我不可能包含/預測每個用戶他們可能有的情況)。 – Gouldsc 2010-03-16 03:39:53