在MySQL中用于FK约束的最佳语句?

时间:2011-01-03 09:11:41

标签: mysql database

对于FK,我是否应该始终插入此语句ON UPDATE CASCADE ON DELETE CASCADE或者应该是ON UPDATE CASCADE ON DELETE SET NULL

我有很多查询,让我们把大陆带到国家/地区来说明城市到邻里流,或者让行业到公司品牌到本地商店流,其中子价值取决于父价值。然后有像系统代码这样的FK表,它们具有其他表使用的代码值,但不直接与子代相关。

所以我迷失了要使用的FK声明。我的目标是:

  • 如果父母去世,不要丢失子数据。
  • 在桌子之间跳跃时,连接次数减少或没有。
  • 不删除任何数据。
  • 确保如果我更新一个表所有的孩子,大孩子,曾孙子表等,每个人都会自动更新。

1 个答案:

答案 0 :(得分:0)

我通常会避免级联,并将它们限制在真正需要的地方。你不打算删除一个大陆,对吗? 假设我们有一个经典样本:

  • 客户 - >订单 - >订单明细
  • 家庭 - >产品 - >订单明细

我不允许任何级联,除了可能是Orders-> OrderDetails的级联删除(并且只有当业务说可以删除订单时,这是不确定的。) 但是,我会在Products表中有一个PhasedOut日期字段,以允许产品从目录中消失,但保留在数据库中,同样适用于客户:客户可能会消失,但仍保留在数据库中。