核心数据关系

Posted

技术标签:

【中文标题】核心数据关系【英文标题】:Core-Data Relationships 【发布时间】:2013-06-17 12:32:41 【问题描述】:

在我的应用程序中有 N 个用户。每个用户可以有 N 个类别。每个类别可以有 N 个书籍

我创建了以下实体图书元数据、用户、类别

BookMetadata 实体是来自不同用户的书籍数据的唯一集合。

如何在这些实体之间建立关系。

- 用户和类别之间的关系。(一对多用户和书籍(一对多,一个用户可以拥有一本或多于一本书)。

类别和书籍之间的关系。(一对多)。

我对实现这些关系的理解是否正确,我在 CoreData 中创建关系相对较新。 如果没有或有更好的解决方案,请告诉我该怎么做。

编辑:

考虑这种情况,

User 1 -> Category 1 -> Book1,Book2.
       -> Category 2 -> Book3, Book4.

User 2 -> Category 1 -> Book1,Book2,Book3.
       -> Category 3 -> Book4

Here 在上述场景中。同一本书(书 3)针对不同的用户具有不同的类别。 这种情况如何处理?

编辑 2:

我附上了一个示例 sqlite DB 文件@dropbox https://www.dropbox.com/s/nlmdojkk64bkf1b/test.sqlite。

【问题讨论】:

是的,非常正确。你不是设置了从类别到用户以及书到类别的反向关系吗? 用户和类别之间的关系是错误的,一定是多对多:你希望用户能够阅读/购买属于不同类别的书籍,反之,你希望书籍类别能够属于多个用户。相反,类别和书籍之间的关系是正确的(一对多)。 @Anupdas 感谢您的回复。请检查我的编辑。另外,我需要在类别与用户之间以及书籍与类别之间设置反比关系,请您解释一下。 你能解释一下类别在这个系统中的作用吗?此类别是用户创建的。类别对用户来说是唯一的吗?与您给定的信息类别和书籍也将具有多对多的关系。 有了给定的信息,我已经更新了我的答案。看看它是否符合您的要求。 【参考方案1】:

作为惯例,实体应命名为单数。相对于它们的关系,关系应命名为复数或单数。

根据给定的信息,假设类别是由用户创建的,用于对书籍进行分组,如播放列表或其他内容。类别对用户来说是唯一的,并且不会在用户之间共享。一本书可以包含在任意数量的类别中。

所以这会变成

用户>分类

类别 > 书籍

书籍> 分类

关系应该有两个方面。 Inverse 让你定义它。如果一个用户可以有任意数量的类别,而一个类别只能有一个用户。与类别相反的是用户。

【讨论】:

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

核心数据关系

核心数据:有没有办法使用隐含关系而不是真实关系来有效地查询模型?

核心数据:总是有反向关系。为啥?

核心数据关系的性能改进

核心数据与许多对等关系

关系保存时核心数据崩溃