1

私は小さな C# Windows アプリケーションを開発しており、階層カテゴリ構造の設計が必要です。私は現在、DB の単一レイヤー カテゴリを使用しています。つまり、子カテゴリはありません。ユーザーが複数のレベルのカテゴリを作成できるようにしたいと思います。このスレッドData structure for Categoryを調べましたが、この種の問題に対処する簡単な方法があるかどうか考えていましたか? これが問題の最善の解決策になるかどうかわからないからです。

誰かが DB テーブル構造とそれに付随するいくつかの C# コード コードを提供できれば幸いです。また、親からすべての子カテゴリ ID (サブ子を含む) を取得できるかどうかを確認したいと考えていました。

4

5 に答える 5

4
create table Category
(
     id int primary key identity,
     parent_id int,
     name varchar(100),
     foreign key (parent_id) references Category (id)
)

public class Category
{
    private int id; 
    private string name;
    private Category Parent;
    private IList<Category> Children;
}

これはツリーを作成する単純なソリューションであり、オブジェクト階層を再水和する場合、そのソリューションには多数の DB 選択が必要になります。選択の数を減らし、ツリー内のノードの順序を覚えておくための情報もいくつか保存する必要があります。

Joe Celko はSQL ツリーについてかなり多くのことを書いていますが、これは私が入力できるものよりもはるかに価値があります。sqlteam.comの「 More Trees & Hierarchies in SQL 」を見ているときに、そのリンクを見つけました。

于 2009-12-16T15:15:15.663 に答える
0

私の質問を読んでくれた返信と検討に感謝します。

私は現在、単一のカテゴリ設定の構造をすでに持っていますが、非常に簡単です。少しシンプルなルートを考えていました(もっとシンプルなルートだと思いますが、間違っているかもしれません)。

私は現在、children_idsというカテゴリテーブルに列を追加することを考えています。すべての親がその逆ではなく、そこにいる子供たちの記録を保持するように。私のchildren_ids列はテキストタイプにすることができ、IDは文字列形式(1-4-5-7-8など)で保存できます。DBからこの列を取得したら、文字列を「-」で分割してすべてを取得できます。その子のID。

このようにすれば、私がすべての人口を監視するのが少し簡単になると思います;)、ただ親に彼らの子供について尋ねてください。すべての子(再帰的に下のすべてのレベル)のリストを取得するだけでよいので、依存関係の検索も簡単になると思います。このようにして、DBからロードする前にすべての全体を並べ替えることもできますが、もう1つの頭痛の種はなくなりました。

そこにはもっと良い解決策が必要だと確信していますが、それがもっと簡単かどうかはわかりません。

私の他の要件は、ユーザーが選択できるフォルダーリスト構造に似た、このカテゴリの子親スタイルのドロップダウンコンボボックスを作成することでした。CodeProjectの例CodeGuruの例のようなものかもしれませんが、私は自分の生活を少し楽にするためにどちらかのアプローチを使用するかもしれません。

問題は、ドロップダウンメニューの各レコード(cat_idなど)に詳細を追加したいのですが、ユーザーに表示したくないということです。これは、ユーザーの選択に関する詳細を取得するためです。おそらくカテゴリのすべての詳細を含む個別のArrayListを用意し、ユーザーがドロップダウンリストからレコードを選択したら、そのインデックスの場所に移動することで、これを補う必要があると思います。私はまっすぐに考えていますか?

読んでくれてありがとう!

于 2009-12-18T17:43:29.427 に答える
0

ハービンダー、

目的のために TreeView コントロールを使用することを検討しましたか? これは完璧なアイデアだと思います。TreeView コントロールに関する MSDN サイトをご覧ください。ここをクリックしてください

于 2009-12-16T11:07:00.843 に答える
0

階層が固定的で変更されない場合は、ハードコーディングできます。

このスレッドは、流動的で常に変化する可能性のある階層に関するものであり、そのシナリオでは、議論されているソリューションが適切です。

于 2009-12-16T10:16:46.180 に答える
0

ハービンダー、

あなたが考えているデータベース構造は完全に機能しますが、欠点はほとんどありません。

  • 指定されたノードのすべての子を見つける単純なSQLクエリは不可能です(文字列操作を実行する必要があります)
  • SQLクエリ内から子供の数でソートすることはできません
  • ノードの子のコレクションを取得するには、データベースに数回接続する必要があります (すべての子を ID で個別に取得するため)。

最も一般的な方法は、1 つの ID (親) を 1 つの列に格納することです。この場合、複数の子が同じ親を指すことができ (1 対多の関係)、問題を効率的に解決できます。

質問の 2 番目の部分は簡単に答えることができます。本当に必要でない限り、Windows フォームを使用しないでください (両方の作成者が使用しています)。データ構造をビューにバインドするのに非常に疲れていることに気付くでしょう。目的に応じて WPF を使用し、Combobox と Treeview のデータ テンプレートを柔軟に変更して要件に対応することをお勧めします。WPF に慣れていない場合は、WPF と MVVM の設計パターンに関するこの素晴らしい記事をご覧になることから始めてください。ツリービューの例も含まれているので、あなたの場合に役立ちます。

私の答えがあなたの問題を解決したかどうか教えてください。WPF に関するご質問にお答えいたします。

于 2009-12-21T13:27:08.147 に答える