首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >复制核心数据中的实体

复制核心数据中的实体
EN

Stack Overflow用户
提问于 2010-12-02 13:34:27
回答 4查看 890关注 0票数 1

我有几个核心数据实体。学生和考试。

现在,最初的考试只是一个考试对象--数学考试3,英语考试2等等。

在我的数据模型中,学生和考试之间有一种关系(一个学生可以有几个考试)。但一开始,考试是免费的,不附加于任何学生。

我如何制作一份考试的副本,并把它附在学生身上?

如果我做这样的事:

代码语言:javascript
运行
复制
[student addExamsObject:examObject];

...then我认为它只是简单地引用了最初的考试,而不是复制一份。

我需要一份副本,因为考试中有一个布尔级的“匆匆”,当学生参加考试时,这是肯定的。但是,如果我现在设置它,它将使它看起来像是所有的学生参加了那次考试。

澄清:我宁愿不重组我的模式。这些数据是从几个xml文件中提取的,每个文件都是为学生和考试准备的,这些文件被解析到Core数据存储中。例如,一个考试对象可能如下所示:

代码语言:javascript
运行
复制
name:Maths 5
class-id:12
year-id:4
student-id:0

..with的学生对象看起来像

代码语言:javascript
运行
复制
name: Dave
class-id:12
year=id:4
student-id:222

各种规则都是为了指导哪些考试被附加在哪些学生身上.例如,如果所有考试的if都是0,那么所有的学生都参加考试。如果班级id和学年id匹配,而学生id是0,那么考试将被添加到同一个班级和年份的学生中。如果学生证符合,那么只有那个学生参加考试。等等,我不能改变从服务器输出xml的方式。

另一个问题是考试与问题实体有太多的关系.换句话说,考试中的问题。我必须保存每个学生在考试中提出的问题的答案。

编辑:我希望人们回答我的问题,而不是告诉我重组我的整个程序。数据模型之所以像现在这样构造是有原因的。

Edit2:也许我会重组..。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-12-02 14:19:18

考试不应该有hasTaken属性。在现实世界里好好想想。考试不知道谁参加了考试,因为很多人都可以参加考试。那么,参加考试的例子应该是你的模型中的头等概念.

考虑到这一点:

考试有很多TakenExams,TakenExams属于学生TakenExams

现在,参加考试的概念是一个真实的对象,然后您也可以建模集合元数据,例如dateTakenscore等等。

还请记住,Core Data要求您也设置所有逆关联。

票数 2
EN

Stack Overflow用户

发布于 2010-12-02 14:00:15

你通常不会复制一个实体。(我不知道如果你用copyNSManagedObject上打电话会发生什么.据我所知,这在文档中没有解释。专家可以纠正我。)

只需创建另一个实体,或编写一个方法就可以做到这一点。

我认为另一种方法是在ExamStudent之间建立多到多的关系。

  • Exam中创建名为studentsToTakeThisExamstudentsWhoTookThisExam的关系。
  • Student中创建名为examsToTakeexamsAlreadyTaken的关系。

并建立了相应的逆关系。

票数 1
EN

Stack Overflow用户

发布于 2010-12-02 14:08:16

在这种情况下,你真的不想复制考试。你最终会有很多没有关系的同名考试,然后你会被迫(如果你想的话)按他们的名字分组。

我推荐一个新的实体(也许是"ExamSitting"?)它表示坐在一个Student上的Exam。然后,您可以从StudentExamSitting再到多,从ExamExamSitting可以多到多。这使您能够在ExamSitting上拥有任意数量的属性(hasTakengrade等)。

编辑

好吧,考虑到你的澄清,我还有一两点要补充(尽管它们可能不是你想要的)。我知道您是从具有特定结构的文件中加载的,但这并不一定需要指定您的结构。

使用您现在描述的XML文件,我仍然会使用Exam - Student - ExamSitting模型。如果要实现它,我将加载所有的Student,然后,对于考试文件中的每一项记录,我将创建一个Exam对象,然后创建多个ExamSitting对象,每个Student都符合记录中定义的条件。如前所述,这使您能够存储有关每个事件的更多信息,如marktakenDate等。

如果您确信不需要能够在此粒度上存储其他信息,则只需创建一个to -多关系studentsTakingExam即可。在加载每个考试记录时,可以通过查询加载的Student实体来填充这些内容。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4335560

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档