Delphi:模仿MS OneNote的数据结构

时间:2009-06-22 21:14:05

标签: delphi data-structures

MS的OneNote使用的数据层次结构本质上是一个简单的树,即使信息是通过选项卡式界面而不是树视图显示的。你从“笔记本”开始,它可以有“部分”,它们有“页面”。我正试图模仿这个。在我的例子中,页面将链接到RichEdit的内容。

我的问题不在于我无法想办法做到这一点。我的问题是,我不确定哪种可能性最终会最简单。那就是我希望你进来的地方。

例如,我可以使用常规[MyBase]数据库。页面数据集将包含其名称和RichEdit数据的字段。页面将嵌套在Sections中,Sections将嵌套在Notebooks中。

如果我考虑了一段时间,似乎这可以用简单的stringLists建模,特别是如果列表中的每个元素都包含逗号分隔的ID和层次结构中的位置的单独值,以及笔记本/部分/页面名称。

但是,这似乎也可能非常适合XML ...如果我要了解更多关于XML的信息: - )

你觉得有什么经验的人会怎么想?

一如既往地谢谢......

5 个答案:

答案 0 :(得分:3)

无论您使用数据库还是XML,请尝试将数据访问例程放在数据模块中。让您的GUI单元调用数据模块的公共方法,并确保这些调用不依赖于数据的存储方式。这样,您可以从一种方法开始,只需编辑数据模块即可切换到另一种方法。

答案 1 :(得分:3)

您可以尝试的一件事是使用结构化存储系统。这个概念很简单,你使用数据文件很像磁盘和文件夹...就是文件夹和文件都在你的独家控制之下。唯一的问题是它不能很好地扩展到多个用户,但XML也不是。 (gabr的blog

提供了一个很好的结构化存储库

对于“多用户”系统,您最好的选择是使用表格来实现。您可以使用Microsoft Access和ADO很好地开始使用Microsoft Access和ADO,它可以非常轻松地迁移到MS Sql Server。从您的简短描述中,我希望您有三个表,NOTEBOOKS,SECTIONS,PAGES。页面将具有外键关系(细节/主)与节和节将与笔记本具有外键关系。

答案 2 :(得分:2)

我认为这取决于您希望如何保存数据。如果您将数据库用于共享访问,速度和大量数据:只需规范化数据并创建您建议的结构。

如果您希望用户在文件系统上本地保存数据,我认为XML将是一个很好的解决方案,因为它允许您将数据存储在结构化文件中。

那么......您希望用户如何存储和使用数据?

答案 3 :(得分:2)

如果要将其存储在文件系统中,为什么不使用....文件夹?这就是OneNote所做的。 “笔记本”和“部分组”只是常规文件系统文件夹。唯一的另一个级别是.one文件。那里的层次结构非常有限(它只是页面,其中任何一个都可以标记为子页面,但这些子页面并没有真正地与父级链接。)

在.one文件中,您可以使用XML来表示您的页面,但这不是OneNote的功能。 OneNote使用二进制文件格式,以便于快速编辑,对象级同步,多用户访问和紧凑存储。

如果您四处寻找有关“随机访问文件”的信息,您可以了解如何执行此操作。但是如果您认为它可能会变大,请尽量避免使用XML,因为编辑会变得很麻烦。您需要加载整个XML文件,在内存中进行更改,然后再将整个内容写回来。

答案 4 :(得分:1)

我认为你的数据就像一棵树。

node { 
    id
    parent_id
    content
    type
}

paren_id = 0的节点是笔记本。 type是可选的,但可能很有用。 页面和笔记本上的内容将免费为您提供页面/笔记本描述:D

我将在sqlite或MyBase或其他任何地方使用一个简单的表。 我认为一个小db比Xml好,因为xml强制你加载内存中的所有数据。