【问题标题】:MySQL Workbench Forward Engineer Relationship TablesMySQL Workbench 正向工程师关系表
【发布时间】:2017-09-16 00:21:18
【问题描述】:

我使用 MySQL Workbench 中的 Forward Engineer 工具根据我输入的表生成数据库。我能够为围绕游戏 Stardew Valley 构建的数据库填充我的表,例如“村民”、“鱼”和“项目”。但是,当我在 ER 图中链接表时,它会根据关系创建新表,例如 Cooking_Has_Fish,因为许多鱼可用于许多食谱,许多食谱可以使用许多鱼。但是,一旦我填充了 Cooking 和 Fish 表,生成的 Cooking_Has_Fish 表中没有任何内容。我试图了解此表的功能或如何使用它,或者是否需要填充它而我错过了一些东西。

感谢阅读。

【问题讨论】:

    标签: mysql database entity-relationship forward-engineer


    【解决方案1】:

    没有一个表是自己填充的,您需要确保它被填充。为多对多关系创建的第三个表称为associative or junction table,至少包含它们连接的两个表的主键。

    如果您有一个recipe_id 标识recipies 和一个fish_id 标识fishes,那么Cooking_Has_Fish 表将至少有一个recipe_id 和一个fish_id 字段。

    如果您想将fish and chips(与recipe_id 1)与codfish_id 为2)相关联,那么您将执行以下插入:

    insert into Cooking_Has_Fish (`recipe_id`, `fish_id`) values (1,2)
    

    这意味着“炸鱼薯条”需要鳕鱼。您可以在关联表中添加其他字段,例如鱼和薯条需要多少鳕鱼。

    总而言之:您必须根据您希望如何关联具有多对多关系的实体(表)来填充关联表。

    【讨论】:

    • 明白了,谢谢你的解释。这就说得通了。那么如果关联表只有id值是不是最好多加一些字段呢,比如name关联到id呢?我在想,如果我只用 id 填充该表,那么它不会很有帮助。
    • 不,您不应该添加存储在主表中并且可以通过连接检索的名称。在继续进行之前,您可能应该阅读一些有关关系数据库设计的书籍/教程,因为显然您缺乏基础知识。这没有什么问题,我们都去过那里。但是如果你试图在没有基础的情况下继续前进,那么你只会把你的数据库弄得一团糟。
    猜你喜欢
    • 1970-01-01
    • 2017-06-06
    • 2017-08-21
    • 2020-03-05
    • 1970-01-01
    • 1970-01-01
    • 2019-12-21
    • 1970-01-01
    • 2015-05-29
    相关资源
    最近更新 更多