2010-07-20 64 views
2

概述:我正在設計一個餐廳管理應用程序,並且我有一個名爲Order的實體,它包含Items。由於一家餐廳可以運營多年,擁有數千個已完成的「訂單」,爲了讓我的應用程序的網絡連接更容易並且保持數據庫更快,我想介紹一個ClosedOrder的概念,它是一個訂單已付款,基本上。新核心數據實體與現有的實體相同:單獨的實體還是其他解決方案?

我有幾個選擇可以做到這一點:我可以添加一個isClosed屬性到我的Order實體,並用謂詞執行所有對'open'命令的提取請求,但是這樣會導致存在很多記錄每次需要獲取數據庫時都會經歷數據庫,這通常是由於我的應用程序的工作流程而與訂單實體共同實現的。如果我理解正確,創建'ClosedOrder'子實體也會有同樣的問題,因爲Core Data將所有子實體存儲在數據庫中的同一個表中。

在這種情況下創建一個完全獨立的實體愚蠢?或者這正是我需要做的?我對我對數據庫性能缺乏瞭解的情況表示歉意,核心數據很漂亮,因爲它的摘要需要了解這些信息,但同時它並不能使它變得不重要,特別是在這種情況下,性能如果它被我的用戶推得很遠,可能會嚴重降級。

回答

2

如果您使用的是SQLite存儲類型,並且「isClosed」屬性是「索引」(實體編輯器面板中的設置),那麼您可能擁有數十萬個訂單,並且仍然有一個很好的快速獲取時間僅針對「isClosed == YES」進行過濾。

創建一個單獨的實體並不會真的給你帶來太多的性能,但當它發生變化時(例如兩個遷移步驟的價格),它會使維護更加困難。您仍然存儲所有這些項目,並且SQLite在設置正確時是一個稱職的數據庫庫。在這裏使用索引屬性,然後生成一些測試數據,然後測量性能。我相信你會很滿意。

+0

啊有趣的是,你有更多的信息,索引的索引是如何工作的嗎? :)核心數據文檔中沒有任何內容,當我在一週前使用谷歌搜索時,大多數人都在問它是什麼,並注意到它不在文檔中。 聽起來像我應該索引我的UUID屬性太多,如果我的理解,我發現正確的一點。 – refulgentis 2010-07-20 20:03:23

+1

1)選擇「isClosed」屬性並檢查「索引」,你就完成了。 2)如果你有興趣基於它們的UUID過濾/獲取實例,那麼它只應該被索引。就個人而言,我會使用數字屬性,而不是字符串UUID(少於文本來存儲/操作/搜索)。 – 2010-07-20 20:08:51

+0

哦,不,我明白該怎麼做,只是不明白「窗簾後面發生了什麼事」。這是一個SQLite的東西,我應該谷歌搜索? – refulgentis 2010-07-20 20:10:55