我需要帮助在我的MySQL数据库

时间:2017-02-15 17:02:12

标签: mysql foreign-keys innodb foreign-key-relationship

对不起,我无法在标题中创建更具体的问题;这可能是由于我对术语不熟悉。

这是我正在使用的MySQL数据库部分的简化图:

enter image description here

示例数据可能是:

  • 食谱:“Apple pie”
  • recipeIngredientItem :“3杯+ 2汤匙多功能面粉”
  • recipeStep :“将烤箱预热至400°F”
  • 成分:“通用面粉”
  • compoundMeasurement :“3杯+2汤匙”
  • simpleMeasurement :“3杯”
  • measurementUnit :“cup”

如果我删除了一个食谱,我就不会级联并删除所有相关的 recipeIngredientItems recipeSteps 。但是,有一些并发症:

  • 如果删除 recipeIngredientItem ,我希望删除关联的 compoundMeasurement ,并依次删除与该关联的 simpleMeasurement > compoundMeasurement 。但我不希望删除关联的成分 measurementUnit
  • 我不确定删除成分 measurementUnit 时我想做什么,但我想我的用户界面会警告用户并妥善处理(“警告!如果您删除“通用面粉”成分,它将从使用它的所有配方中删除。“)。
  • 另外,我的目的是以其他方式使用 compoundMeasurement ,例如与 pantryItem 表相关联来管理库存。因此,在 compoundMeasurement 中使用“recipeIngredientItem”键列是没有意义的。但是,如果这是糟糕的设计,我可以将 recipeCompoundMeasurement pantryItemCompoundMeasurement 表分开。这似乎是一种不必要的并发症,但这很可能反映了我的业余自学数据库知识。 :)

我应该如何为这些表设置外键约束?或者以某种方式重新设计数据库会更好吗?

编辑:

对于它的价值,这是我迄今为止所做的工作(就限制而言),尽管我不确定它是否是最优雅的解决方案。所有约束都设置为在删除或更改时级联:

recipeIngredientItem.amount: links to compoundMeasurement.idNumber
recipeIngredientItem.ingredient: links to ingredient.idNumber
recipeIngredientItem.recipe: links to recipe.idNumber

recipeStep.recipe: links to recipe.idNumber

simpleMeasurement.measurementUnit: links to measurementUnit.idNumber
simpleMeasurement.compoundMeasurement: links to compoundMeasurement.idNumber

有了这些,当我删除配方时,关联的 recipeIngredientItem recipeStep 将被删除,但我需要去通过并明确删除与已删除的 recipeIngredientItem 相关联的 compoundMeasurement (后者将删除关联的度量)。当然,这很容易做到,只是略显不雅。但也许这是以多种方式使用 compoundMeasurement 的成本......

1 个答案:

答案 0 :(得分:0)

叹息。

显而易见的解决方案是重新设计我的数据库以减少卑鄙的ludicrosity,但你们都已经知道了。