【问题标题】:Advice on MySQL and many-to-many in populating the Associative Entity关于 MySQL 和多对多填充关联实体的建议
【发布时间】:2013-01-30 11:56:53
【问题描述】:

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

我有 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。

Recipe 表由另一个 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);

【问题讨论】:

    标签: mysql many-to-many associative-table


    【解决方案1】:

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

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

    除了这篇文章之外,我还没有找到太多关于这个的文档,这篇文章在维基百科页面上链接了多对多关系:http://www.tomjewett.com/dbdesign/dbdesign.php?page=manymany.php

    【讨论】:

    【解决方案2】:

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

    祝你好运!

    【讨论】:

      猜你喜欢
      • 2022-01-13
      • 2021-12-14
      • 1970-01-01
      • 1970-01-01
      • 2016-06-13
      • 2021-08-20
      • 1970-01-01
      • 1970-01-01
      • 2016-05-11
      相关资源
      最近更新 更多