InnoDB关系:单向还是双向?

时间:2011-08-22 12:08:58

标签: mysql sql database foreign-keys innodb

我已经决定第一次切换到InnoDB并尝试使用外键和其他InnoDB功能。

创建关系时,我应该只在一张桌子上声明它们吗?或两个表?

例如,对于下面的每个案例,您在何处以及如何宣布关系?

  • 1用户有许多小部件
  • 小部件属于1个用户(与上面相同吗?)
  • 1位用户有1个小部件
  • 用户[多对多]小部件
  • 许多用户共享1个小部件

这些只是一些随机的例子,我只想了解哪些方向关系应该被声明。

另外,在同一个音符上,“ON CASCADE”的工作方向是什么?

由于

1 个答案:

答案 0 :(得分:1)

  • 1用户有许多小部件

假设一个小部件是一个用户独有的(因为你有多个单独的点):表user_id上的widget引用了user上的主键

  • 小部件属于1个用户

见上文。

  • 1位用户有1个小部件
widget_id表中的

user引用widget表上的主键,widget_id上的唯一索引,或者相反,并不重要。如果它是1对1而不是0或1对1关系,则应考虑将小部件和用户放在一个表中。

  • 用户[多对多]小部件

引入第三个表user_widget,其中包含2个字段user_idwidget_id,引用用户和窗口小部件表中的相应主键。

  • 许多用户共享1个小部件

与“1个用户有1个小部件”相同,但在widget_id

上没有唯一索引

ON CASCADE选项从父(主键)到子(外键/引用)。因此,如果您的第一个场景中有ON DELETE CASCADE(1个用户有许多小部件),删除用户会删除所有小部件,但删除所有小部件不会删除用户。