我想实现一个食谱数据库。一张桌子应该存放配料及其单位,另一张桌子应该存放菜肴的食谱。但不知何故,我不知道如何实现它。菜肴表中的一个条目包含菜肴的名称和成分表中的几个 id,其中一个因子(双)表示该成分的多少单位。
现在我的问题是,我怎样才能让一道菜的这个条目包含几个带有 ingredentID 和因子的条目?
我建议你使用 3 个表:
所以每道菜都会有几行:每种成分一行。
你至少需要一张桌子。
dish
-----
dish_id
name
other_things
dish_ingredient
----------------
dish_id
ingredient_id
amount
order?
mixing_instructions?
other_stuff
ingredient
-----------
ingredient_id
other_stuff
基本上,您可以为此创建三个具有多对多关系的表
所有食谱的列表
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),
)