0

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

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

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

id
parentId
content
contentType
nContent
vieworder

其中 nContent 是我需要放弃的变音符号/不区分大小写的字段,因为它会大大降低我的数据库速度(我使用了索引,我使用了优化,但我找不到任何东西来加快搜索过程)。

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

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

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

其中“章节/标题/内容”是内容字段(因此它从大于 256 的小字符串到大文本块不等)。

所以我的问题是: * 如何在核心数据实体/类中实现这种结构(我知道它需要自引用关系) * 如何找到每个级别的项目(例如我想找到所有 Title 类型-- 这就是我有 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)
4

1 回答 1

0

编辑

考虑到你的澄清...

你可能想重新审视你的设计,看看什么效果最好。然而,一个简单的开始方法是......

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

在 Xcode 模型视图中,您只需从 ContentObject 控制单击并拖动到自身。将进行自我参考。

然后,将其设为多,并将其命名为“子内容”或其他名称。然后,将反向关系命名为“父级”。

现在,您有一个对象列表,您可以将子对象添加到每个对象,CoreData 将自动管理指向彼此的指针。您还可以为任何属性添加索引以加快搜索速度。

如果您的实际内容可能会变得很大,您可能希望使其成为一个独立的实体,并与之建立关系。

于 2012-04-26T13:11:16.453 回答