python - 嵌套集模型或其他表示层次结构的模型?

标签 python xml hierarchical-data nested-sets flat

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

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

...等等。

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

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

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

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

我习惯于在关系数据库中存储数据。在那些情况下,我几乎总是使用 nested set model .在这种情况下,这似乎不是一个好的选择,因为:

  1. 每次插入项目时,您 必须更改 right 和/或 left 许多节点的值。 我无法对 XML 进行批量更新 文件,所以我必须更新每个 一个人。
  2. 虽然有搜索功能可以让我过滤 “小于”或“大于”(所以我 理论上只能拉 相关子节点或父节点 给定类别),我无法订购 XML 记录的属性。所以 我必须找回所有的 文档,将它们转换成 可以排序的对象列表 (在本例中使用 Python)然后 使用 lambda 函数对它们进行排序。

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

最佳答案

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

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

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

关于python - 嵌套集模型或其他表示层次结构的模型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5544998/

相关文章:

mySQL 与复杂实体的树关系

mysql - 父类别的所有子类别列表

python - 来自另一个数据集的两个日期的语句之间的 Pandas

python - 两个呈现的类之间有什么区别?他们的工作方式不同吗?

python - 发送添加了用户代理的 QHTTP 请求

c# - 返回用内存流初始化的 SqlXml

python - 在 Python 3 中使用 Open Arbitrary 标签解析 SGML

mysql - 如何向表示多对多关系的 MySQL 闭包表添加排序顺序?

python - Django 使用替换的 Auth 模型抛出操作错误

sql-server - 使用 XQuery 仅查找并替换 xml 值的一部分?