我正在尝试从纯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)
答案 0 :(得分:0)
修改强>
考虑到你的澄清......
您可能想重新审视自己的设计,看看什么效果最好。但是,一个简单的方法就是......
ContentObject
title: NSString
type: whatever
content: NSString
subcontent: 1-to-Many relationship to ContentObject
在Xcode模型视图中,您只需按住Ctrl键单击并从ContentObject拖动到自身。将自我引用。
然后,将它变为多个,并将其命名为“subcontent”或其他任何名称。然后,将反向关系命名为“parent”。
现在,您有一个对象列表,您可以将子对象添加到每个对象,CoreData将自动管理指针。您还可以为任何属性添加索引,以便更快地进行搜索。
如果您的实际内容可能会变大,您可能希望将其作为自己的实体,并与之建立关系。