私は2つのアプローチを試しましたが、入力のサイズが大きくなるにつれて、一般的にどちらがうまくいくかを判断できません。
まずは裏話:
製品があり、各製品にはカテゴリ パスがあります (例: アクセサリー-靴-スニーカー)
3NF ルールとの互換性を維持しながら、製品をそれぞれのカテゴリに関連付けたいと考えています。
この2つの方法については、次のことができます。
製品とカテゴリの間に多対多の関係を持たせる (カテゴリ パスを個々のカテゴリに拡張し、多対多のテーブルで関連付けを形成することにより)
長所:
シンプルでわかりやすい。短所:
多対多関連は指数関数的に成長します! 各製品には複数のカテゴリがあり、テスト ケースには 250,000 個の製品しか含まれていない理由が想像できます。入力のサイズが大きくなると、データベース エンジンへの負荷が大きくなることが直感的にわかります。カテゴリ パスと製品の間に多対多の関係を作成し、カテゴリ パスと実際のカテゴリの間に別の多対多の関係を作成します。250,000 製品のテスト ケースのカテゴリ パスは 13,000 の一意のインスタンスに制限されており、別の多対多の関係で実際のカテゴリに関連付けられているこれらのパスは 61,000 行を超えないため、これは理にかなっています。
長所:
データベースが迅速に通過するカテゴリの関連付けがはるかに少ない (最初の手法で形成された 900,000 の関連付けと比較して、61,000 の関連付け)短所:
内部結合がはるかに多くなります。製品はカテゴリ パスに接続され、カテゴリ パスは多対多の関係でカテゴリに接続されます。
これらのテクニックのどれがより適していると思いますか? FAST 検索が必要なため、高速な select ステートメントが主な条件となります。
これの多くは適切なインデックス作成に依存することを認識していますが、最初のシナリオでは行のサイズが少なくとも 3 倍に増加しますが、2 番目のシナリオでは非常に多くの内部結合があり、検索速度が低下するのではないかと心配しています。悪影響を受けています。