3

パン屋を想像してみてください。私は、成分と 1 対多の関係を持つフォーミュラのテーブルと 1 対多の関係を持つ製品のテーブルを持っています。問題は、私はケーキを持っていますが、材料の1つがフロスティングであり、それ自体が製品です(フロスティングは多くのものに適用され、ケーキのフロスティングの量が多いため、フロスティングを個々の部分に分割することはできません変更が必要な場合があります)。このようなセットアップのテーブルのデザインは何ですか?

4

3 に答える 3

3

材料表に 2 つの列があり、1 つは実際の材料用で、もう 1 つは他のレシピを指すものです。任意の行に 1 つだけ設定されます。

2 つの列を使用すると、参照整合性も適用できます。

于 2012-09-06T01:10:12.743 に答える
2

あなたが探しているのは、実際にはBill of Materialsと呼ばれる一般的なデータベース設計パターンです。

これは、部品表に関する優れたブログです。

このような設計に含まれるレベルのないツリー構造を扱いやすくするために、訪問番号と呼ばれる物理的な実装手法を使用できます。これについては、この質問への回答で詳しく説明しています。

于 2012-09-06T11:51:26.390 に答える
1

数式とものという 2 つのオブジェクトしかないようです。数式は、他のものの観点から物事を説明します。物のアイテムは、製品である場合とそうでない場合があります。これはバイナリ属性で、3 番目のテーブルです。スキームは次のようになります。

Stuff
-----
id : integer
name : string

FormulaPairs
------------
stuff_described_id : integer
ingredient_id : integer
amount : float

Product
-------
stuff_id : integer

クエリの例:

Apple Pie の材料のすべての ID を取得します。

select ingredient_id from Stuff s inner join FormulaPairs p
where s.id == p.stuff_described_id and s.name == 'Apple Pie'

製品のすべての名前を取得します。

select name from Stuff s inner join Product p where s.id == p.stuff_id
于 2012-09-06T01:14:31.363 に答える