通过多个表保证FK关系

时间:2013-08-20 21:27:39

标签: mysql foreign-keys

我正在使用MySQL / InnoDB,并使用外键来保持表之间的关系。在下面的情景中(如下所示),'manager'与'recordLabel'相关联,'artist'也与'recordLabel'相关联。创建“专辑”时,它与“艺术家”和“经理”相关联,但艺术家和经理都需要与相同 recordLabel相关联。如何保证与当前表设置的关系,还是需要重新设计表?

enter image description here

2 个答案:

答案 0 :(得分:0)

使用纯DRI - 声明性参照完整性或外键链接以确保架构的引用完整性无法实现此结果。

有两种方法可以解决这个问题:

  1. 考虑要求是数据库问题,并使用trigger on INSERT and UPDATE验证要求,否则失败。
  2. 将嵌套链接视为业务逻辑需求,并在PHP / C#/中的业务逻辑中实现它。
  3. 作为旁注,我认为从实际角度来看结构相当奇怪 - 据我所知Artist签署了RecordLabel,并分别指定了Manager(无论是从标签还是单独,许多艺术家在切换到另一个标签时都会保留自己的经理。将Manager也链接到Album只对记录历史管理员有意义,使您能够在发布相册时检索谁是艺术家的经理,但这自动意味着您的要求无效,如果艺术家后来切换标签和/或管理。因此,我认为从实际数据视图来强制执行此链接是错误的。

答案 1 :(得分:0)

您要做的是将recordLabel id添加到相册表中。然后在相册(recordLabel_id,artist_id)和(recordLabel_id,managers_id)上放置两个,两列索引。

因为record_id在albumns表的每一行中只能有一个值,所以你将拥有保险完整性。