Core data 什么';在核心数据中模拟数组类型属性的最佳方法是什么?

Core data 什么';在核心数据中模拟数组类型属性的最佳方法是什么?,core-data,data-modeling,Core Data,Data Modeling,我有一个联系人列表,每个人都有几封电子邮件 我是否应该创建一个联系人核心数据实体和一个电子邮件实体,并将多个电子邮件对象链接到一个联系人对象?或者我应该用另一种方式,例如连接所有电子邮件并将它们存储为一个大字符串 处理这种配置最干净、最有效的方法是什么 谢谢 我是否应该创建联系人CoreData实体和电子邮件实体,并将多个电子邮件对象链接到一个联系人对象 这个解决方案听起来很合理。尽管如此,它仍然不是“数组类型属性”,因为许多关系是无序集而不是有序数组。始终将核心数据视为对象图,并相应地对数据建

我有一个联系人列表,每个人都有几封电子邮件

我是否应该创建一个
联系人
核心数据实体和一个
电子邮件
实体,并将多个电子邮件对象链接到一个联系人对象?或者我应该用另一种方式,例如连接所有电子邮件并将它们存储为一个大字符串

处理这种配置最干净、最有效的方法是什么

谢谢

我是否应该创建联系人CoreData实体和电子邮件实体,并将多个电子邮件对象链接到一个联系人对象


这个解决方案听起来很合理。尽管如此,它仍然不是“数组类型属性”,因为许多关系是无序集而不是有序数组。

始终将核心数据视为对象图,并相应地对数据建模


您应该有一个联系人实体和一个电子邮件实体。电子邮件应位于与联系人的一对多双向关系的另一端。如果您关心特定的顺序,那么您还应该在电子邮件实体中具有一些可排序的值,以便以后进行排序。

您的实体图将类似于(伪代码):

联系人{
名称:string
电子邮件地址:string
//…联系人的其他属性
电子邮件>Email.contact
}
电子邮件{
发件人:string
//…电子邮件的其他属性

contactOk谢谢。在我看来,这个解决方案在获取数据方面效率较低,但可能无关紧要。它的效率并没有降低。核心数据在对象重用等方面比您自己的代码要高效得多。加上过滤和搜索,它的效率要高得多。
Contact{
    name:string
    emailAddress:string
    //...other attributes of contacts
    emails<--(optional,cascade)-->>Email.contact
}

Email{
    from:string
    // ... other attributes of emails
    contact<<--(required,nullify)-->Contact.emails
}