0

まず、私はデータベース設計にかなり慣れていないので、私の質問が理にかなっていることを願っています。あるテーブルの行を別のテーブルの行に結合するリレーショナルデータベースを設計しようとしています。簡単ですよね?行が別々のテーブルのすべての行を参照する必要があるシナリオがあるので、私はちょっと困惑しています。

ビールのレシピを例にとってみましょう。

一連の材料テーブル(そのうちの1つは穀物テーブル)と単一のビールスタイルテーブルがあります。Grains-Styles TableGrainsTableとStylesTableをリンクして、各ビールスタイルに適した穀物を表示するように設計されています。

テーブルグレイン

id      name                Price
----------------------------------
0       German grain        1.20
1       Regular grain       1.00
2       Wheat               0.90
3       American grain      1.00

テーブルスタイル

id      name                 % Alcohol
--------------------------------------
0       German beer          6
1       Australian beer      4
2       American beer        3
3       Generic Beer         5

テーブルグレイン-スタイル

id      style_id             grain_id
-------------------------------------
0       0                    0
1       0                    1
2       0                    2
3       1                    1

これらは私がここで見ている3つのシナリオです:

シナリオ1:特定の穀物は、特定のビールスタイルにのみ適しています。ドイツの穀物はドイツビールにのみ適しています。

シナリオ2:特定の穀物はすべてのビールスタイルに適用できます。通常の穀物は、ドイツビール、アメリカンビール、またはその他のスタイルに使用できます。

シナリオ3:すべてのグレインが特定のスタイルに適用されます。ジェネリックビールには、ドイツの穀物、通常の穀物、またはその他の穀物を使用できます。

Grains-Stylesテーブルに大量の行を作成するのは非効率的なようです。style_idおよび/またはgrain_id列にワイルドカード値に相当するものはありますか?

この問題にどのようにアプローチしますか?この概念は何と呼ばれていますか?ここで、そして確かに私の頭の上でちょっと迷子になりました。あなたが提供できるかもしれないどんな助けにも前もって感謝します。

4

1 に答える 1

1

それは多対多の関係であり、非効率的ではないと思います。タプル(style_id, grain_id)も一意であるため、主キーとして使用してid列をドロップできます。

于 2013-02-23T23:54:12.920 に答える