mysql - 一对一的 FK 约束

标签 mysql sql doctrine constraints

我的 MySQL 数据库中有两个表,EventTheme 是一对一的关系。

ALTER TABLE Event ADD CONSTRAINT FK_FA6F25A359027487 FOREIGN KEY (theme_id) REFERENCES Theme (_uuid) ON DELETE SET NULL;
ALTER TABLE Theme ADD CONSTRAINT FK_56B4C80C71F7E88B FOREIGN KEY (event_id) REFERENCES Event (_uuid) ON DELETE CASCADE;

我想要这样的行为,如果我删除主题记录,theme_id 设置为 NULL,如果我删除事件记录,主题记录也被删除。

但是,现在当我运行 DELETE FROM Event 时,出现此错误。

SQLSTATE[23000]: Integrity constraint violation: 1451 Cannot delete or update a parent row: a foreign key constraint fails (`from_dev`.`eventleveltheme`, CONSTRAINT `FK_6E25E16871F7E88B` FOREIGN KEY (`event_id`) REFERENCES `Event` (`_uuid`))

我可以不设置这两个约束吗?他们有某种冲突吗?

最佳答案

这里有一个循环引用 - Event 有一个 FK 到 Theme 并且 Theme 有一个 FK 到 Event。从一个表到另一个表应该只有一个 FK,而不是两个。

我在这里猜测是因为我不知道您的数据的确切用途,但似乎“主题”是可以反复使用的东西,而事件是一次性的。所以我会让 Event 有一个 FK 到 Theme,并删除 ThemeEvent 的 FK。

关于mysql - 一对一的 FK 约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19520568/

相关文章:

java - 缓慢的读取查询导致其他 c3p0 线程在 acquireStatement 上阻塞

mysql - 在MySQL中插入时自动更改日期格式

php - 如何使用 array_merge 在 php 中合并两个不同的 mysql 选择结果?

sql - 根据其他列日期选择列值

sql - 有没有办法让 Sql Server FullText 引擎停止将数字识别为数字?

mysql - 在 A 中查找在 B 中没有关联行的行,FK 在 B 上?

sql - 如何检查一个值是否是 plpgsql 的整数?

php - 带有 ManyToOne 字段的 Doctrine @UniqueEntity?

sql - Doctrine 2 中的复杂查询

symfony - 使用 jms 序列化程序和 ISO8601 获取日期时间格式不匹配