gpt4 book ai didi

mysql - InnoDB 关系 : one-way or two-way?

转载 作者:行者123 更新时间:2023-11-29 00:53:45 26 4
gpt4 key购买 nike

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

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

例如,对于以下每种情况,您将在何处以及如何声明关系?

  • 1 用户有很多小部件
  • widget 属于 1 个用户(和上面一样吗?)
  • 1 位用户有 1 个小部件
  • 用户[多对多]小部件
  • 许多用户共享 1 个小部件

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

另外,同理,“ON CASCADE”的工作方向是什么?

谢谢

最佳答案

  • 1 用户有很多小部件

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

  • 小部件属于 1 个用户

见上文。

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

widget_id 引用 widget 表上的主键,在 widget_id 上具有唯一索引,或者反过来,其实并不重要。如果是 1 对 1 而不是 0 或 1 对 1 的关系,您应该考虑将 widget 和 user 放在一个表中。

  • 用户[多对多]小部件

引入第三个表,user_widget,其中有 2 个字段 user_idwidget_id 引用 user 和 widget 表中相应的主键。

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

与“1 个用户有 1 个小部件”相同,但 widget_id 上没有唯一索引

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

关于mysql - InnoDB 关系 : one-way or two-way?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7147224/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com