1

我正在设计一个包含食谱及其成分列表的数据库,现在我正在处理将各个成分链接到它们各自的食谱。但是,我无法决定如何填充关联实体表的最佳行动方案。

我有我的 3 张桌子,

CREATE TABLE Ingredient
(
ingredientID int PRIMARY KEY AUTO_INCREMENT,
ING VARCHAR(100)
);

CREATE TABLE Recipe
(
recipeID int PRIMARY KEY AUTO_INCREMENT,
recipeTitle VARCHAR(200),
prepText VARCHAR(10000),
cuisineType VARCHAR(100)
);

CREATE TABLE recipeIng
(
recipeID int,
ingredientID int,
PRIMARY KEY (recipeID, ingredientID)
);

成分表由包含 200 多种单独成分的 XML 文件填充,每种成分从 1 开始自动分配不同的 ID。

食谱表由另一个 XML 文件填充,其中包含食谱标题、制备方法和菜肴类型。

recipeIng 表是我遇到的麻烦,我认为它必须手动填充。即手动将所有成分与他们的食谱相匹配。像这样:

INSERT INTO recipeIng
VALUES(1, 1);
INSERT INTO recipeIng
VALUES(1, 2);
INSERT INTO recipeIng
VALUES(1,3);
INSERT INTO recipeIng
VALUES(1, 4);

'1' 是第一个配方的 ID,'1'、'2' 等是单个成分 ID。

但是我不确定这是否是填充表格的最佳方法,任何建议都会有所帮助。

注意:当与填充此查询的使用方法结合使用时,效果很好。

SELECT r.recipeTitle
FROM Recipe r
INNER JOIN recipeIng e ON e.recipeID=r.recipeID
INNER JOIN Ingredient i ON i.ingredientID = e.ingredientID
WHERE 'brown sugar' IN (i.ING);
4

2 回答 2

1

通过查看您的最后一个问题,我认为这种方法至少比在其中一个表中使用逗号分隔的 id 列表更好。拥有一个以逗号分隔的值列表会限制您的连接数,具体取决于您对存储值列表的字段的配置。

您在这里展示的方式也是我在关系数据库中设计 mn 关系的方式。这也是您使用 MySQL Designer 等工具所获得的,所以我认为这是存储多对多关系的最佳方式。

除了这篇文章,我还没有真正找到很多关于这个的文档,这篇文章链接在 Wikipedia 页面上的多对多关系:http://www.tomjewett.com/dbdesign/dbdesign.php?page=manyany。 php

于 2013-01-30T12:51:03.450 回答
0

我在我的网站上经历了这种确切的情况,但我处理的是推荐而不是食谱。到目前为止,我想出的唯一可能对您有所帮助的方法是一次进行大量插入。例如,如果您的大多数食谱都需要面粉,那么您可以使用 select insert 语句将“面粉”插入到多个 recipeID 的 recipeIng 中。

祝你好运!

于 2015-06-11T23:54:59.117 回答