使用Core Data / sqlite正确收集元数据/对象数据

时间:2013-09-05 16:05:02

标签: ios objective-c sqlite core-data

我是客观c和核心数据的新手。我正在制作一款类似闪存卡应用的iOS应用。我有一个核心数据,与一个与ForeignWord实体(不同语言)有多对一关系的EnglishWord实体。

对于每个ForeignWord实体,我想跟踪某些元数据:我查看了多少次这个词,我查看它的日期,我给它的分数等等。理想情况下,如果我可以有一个数组/字典作为ForeignWord管理对象本身的属性。这是不可能的。

我能想到的唯一选择是创建一个名为'Score'的新实体,每个ForeignWord实体'拥有'许多Score管理对象(一对多),每次我创建一个新的'Score'管理对象查看外国语。

然而,这听起来非常混乱。如果我有1000个单词,那么我将在sqlite数据库中有1000个不同的表,每个卡一个...这会减慢速度吗?有1000个不同的表是不是很糟糕?

这真的是这样做的吗?有更优雅的解决方案吗?谢谢!

2 个答案:

答案 0 :(得分:1)

您可以考虑添加一个名为“Viewing”的表格,该表格与EnglishWord和ForeignWord都有关系(对1)。然后,您可以跟踪此表中感兴趣的元数据,并汇总此表中的数据,以确定您查看特定单词的次数,是否正确识别,等等。

答案 1 :(得分:0)

我会创建一个名为ViewEntry的新表,或者与两个单词表的链接关系。这样,当一个单词被查看时,您可以存储您想要的任何元信息,以及具有英语和外国版本的活动链接。像这样:

enter image description here

通过这种方式,您可以创建一个新的ViewEntry,将其foreignVersionword属性设置为英语和外语单词,设置日期,分数和总答案时间(以及您想要的任何其他内容) 。然后你可以做一些非常好的查询来获取有用的信息。

  
      
  • 给我所有英文单词“school”的国外版本,其中得分低于50%。

  •   
  • 我希望用户一直尝试俄语翻译“house”及相关分数。

  •   
  • 英语单词的最差/最佳成绩是什么?

  •   
  • 最/最不看英文(或外国)字是什么?

  •   

所有这一切都相对容易,因为英语单词可以访问它所查看的所有时间,任何英语版本的任何外国版本都可以这样做。您还可以访问分数和查看日期,并从该数据中提取所有英语/国外版本。

您也不需要创建1000个表:)