내가 두 테이블, 활동 및 캠페인 (예, 그것은 일종의하는 내부 사용자 정의 CRM 응용 프로그램입니다)이 : 세 번째 다 대다 테이블 사이MySQL의 여러 화합물 외래 키
create table `tb_activities` (
`organization_id` integer(20) unsigned not null default '0',
`activity_id` integer(20) unsigned not null auto_increment,
primary key (`activity_id`)
) engine=innodb default charset=utf8 pack_keys=1 row_format=compact;
create table `tb_campaigns` (
`organization_id` integer(20) unsigned not null default '0',
`campaign_id` integer(20) unsigned not null auto_increment,
primary key (`campaign_id`)
) engine=innodb default charset=utf8 pack_keys=1 row_format=compact;
와의를 두 테이블 모두에 외래 키가 있습니다.
drop table if exists `tb_campaigns_activities`;
create table `tb_campaigns_activities` (
`organization_id` integer(20) unsigned not null default '0',
`campaign_id` integer(20) unsigned not null default '0',
`activity_id` integer(20) unsigned not null default '0',
primary key (`organization_id`,`campaign_id`,`activity_id`),
foreign key `rc_campaigns_activities_a` (`organization_id`,`campaign_id`)
references `tb_campaigns` (`organization_id`,`campaign_id`)
on update restrict on delete restrict,
foreign key `rc_campaigns_activities_b` (`organization_id`,`activity_id`)
references `tb_activities` (`organization_id`,`activity_id`)
on update restrict on delete restrict,
key `dc_campaigns_activities_a` (`organization_id`,`campaign_id`),
key `dc_campaigns_activities_b` (`organization_id`,`activity_id`)
) engine=innodb default charset=utf8 pack_keys=1 row_format=compact;
하지만 설치하려고하면 105 개의 mysql 오류가 발생합니다. 지금까지이 오류를 조사한 결과 나쁜 형식의 외래 키가 있다는 것을 알았습니다. 작동하도록 한 유일한 방법은 dc_campaigns_activities_a 및 dc_campaigns_activities_b 관계를 모두 제거하는 것입니다. 그래서 데이터베이스는 논리적 오류에 대해 불평하지만, 나는 미쳤다. 나에게는 완벽한 외래 키 시나리오입니다. organization_id가 두 키에 의해 공유되는 유일한 것입니다. 왜 이것이 맞지 않습니까?
예, 추가 연구에 따르면 tb_activities 및 ('organization_id','activity_id')에 고유 키 ('organization_id','campaign_id')가 있어야합니다. 폭발 감사합니다! –