2

ネストされたセット アーキテクチャを使用して、データベース内の親子関係をモデル化しました。

すべての子 (リーフ) は、開始日を含むテーブルにリンクされていますが、親はリンクされていません。

特定の時間に開いたすべての葉と、その親のすべての子が開いている場合はその親を取得できるようにしたいと考えています。

とにかくこれを速くすることはありますか?サブリクエストのようなものを想像しますが、これはきれいでも高速でもありません。最善の方法は、1 回のクエリで実行することです。

このリクエストを簡単に作成するために、ネストされたセット アーキテクチャを別のアーキテクチャに変更できますか?

編集:

私は 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 の場合、そのような目的のためにストアド関数を作成する必要がある場合があります。この Howto create hierarchy query in MySQLを読んでみてください

于 2012-05-24T13:59:30.097 に答える