-7

私のデータ構造は次のようなものです:

+-------------+------+-------+
| USERID (PK) | LEFT | RIGHT |
+-------------+------+-------+
|     001     |      |  002  |
|     002     | 003  |  004  |
|     003     | 005  |       |
|     004     |      |       |
|     005     | 008  |  007  |
|     008     |      |       |
|     007     | 009  |       |
|     009     |      |       |
+-------------+------+-------+

このデータ構造は二分木を表します。各行はノードを表し、それぞれにUSERID. LEFTおよび列のエントリは、 sRIGHTで参照することにより、そのノードの 2 つの子を表しますUSERID。この木を通り抜けたい。

Access データベースで Visual Studio 2005 を使用しています。

4

1 に答える 1

2

私が思いつく最善の答えは、データの表現方法が完全に間違っているということです。

ユーザー ID を表すはるかに賢明な方法は、ユーザーの詳細を保持する (私が推測する) テーブル内の単純な列として、高速検索を提供するインデックスを使用することです。次に、「トラバーサル」は単純な選択と結果セットの反復に退化します。

現在の(IMOばかげた)テーブル構造を続行したい場合、SQLはツリーのトラバーサルを行うのに役立ちません。データベース内のツリーをトラバースしようとすると、ツリー内の各ノードに対して選択を行うことになり、非常に遅くなります。

最善の策は、テーブルのすべての行を選択し、メモリ内にツリーを構築して、そのツリーをトラバースすることです。

于 2010-11-07T10:06:15.720 に答える