Mysql 一对多反向关系?
我的数据库有一个特殊的设置。(见所附屏幕截图) 所以我有一些实现和项目,他们可以在上面附加一个图库,图库包含图片 现在我似乎无法建立这样的关系:如果我删除了一个实现或一个项目,附加的图库也会被删除 我在galleries表和Realizations/projects表中尝试了两种外键组合 知道我在监督什么吗?谢谢大家! 这就是我尝试的SQLMysql 一对多反向关系?,mysql,sql,Mysql,Sql,我的数据库有一个特殊的设置。(见所附屏幕截图) 所以我有一些实现和项目,他们可以在上面附加一个图库,图库包含图片 现在我似乎无法建立这样的关系:如果我删除了一个实现或一个项目,附加的图库也会被删除 我在galleries表和Realizations/projects表中尝试了两种外键组合 知道我在监督什么吗?谢谢大家! 这就是我尝试的SQL ALTER TABLE `galleries` ADD CONSTRAINT `FK_galleries_realisations` FOREIGN KE
ALTER TABLE `galleries`
ADD CONSTRAINT `FK_galleries_realisations` FOREIGN KEY (`id`) REFERENCES `realisations` (`gallery_id`) ON UPDATE CASCADE ON DELETE CASCADE;
这就是我在尝试创造一个新的现实时遇到的错误
Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (`elbeko`.`galleries`, CONSTRAINT `FK_galleries_realisations` FOREIGN KEY (`id`) REFERENCES `realisations` (`gallery_id`) ON DELETE CASCADE ON UPDATE CASCADE) (SQL: insert into `galleries` (`name`, `updated_at`, `created_at`) values (Tester, 2015-10-16 08:53:28, 2015-10-16 08:53:28))
这不是一个特殊的但“潜在”危险的架构。
根据您的图表,许多项目可能指向单个库,如果删除了一个项目,您不希望删除库。因为其他项目“可以”使用特定的库
您可以修改gallery表,使每个gallery记录指向一个项目/实现ID/UUID,以便利用级联
如果确实要删除库记录,请使用“删除后”触发器
表演
Insert into tbl_gallery(id, owner_uuid, name)
VAlues(
null,
either project_uuid or realisation_uuid
name );
代码在laravel(迁移)中,但更多的是关于逻辑的问题。关系应该位于哪个表上,这更是我的问题。谢谢。我试过了,但出现了一个错误,我将在问题中添加我的代码,1分钟!我补充了更多的解释。谢谢你!我知道数据库结构很奇怪。但我在想,若我想添加一个实现或项目的ID,那个么会有重复的ID,对吗?谢谢你的回答。你可以修改你的表格吗@当然不可以我很乐意。。但我真的不知道如何实现你的想法。因此,我确实可以使用级联。因为项目id可以与实现id相同。没有项目,Gallery记录不可能存在,因此Gallery表应该有Gallery\u id、owner\u id(项目\u id/实现\u id)。最简单的方法是为每个表设置两个图库表。如果你只想拥有一张多媒体资料表,你需要使用G/UUID而不是ID。谢谢你的回答,我的每张表有两张多媒体资料表是什么意思?像实现画廊,项目画廊。。我认为更好的选择是使用所有者id?谢谢
Update tbl_project
set project_uuid = (Select uuid())
Where tbl_project.project_id >= 1;
Gallery_id int, not null, primary, auto increase
owner_uuid varchar(36) ' usually second primary but for the migration it can be null
gallery_name ....
...
Update tbl_gallery inner join tbl_project on tbl_project.gallery_id = tbl_gallery.id
SET owner_uuid = tbl_project.project_uuid
Where tbl_gallery.owner_uuid is null;
Insert into tbl_gallery(id, owner_uuid, name)
VAlues(
null,
either project_uuid or realisation_uuid
name );