【发布时间】:2020-10-09 16:28:39
【问题描述】:
从我迄今为止的研究来看,这个主题既有据可查,也非常广泛。所以我希望你能给我一些时间来深入了解如何将树存储在数据库中,为我指明正确的方向。
我正在处理问卷,类似于 HL7/FHIR 处理问卷的方式:有两个类:问卷和项目,问卷由一组项目组成。但是,项目可以引用任意数量的附加项目(即孩子)。所以基本上,我有一个 n 元树状结构 - 取决于你想如何看待它 -a)一个问卷对象作为根和若干项作为子项b) 若干项作为根(即森林),每个项又有若干项作为子项
class Questionnaire {
items: Set<Item>
inner class Item {
children: Set<Item>
}
}
不幸的是,这部分数据结构是不可协商的(除了使用内部类,我可以更改)。
我现在正在寻找一种明智的方式来将这种结构存储在我的数据库(目前是 MySQL)中。
幸运的是,我只是存储和阅读整个调查问卷。我不需要访问单个节点或分支,并且数据不会更改/更新(因为根据我的项目定义,对现有问卷的任何更改都会导致新的问卷)。所以我只需要使用 SELECT 和 INSERT 语句,每个语句对应一个完整的问卷(包括所有项目)。
我的第一种方法是颠倒 Item-to-Item 关系,即指一个父母而不是几个孩子。但是,我担心这可能会转化为已经固定的对象结构。我希望有一个相当简单的解决方案。
请注意,我知道使用 ORM 可能有非常好的解决方案,但我最近一直无法理解整个设置进度,现在时间紧迫,无法深入了解。现在,我需要一个纯 SQL 的解决方案来显示结果。 ORM 将不得不稍等片刻,但我会回到这一点!另外请注意,现在性能并不重要。
提前感谢您的努力,我们将非常感谢您的帮助!
【问题讨论】:
-
MySQL 支持将数据存储为 JSON 格式的字符串。由于我的数据无论如何都必须可以表示为 JSON,而且我只编写和读取整个(嵌套)对象,我不能通过使用该功能来规避设计问题吗?