私は次のような場合があります。私は、階層データを格納するためにネストされたセットモデルを使用しています。このモデルは、特定のサブカテゴリを特定のクライアントにのみ使用できるようにするオプションを追加したいという点を除いて、ほとんど同じです。テーブルの編集はVB.NETアプリケーションから外部的に行い、新しいテーブルをデータベースに送り返します。クライアント固有のノードを含む入れ子セットモデル
私はそれを達成するために2つの異なる選択肢を考えました。最初に、クライアントIDを連結する新しいclient_idフィールドを追加します。次に、文字列内の特定の番号を探すためのクエリを実行します。 #1はすべてのユーザーを指しますが、それとは異なる番号は特定のクライアントを指します。
+-------------+----------------------+-----+-----+---------+
| category_id | name | lft | rgt |client_id|
+-------------+----------------------+-----+-----+----------
| 1 | MAINCAT1 | 1 | 20 | 1|
| 2 | subcat1 | 2 | 9 | 2;4|
| 3 | subcat2 | 3 | 4 | 3|
| 4 | subcat3 | 5 | 6 | 1|
| 5 | subcat4 | 7 | 8 | 2;3|
| 6 | MAINCAT2 | 10 | 19 | 1|
| 7 | subcat1 | 11 | 14 | 1|
| 8 | subcat2 | 12 | 13 | 1|
| 9 | subcat3 | 15 | 16 | 3;4|
| 10 | subcat4 | 17 | 18 | 3;4|
+-------------+----------------------+-----+-----+---------+
2番目のオプションは、すべてのクライアントに新しいフィールドを追加し、カテゴリを有効/無効にするために何らかのマーク(1/0など)を使用することです。
+-------------+----------------------+-----+-----+---------+---------+
| category_id | name | lft | rgt |client_2 |client_3
+-------------+----------------------+-----+-----+---------+---------+
| 1 | MAINCAT1 | 1 | 20 | 1| 1|
| 2 | subcat1 | 2 | 9 | 0| 1|
| 3 | subcat2 | 3 | 4 | 0| 1|
| 4 | subcat3 | 5 | 6 | 1| 0|
| 5 | subcat4 | 7 | 8 | 1| 0|
| 6 | MAINCAT2 | 10 | 19 | 1| 1|
| 7 | subcat1 | 11 | 14 | 0| 1|
| 8 | subcat2 | 12 | 13 | 0| 1|
| 9 | subcat3 | 15 | 16 | 1| 0|
| 10 | subcat4 | 17 | 18 | 0| 1|
+-------------+----------------------+-----+-----+---------+---------+
フィールドを追加/削除する必要がないため、最初のオプションを使用することをお勧めします。私はクエリの実行が遅くなると思っていますが、テーブルを非常に長くする予定はありません。どの方法がより適切だと思いますか?
どちらでもない。 lft、rgtの隣接リストを使用してください。 CSVはばかばかしいでしょう。 2番目はキャリア入門者です。 – Drew
私は既にlft、rgtを使用しています。 –
最後の列では、先頭のチャンクにcsvを挿入しないでください。 – Drew