核心数据从rdbms迁移

时间:2012-04-26 10:09:35

标签: ios sqlite core-data

我正在尝试从纯sqlite(使用FMDB包装器)迁移到核心数据。

我的主要原因是icu问题(我有一些多语言项目 - 德语,西班牙语,希腊语,中文)很难从sqlite中搜索,而不是内核核心数据上的icu。 (NSDiacriticInsensitive | NSCaseInsensitive)

通常我有以下结构的数据(编码书):

id
parentId
content
contentType
nContent
vieworder

其中nContent是一个diacriticsensitive / caseinsensitive字段,我需要放弃,因为它非常慢的数据库(我使用索引,我已经使用了优化,但我找不到任何东西来加速搜索过程)。

我对核心数据概念感到困惑 - 我可以在主 - 细节项目上理解它,但我无法理解如何实现自引用的项目对象 -

使用上述结构存储的典型数据是:

 Chapter A
  Chapter A.1
   Title 1
    Content #1
   Title 2
    Content #2
  Chapter A.2
 [...]

其中“Chapter / Title / Content”是内容字段(因此它从一个小的> 256字符串到一个大的文本块)。

所以我的问题是: *如何在核心数据实体/类中实现此结构(我知道它需要自引用关系) *如何查找每个级别的项目(例如,我想找到所有标题类型 - 这就是我有contentType字段的原因) *在核心数据结构上对此进行索引将为我提供比普通sql更好的索引和更好的搜索速率(我在nContent字段上使用LIKE %%结构)? *将它留在SQLITE上并尝试寻找不同的索引策略是否更好?

请随时回答这些问题,或至少给我一些见解。

更新 这是我的意思的另一个更“现实”的例子:

Beginning HTML (Type: Chapter, parentid:0,id:1)
 The fundamental pieces (Type Chapter, parentid:1, id:2)
  How to begin (Type: title, parentid:2, id:3)
   [content] (Type: content, parentid:3, id:4)
  Using paragraphs (Type title, parentid:2, id:5)
   [content] (Type: content, parentid:5, id:6)
 Using Forms (Type: chapter, parentid:1, id:7)
  ... (and so on)

1 个答案:

答案 0 :(得分:0)

修改

考虑到你的澄清......

您可能想重新审视自己的设计,看看什么效果最好。但是,一个简单的方法就是......

ContentObject
    title: NSString
    type: whatever
    content: NSString
    subcontent: 1-to-Many relationship to ContentObject

在Xcode模型视图中,您只需按住Ctrl键单击并从ContentObject拖动到自身。将自我引用。

然后,将它变为多个,并将其命名为“subcontent”或其他任何名称。然后,将反向关系命名为“parent”。

现在,您有一个对象列表,您可以将子对象添加到每个对象,CoreData将自动管理指针。您还可以为任何属性添加索引,以便更快地进行搜索。

如果您的实际内容可能会变大,您可能希望将其作为自己的实体,并与之建立关系。