2011-04-23 154 views
2

如何使用核心数据建模可变查找表?核心数据查询表

说我有一张名为“绘画”的表格。每幅画可以有一个或多个“颜色”,如“红色”,“蓝色”等。因此,“颜色”表是共享的。

我该如何建模?

我希望能够通过添加或删除颜色来修改“颜色”表。

+0

发现另一个帖子,可能会帮助,但仍然不是在船上呢... http://stackoverflow.com/questions/1903177/coredata-many-to-many-relationships-and-nspredicate – Christopher 2011-04-23 05:05:57

+0

好吧,似乎我只需创建一个具有反向关系的多对多关系即可。这很简单吗? – Christopher 2011-04-23 05:13:33

+0

你有10多个问题,并且你没有接受任何人。 – 2011-04-23 21:44:06

回答

2

如果您希望能够从穿越一个颜色所有使用该颜色的绘画对象,那么你会想使用多对多绘画 - >>颜色与多对立的关系颜色 - >>绘画。这似乎可能是你正在寻找的。

另一方面,如果您不需要从颜色遍历到绘画,那么这可能是您想要放弃反向关系并且只需要绘制多个绘画的罕见情况之一。 >颜色。

编辑

如果您希望能够删除是由绘画引用的色彩,那么你可能想保留这两个实体之间的关系相反。此外,您需要在颜色 - >>绘画和绘画 - >>颜色关系上定义“删除规则”。在这两种情况下,“无效”似乎是最佳选择。所以,当一个颜色被删除时,所有引用它的绘画都会简单地将该引用取消(删除)。同样,当一幅绘画被删除时,引用它的所有颜色都将停止引用它。

换句话说,不应该检查查找失败。也就是说,防守编码总是很好的做法。

+0

谢谢。我想知道“查找表”方面。我想在任何绘画开始创建之前添加一些颜色项目,以便我可以向用户提供这些选项。如果绘画#1在创建绘画#2时使用绿色,我想“查找”现有颜色值并显示它们。我想我可能需要一个单独的桌子或“plist”或其他东西。 – Christopher 2011-04-24 05:30:34

+0

我打算用可用颜色的查找数据创建第三个表格,然后引用Colors表格中的ID值。如果在为绘画加载颜色时发生查找失败,则我知道此颜色已被删除。有可能是一个更优雅的方式来处理这个问题。我希望在未来找出更好的办法。 – Christopher 2011-04-24 20:19:52

+0

查找表方面应该相当简单。基本上,您将显示某个实体的所有对象(即Color)。 – westsider 2011-04-25 17:35:20

1

是的,多对多关系是对此进行建模的正确方法。

+0

然而,一个问题是我想要一个包含可供选择的“可用”颜色的表格,可以对其进行编辑(添加/删除)。所以每幅画都会有一张用户颜色表。那么第三张桌子是否需要?我如何保持所有表同步?我认为这些问题的答案将为我解决这个问题。 – Christopher 2011-04-24 20:37:05

1

你需要的数据模型是这样的:

Painting{ 
    name:string 
    colors<<-->>Color.paintings 
} 

Color{ 
    name:string 
    paintins<<-->>Painting.color 
}