2

我使用嵌套集架构对数据库中的父子关系进行了建模。

每个孩子(叶子)都链接到一个包含开放日期的表格,但父母没有。

我希望能够检索在某个时间打开的所有叶子,如果该父母的所有孩子都打开了,他们的父母。

有没有办法快速做到这一点?我想像做一个子请求这样的事情,但这既不漂亮,也不快;最好的办法是在一个查询中完成。

我可以将我的嵌套集架构更改为另一个架构,以便更轻松地构建此请求吗?

编辑:

我正在使用 MySql,但如果这是实现我的目标所必需的,我可以更改为任何其他数据库。

这是我的节点(父子)表的样子:

id (int)
lft (int)
rgt (int)
root_id (int , self reference to the root id, used to generate multi-rooted tree)
level (int)

name (string)
description (string)
...

我的 opening_dates 表如下所示:

id (int)
node_id (int)
start (datetime)
end (datetime)
status (bool, 0 for an opened date, 1 for a close one)

我还补充说,我的父子不会经常更改,这就是我决定采用嵌套集合架构的原因。我的目标是在“选择查询”系统时尽可能快。

4

1 回答 1

0

据我所知,MySQL 不支持分层查询。使用 Oracle 非常简单,但如果是 MySQL,您可能需要为此目的创建存储函数。尝试阅读这篇如何在 MySQL 中创建分层查询

于 2012-05-24T13:59:30.097 回答