特定用例的自引用核心数据模型

Posted

技术标签:

【中文标题】特定用例的自引用核心数据模型【英文标题】:self-referencing core data model for specific use case 【发布时间】:2014-04-23 15:53:08 【问题描述】:

我看过其他帖子说自引用核心数据实体是可能的,但我觉得我的用例有点不同,我很难理解如何连接。

我有一个 Person 实体,我想跟踪 2 件事: - 用户“访问过”其个人资料的 Person 实体数组 - 一组查看过“此”用户个人资料的 Person 实体

逆逻辑让人难以理解。

我有用户 A,用户 B。

如果用户A访问用户B,需要建立如下关系: - 用户 A 访问的个人资料显示用户 B。 - 用户 B 应该看到用户 A 访问了他。

这是一个对多的关系,因为只有当你知道你关注了谁以及谁在关注你时,事情才会“有趣”...... :-)

我是否让这变得比现在更复杂? :-(

我尝试了什么:

Person Entity
-visitedProfiles : inverse is viewedProfiles (To-Many relationship)
-viewedProfiles : inverse is visitedProfiles (To-Many relationship)

Result:  
 User A --> User B (user A visists user B)
 User A sees User B in BOTH (visitedProfiles and viewedProfiles) relationship.

Side-effect:
Also, regardless of how many profiles I visit, "visitedProfiles" and "viewedProfiles" always has only 1 item in the array (ie. the last profile I visited)

【问题讨论】:

【参考方案1】:

这不是一个特别复杂的案例。不过,我个人觉得你的用词有点令人困惑。 “viewedProfiles”和“visitedProfiles”对我来说听起来不像彼此的倒数。 “viewedProfiles”和“viewers”怎么样?

不过,无论选择什么词,都按照您所描述的那样设置关系。如果将 B 添加到“A 的查看者”中,那么 B 的“viewedProfiles”也会更新。

了解最近查看/访问的副作用需要一些额外的工作。您可以为观众/被观看者使用有序关系;这感觉像是最简单的事情。或者,您可以添加一个新实体,即访问,它会记录查看者、被查看者以及访问的时间/日期。但第二种方法确实更复杂。

【讨论】:

谢谢,命名约定也让我更容易理解。 是的,第二种情况是我试图实现的——即,跟踪有关关注的某些元数据,但我删除了所有代码只是为了让基本的东西正常工作。此外,我的代码中有一个错误,它没有将更改推送到 CD 上下文。稍后我将添加其他元数据功能。我将把它标记为已接受。再次感谢您修复命名约定并验证我的假设,因为我试图过多地与 Core Data 作斗争:-)【参考方案2】:

您对关系的定义看起来不错。您可以拨打任一电话

[a addVisitedProfilesObject:b];

[b addViewedProfilesObject:a];

b 添加到a.visitedProfiles ab.viewedProfiles

【讨论】:

谢谢,我就是这样设置的。我自己的代码中有一个错误,阻止了保存。您对 [link]***.com/questions/20447142/… 的回答也非常有帮助。

以上是关于特定用例的自引用核心数据模型的主要内容,如果未能解决你的问题,请参考以下文章

用Use case获取需求的方法是否有什么缺陷,还有什么地方需要改进

UML和模式应用4:初始阶段--需求制品之用例模型示例

在软件工程中“用例”和“用例图”有啥区别是啥?

用Use Case获取需求的方法是否有什么缺陷,还有什么地方需要改进?

数据库各个派系的起源和应用场景

(N)Hibernate“每个应用程序会话”被认为是特定用例的邪恶?