我正在使用 MySQL / InnoDB,并使用外键来保留跨表的关系。在以下场景中(如下所示),“经理”与“记录标签”相关联,“艺术家”也与“记录标签”相关联。创建“专辑”时,它与“艺术家”和“经理”相关联,但艺术家和经理都需要与相同的记录标签相关联。我如何保证与当前表设置的关系,或者我需要重新设计表?
问问题
19 次
2 回答
0
您无法使用纯 DRI - 声明性引用完整性或外键链接来确保架构的引用完整性来实现此结果。
有2种方法可以解决这个问题:
- 将需求视为数据库问题,并在 INSERT 和 UPDATE 上使用触发器来验证需求,否则失败。
- 将嵌套链接视为业务逻辑需求,并在 PHP/C#/whatever 中的业务逻辑中实现它。
作为旁注,从实际的角度来看,我认为该结构相当奇怪-据我所知, anArtist
已签名为 a RecordLabel
,并单独分配了 a Manager
(从标签或单独分配,许多艺术家在切换到另一个标签时保留自己的经理)。Manager
将也链接到Album
唯一对记录历史经理有意义,使您能够检索专辑发行时谁是艺术家的经理,但这自动意味着如果艺术家切换标签和/或稍后进行管理,您的要求将无效。因此,我认为从实际数据的角度来看,强制执行此链接是错误的。
于 2013-08-20T21:33:25.667 回答
0
您所做的是将 recordLabel id 添加到专辑表中。然后你在专辑(recordLabel_id,artist_id)和(recordLabel_id,managers_id)上放置两,两列索引。
因为 record_id 在albums 表的每一行中只能有一个值,所以您将保证完整性。
于 2013-08-20T21:37:38.043 回答