2015-12-31 55 views
1

我對Core Data的世界很陌生。我的應用程序通過API抓取電影和電視節目數據。 Movie和TvShow managedObjects具有相似的屬性。我對建立模型的最佳方式仍然有點困惑。這是我目前實施的,我想知道我能做些什麼來創建更高效​​的模型。多媒體類型的核心數據模型?

最好是有一個整體mediaObject具有相似的屬性,然後有電影和tvshow作爲一種子類? (如果是的話我怎麼能實現它)

Current Core Data Model

回答

2

當你有兩個實體具有類似特性可(有時)是有意義的使用「父實體」來保存屬性(或關係),他們有共同點。爲此,請創建一個實體(例如您建議的MediaObject)併爲其定義所有常用屬性。然後從「子」實體(TVSeriesMovie)中刪除這些屬性,而將MediaObject設置爲父實體 - 這在右側的數據模型檢查器中進行設置。你應該有這樣的事情:

Data Model Editor image

我懷疑有進一步的改進,這是由 - 如。在TVSeriesname屬性可能相當於titleMovie,因此可能被重命名,移動到父MediaObject

一些其他的想法:你原來genre關係是一對多:一個Movie可以有很多Genres ,但每個Genre可能只有一個Movie。我認爲你可能想扭轉這種情況,所以每個Movie只屬於一個Genre,但每個Genre可以有許多Movies,或者可能有多種關係。還要注意,通常的做法是使用複數名稱作爲多對多關係,例如。 tvShows而不是tvShow。這只是使意圖更清晰。我也會避免id作爲屬性名稱;它也是通用:mediaId,genreId等會更好。

如果使用「創建NSManagedObject子類」菜單選項時,Xcode會創建單獨的類的所有實體,與TVSeriesMovieMediaObject各爲一個子類(這又NSManagedObject的子類)。每個子類的屬性定義反映相應實體的屬性和關係。

我開始時有一個限制條件:它有時候有時可以使用來使用父實體。謹慎的原因是,在實踐中,Core Data將父/子實體實現爲單個SQL表 - 具有父級和所有子級的所有屬性/關係。這個實現細節對CoreData來說是隱藏的 - 但是會對性能產生影響:表格會是「寬的」 - 很多列 - 其中很多列會因爲涉及到不同的子實體而變空。關於這個問題,你會發現大量關於堆棧溢出的Q & A,有些人選擇不使用父實體,因爲性能受到的影響太差。您需要根據您可能的數據量,查詢的複雜程度等自行評估。

+0

好的。這很明顯。謝謝! :) – Jon