0

カテゴリのテーブル構造がありますが、

各カテゴリには多くの子を含めることができますが、1つのカテゴリの子にしかなれません。

テーブルに列を追加するだけでよいのか、それともとだけでそれらをマップする参照テーブルを追加するのかを決定していますparent_idparent_idchild_id

重要な場合、カテゴリに親を含めることはできません。その場合、カテゴリはルートカテゴリになります。

このテーブルの最も一般的な使用例は次のとおりです。

1つのカテゴリを選択
するすべてのカテゴリ
を選択するカテゴリのすべてのを選択するカテゴリ
を選択するカテゴリの子ツリー
選択する

私が知る限り、この設定の参照テーブルを持つことの利点はありませんか?誰かが参照テーブルを使用する理由を知ることができますか?

4

1 に答える 1

1

参照テーブルを追加すると、望ましくない n:n の関係が作成されます。

したがってparent_id、テーブルに a を追加するだけです。カテゴリをルートとして定義できるように、null 可能にします。

子ツリーを除いて、選択したいものはすべて非常に簡単ですが、余分なテーブルは役に立ちません。Oracleconnect byでは、ツリーのようなデータを選択する必要がありますが、MySQL は残念ながらそれをサポートしていませ

いくつかの障害があります:

  1. 一意にすることはできないparent_id(複数の子が同じ親を持つことができる) ため、トリガーを追加して 1 つのカテゴリのみをルートにする必要がありますが、現時点ではそのチェックなしで生活できるかもしれません。

  2. 理論的にはループを作成できます。a を b の親、b を c の親、c を a の親にします。これに該当するかどうかを確認するには、ルートへのパスをたどる必要があります。そのパスで任意のカテゴリを 2 回見つけると、問題が発生します。トリガーを使用してこれを検証することもできると思いますが、現時点ではそのチェックなしで生活できるかもしれません. すべてはデータの編集方法に依存しますが、完全なツリーをクエリする場合、破損したデータが原因で無限ループに陥りたくはありません。

于 2012-10-04T08:08:09.950 に答える