1

データベースに保存する必要のあるフォルダ構造があります。各フォルダには、名前、主キー、および親フォルダへの外部キーがあります。したがって、フォルダにはサブフォルダを含めることができます。

私が問題を抱えているのは、ユーザーが上下に移動したり、新しいサブフォルダーを追加したり(サブフォルダーの追加はツリーの最後に追加されます)、サブフォルダーの順序を記録したい場合です。

ユーザーの注文をテーブルに記録するにはどうすればよいですか?

したがって、Aの下にサブフォルダーB、C、およびDが(この順序で)あり、Dを上に移動すると、順序はB、D、Cの順になります。これをデータベースにどのように反映しますか?

4

4 に答える 4

2

sub-hirarchyを作成する場合は、整数を使用してorderby句を適用して並べ替えることができます。例えば

ID, ParentID, SortOrder, Name

SortOrder0とfoldercount-1の間の整数はどこにありますか?

ORDER BY SortOrder ASC

また、テーブルにLineage and Depthフィールドを追加することをお勧めします。そうすれば、コストのかかるクエリを実行しなくても、ツリーを簡単に上下に移動できます。この記事をご覧ください。

于 2012-07-27T14:53:53.030 に答える
2

ネストされたセットと呼ばれる、階層構造を1つのテーブルに保持する別の方法があります。このモデルでは、ツリーを変更することで、子ノードまたは親ノードのクエリを高速化できます。

テーブルを検討してください

id    left    right    node

0     0       9        root node
1     1       4        left node
2     5       8        right node
3     2       3        left sub node

....など

ノードNのすべての親を取得するには、(left-i; right-i)にset(letf-N; right-N)が含まれるすべてのレコードを検索する必要があります。

ノードNのすべての子を取得するには、(left-i; right-i)が(left-N; right-N)に含まれているすべてのレコードを見つける必要があります。

したがって、入れ子集合モデルを使用すると、再帰なしで単純な階層クエリを実行できます。

これが入れ子集合モデルに関するwikiです

于 2012-07-27T14:56:20.547 に答える
0

HierarchyIDデータ型を検討しましたか?

http://msdn.microsoft.com/en-us/library/bb677290

http://msdn.microsoft.com/en-us/magazine/cc794278.aspxを参照してください

于 2012-07-27T14:58:02.907 に答える
0

おそらくあなたが探しているのは階層クエリです。これにより、階層テーブルに対して深さ優先クエリを自動的に実行し、階層の任意のレベルで並べ替え順序を定義できます(各フォルダーが順序付けられますが、各アイテムの後に、次のアイテムを取得する前にサブアイテムを取得します)そのフォルダのアイテム)。

于 2012-07-27T15:00:28.217 に答える