需要帮助在MySQL DB中设置外键关系

时间:2010-11-23 17:16:21

标签: mysql mysql-workbench

所以我必须使用InnoDB表(产品)和(类别)。我想在Products表的“Category”字段和Categories表的“CategoryId”之间建立关系。

但是在尝试创建FK时,它只允许我在Products表上选择主键“ProductsId”并映射到Categories表上的PK“CategoryId”。

也许我错过了设置外键的方式/原因。我的想法告诉我,如果我错了:

1)要求在添加产品时将其添加到类别中,该类别必须存在,或者您必须先创建该类别。除非您执行某项任务(程序性地或在DB后端)从您想要删除的类别中删除产品,否则无法删除类别。

2)我希望CategoryId值存储在Products表的“Category”字段中。然后在我的视图中显示时,需要按CategoriesId值查找Categories.Name字段。

修改 所以我理解外键中涉及的两个字段必须相同,大小,类型等等。但是,如何将ProductId和CategoryId链接到我在上面提到的上下文中我想要做的事情。当我在ProductId和CategoryId之间创建FK时,我不会让我添加产品记录。

此外,类别名称字段和产品类别字段是相同的类型,size..etc,但我没有选择在外键选项卡中选择那些?

我应该如何设置它,以便类别表知道每个类别中的哪些产品。

2 个答案:

答案 0 :(得分:2)

好的,不幸的是,我必须回答我自己的问题。我的大多数技术问题的原因是因为你试图制作的字段“必须被编入索引”。

我遇到的混淆问题是我需要摆脱Products表上的实际“Category”varchar字段,并创建一个CategoryId字段,该字段只有Category表CategoryId字段中存在的值。

现在我只需要通过Products.CategoryId值引用Categories.Name字段。

至少这是我理解的。

答案 1 :(得分:1)

如果您在Workbench上,请验证FK中涉及的两列的类型,长度和属性是否相同。