核心数据:设计问题

Posted

技术标签:

【中文标题】核心数据:设计问题【英文标题】:Core data : design problem 【发布时间】:2011-06-06 12:59:04 【问题描述】:

我是 Core Data 的新手,我尝试了一个设计问题。 假设我有两个实体:“产品”和“图像”。

Image 实体有一个名为“type”的属性(普通、迷你等)。

我希望 Product 实体具有 Image 类型的属性,例如:miniImageList、normalImageList 等...但我真的不知道是否可以使用 XCode4 图形编辑器创建属性其类型是先前声明的实体。

我发现的唯一丑陋的解决方案是在 Product 和 Image 之间创建一对多关系。因此,我生成了一个 NSSet,其中包含我想要的所有图像。这个解决方案的问题是我需要测试我想要的图像类型(迷你、普通)等......这不是很方便。

如果你们中的任何人知道如何解决这个问题,不客气;)

希望我已经清楚了,感谢阅读。

【问题讨论】:

【参考方案1】:

我希望 Product 实体具有 Image 类型的属性,例如:miniImageList、normalImageList 等...但我真的不知道是否可以使用 XCode4 图形编辑器创建属性其类型是先前声明的实体。

为此,您需要建立关系。 “图像类型的属性”本质上是产品和图像之间的关系。

在您的情况下,更合适的解决方案是在 Product 和 Image 之间定义 fetched properties。因此,miniImageList 和 normalImageList 可以使用您需要在图像集上应用的“过滤”定义为获取的属性。但是,获取属性的一个重要限制是它们不是动态的。您需要确保生成的 Image NSArray 的内容考虑到最新的 Image 实体添加/删除/修改。

【讨论】:

您好,感谢您的回答。事实上,获取的属性可能是一个很好的解决方案。但是当我在我的模型中创建获取的属性时,我没有生成相关的 NSArray...不知道为什么! 不客气。那么,你如何使用你获取的属性呢? (代码 plz)我假设您正在这样做:NSArray *miniImages = [aProduct valueForKey:@"miniImageList"]; 如何为获取的属性定义谓词? 不,我只使用了 XCode Core-Data 编辑器。我认为获取的属性的生成方式与 Relation 相同(除了使用 NSArray 而不是 NSSet )【参考方案2】:

要么将不同的图像尺寸分离为实体,要么扩展图像实体以容纳不同尺寸的图形。

在这种情况下,我认为第二种方法是最好的。产品将具有对图像实体及其属性的易于遵循的引用。

【讨论】:

以上是关于核心数据:设计问题的主要内容,如果未能解决你的问题,请参考以下文章

数据库设计的核心问题

核心数据:如何从一个核心数据条目设计树形数据结构

核心数据(SQLite/iPhone)——设计注意事项?

核心数据设计:更好的 1 模型和 2 商店或 2 模型和 2 商店?

核心数据设计原则

图表数据的核心数据模型设计