私は10個のテーブル(Product_A、Product_B、Product_Cなど)を持っています。それらのテーブルのそれぞれは、親テーブルProduct内の行を指すプライマリキーを持っています。多型関連を扱う:「あまりにも多くの」LEFT JOINのようなものはありますか?
基本的に、私はビルKarwin(ここで説明し、このアンチパターンソリューション: https://fr.slideshare.net/billkarwin/practical-object-oriented-models-in-sql/34-Polymorphic_Assocations_Exclusive_Arcs_Referential)からSQLアンチパターンブックからの勧告を適用している私はこのようなものを使用し、子製品をロードするために
を:
SELECT * FROM Product
LEFT JOIN Product_A USING (product_id)
LEFT JOIN Product_B USING (product_id)
LEFT JOIN Product_C USING (product_id)
LEFT JOIN Product_D USING (product_id)
WHERE product_id = 1337
etc.
子テーブル製品の種類が増えるほど、JOIN句を追加する必要があります。追加する必要があるため、クエリが非常に遅くなってしまいます。
多型関連を防止するためにLEFT JOINを使用していますが、何十というサブツリーのテーブルを操作すると、反パターン処理が解決されますか?
「product_type」を取得し、親テーブルの「product_type」列に格納されている値に応じて、適切な子テーブルで別のクエリを実行するために、親テーブルProductのクエリを使用することを検討する必要があります?
更新:このトピックについての最初の返信は、これが悪いデザインであり、子テーブルの列を組み合わせた単一のテーブルを作成する必要があることを述べています。しかし、各製品タイプには独自の属性があります。そうでないと言うと、「テレビにはピクセル数があるかもしれませんが、それはミキサーにはあまり意味がありません」 @TomH
は、これらの表の中に起こっているどのような種類のデータ
なぜ複数の商品表がありますか?カラムを持つ単一のテーブルに結合して、そのタイプ/グループを識別することはできませんか? –
これはクラスの論理質問ですか、10個のテーブルを使用してソリューションを適用する必要がありますか?これは良いデータベース設計のようには見えません。 – justiceorjustus
私は、それぞれの製品タイプが異なる属性を持っていると推測します。テレビではピクセル数があるかもしれませんが、それはミキサーにはあまり意味がありません。 –