我有一个项目,希望在基本上是平面数据库系统(简而言之,它是 XML 记录的集合)中存储分层信息(特别是类别和子类别)。我想在系统中存储有关类别和子类别的信息:
- 动物
- 无脊椎动物
- 脊椎动物
- 天气
- 建筑物
- 摩天大楼
- 历史建筑
...等等。
系统中的所有内容,无论好坏,都存储为 XML 记录;这就是存储系统的工作原理。
这意味着系统中的每个类别也存储为 XML 记录,如下所示:
<record id="12345">
<attribute name="Skyscrapers" />
<attribute type="Category" />
</record>
所以我想知道如何在这些约束下实现层次结构。
我习惯于在关系数据库中存储数据。在那些情况下,我几乎总是使用 nested set model .在这种情况下,这似乎不是一个好的选择,因为:
- 每次插入项目时,您 必须更改
right和/或left许多节点的值。 我无法对 XML 进行批量更新 文件,所以我必须更新每个 一个人。 - 虽然有搜索功能可以让我过滤 “小于”或“大于”(所以我 理论上只能拉 相关子节点或父节点 给定类别),我无法订购 XML 记录的属性。所以 我必须找回所有的 文档,将它们转换成 可以排序的对象列表 (在本例中使用 Python)然后 使用
lambda函数对它们进行排序。
由于我的数据存储模型与使用 NoSQL 存储数据没有明显不同,我想知道是否有人使用该存储机制想出了一个处理和存储分层数据的好技巧。
请您参考如下方法:
此类(基于 Peewee ORM )允许您使用平面关系数据库(支持 PostgreSQL、MySQL 和 SQLite)处理分层数据:
https://github.com/mathieurodic/peewee-tree/blob/master/node.py
您可以在类方法中进行一些更改,以便这些更改也适用于您正在操作的 XML 文件。
