2

我有一个项目,我希望在基本上是一个平面数据库系统(简而言之,它是 XML 记录的集合)中存储分层信息(特别是类别和子类别)。我想在系统中存储有关类别和子类别的信息:

  • 动物
    • 无脊椎动物
    • 脊椎动物
  • 天气
  • 建筑物
    • 摩天大楼
    • 历史建筑

……等等。

系统中的所有内容,无论好坏,都存储为 XML 记录;这就是存储系统的工作方式。

这意味着系统中的每个类别也存储为 XML 记录,如下所示:

<record id="12345">
   <attribute name="Skyscrapers" />
   <attribute type="Category" />
</record>

所以我想知道如何在这些约束下实现层次结构。

我习惯于在关系数据库中存储数据。在这些情况下,我几乎总是使用嵌套集模型。在这种情况下,这似乎不是一个好的选择,因为:

  1. 每次插入项目时,都必须更改许多节点的right和/或 left值。我无法对 XML 文件进行批量更新,因此我必须单独更新每个文件。
  2. 尽管有一些搜索功能可以让我按“小于”或“大于”进行过滤(所以理论上我可以只提取给定类别的相关子节点或父节点),但我无法对 XML 记录进行排序按属性。所以我必须检索所有文档,将它们转换为可以排序的对象列表(在这种情况下使用 Python),然后使用lambda函数对它们进行排序。

由于我的数据存储模型与使用 NoSQL 存储数据没有显着不同,我想知道是否有人使用该存储机制提出了处理和存储分层数据的好技巧。

4

2 回答 2

1

此类(基于Peewee ORM)允许您使用平面关系数据库(支持 PostgreSQL、MySQL 和 SQLite)处理分层数据:

https://github.com/mathieurodic/peewee-tree/blob/master/node.py

您可以在类方法中进行一些更改,以便这些更改也适用于您正在操作的 XML 文件。

于 2014-06-12T07:56:20.807 回答
0

不确定这对您的用例有多适用,但作为一个想法,也许使用Beautiful Soup会有所帮助。也许它的默认分层表示足以满足您的需求。

于 2011-04-04T22:28:24.807 回答