レシピのデータベースを実現したい。1 つのテーブルには材料とその単位を保持し、もう 1 つのテーブルには料理のレシピを保持する必要があります。しかし、どういうわけか私はそれを実現する方法がわかりません。料理テーブルの 1 つのエントリには、料理の名前と、その材料の単位数を示す要素 (倍精度) を持つ材料テーブルの複数の ID が保持されます。
私の質問は、料理のこのエントリを取得して、ingredentID と factor を持つ複数のエントリを含めるにはどうすればよいですか?
3 つのテーブルを使用することをお勧めします。
したがって、すべての料理にはいくつかの行があり、材料ごとに 1 つの行があります。
少なくとももう 1 つのテーブルが必要です。
dish
-----
dish_id
name
other_things
dish_ingredient
----------------
dish_id
ingredient_id
amount
order?
mixing_instructions?
other_stuff
ingredient
-----------
ingredient_id
other_stuff
基本的に、多対多の関係を持つこのために3つのテーブルを作成できます
すべてのレシピのリスト
CREATE TABLE RecipeList
(
RecipeID INT,
RecipeName VARCHAR(50),
-- .... other fields,
CONSTRAINT tb_pk PRIMARY (RecipeID),
CONSTRAINT tb_uq PRIMARY (RecipeName),
)
すべての成分のリスト
CREATE TABLE IngredientList
(
IngredientID INT,
IngredientName VARCHAR(50),
-- .... other fields,
CONSTRAINT tb_pk1 PRIMARY (IngredientID),
CONSTRAINT tb_uq1 PRIMARY (IngredientName),
)
各レシピの材料を保持する別のテーブル
CREATE TABLE IngredientList
(
IngredientID INT,
RecipeName INT,
Amount INT,
Units INT,
InnerAmountInGrams DECIMAL(10,2),
-- .... other fields,
CONSTRAINT tb_pk3 PRIMARY KEY (IngredientID, RecipeName),
CONSTRAINT tb_fk1 FOREIGN KEY (RecipeID)
REFERENCES RecipeList(IngredientID),
CONSTRAINT tb_fk2 FOREIGN KEY (RecipeName)
REFERENCES IngredientList(IngredientID),
)