0

構築する必要があるデータベース (InnoDB) については、2 つの異なる構造を念頭に置いており、どちらがパフォーマンスの点で最適かを知りたいと考えています。

何千もの商品を保管したい。各製品には、ある程度の成分 (ゼロの場合もあります) が含まれている場合があります (化学製品です)。26 種類の成分があり、AZ と言えます。各成分には独自の特徴があります。

問題は、どのようにすれば成分と製品を最適に保存し、リンクできるかということです (パフォーマンスの観点から)。

オプション A

テーブル Products の各行には、26 の追加フィールドがあり、各成分に 1 つずつあります。そのフィールドには金額が含まれています(参照キーではありません)。各成分列には、検索を高速化するためのインデックスが適用されています。製品と原料の間のリンクは、プログラム ロジックのレベルでのみ存在します。データベースにリンク テーブルはありません。

オプション B

商品を載せた表と、食材を載せた表があります。Products テーブルには原料用のフィールドはありませんが、その代わりに、Products を Ingredients にリンクし、量を定義するリンク テーブルがあります。製品と成分間のリンクは、db レベルで定義されるようになりました。このテーブルは非常に大きくなる可能性があります。

別のオプション B は、各成分のリンク テーブルを作成することで、最終的に 26 個のリンク テーブルになります。検索するとこちらの方が速いかどうかわかりませんが…?

4

1 に答える 1

2

オプション A は使用しないでください。成分の追加や変更が難しくなり、場合によっては製品テーブルのサイズが大幅に増加します。

オプションBは行く方法です。成分の追加または削除は些細なことであり、パフォーマンスに実質的な影響はありません。でリンクテーブルの主キーを作っておけば(product_id, ingredient_id)、サイズもそこまで悪くなく、性能もいいです。この方法は、最も簡潔で管理も簡単です。

各成分のリンク テーブルを作成すると、必要以上に複雑になり、効率が低下します。

于 2013-04-29T21:08:03.583 に答える