使用 MySQL,从 MyISAM 转移到 InnoDB 表。数据库设计从转储数据开始,然后在没有外键或约束的情况下重新导入。一次添加一个以查找错误。
我有ParentTable
哪个可以链接到ChildTableA
或ChildTableB
,但不能同时链接到两者。语法应该CREATE
是:(CREATE
为了简单起见,使用语法而不是多个ALTER
s)
CREATE TABLE `ParentTable`
`IDParentTable` bigint(20) unsigned NOT NULL auto_increment,
`IDChildTableA` bigint(20) unsigned NOT NULL default '0',
`IDChildTableB` bigint(20) unsigned NOT NULL default '0',
PRIMARY KEY (`IDParentTable`),
KEY `ParentTable_IDChildTableA` (`IDChildTableA`),
KEY `ParentTable_IDChildTableB` (`IDChildTableB`)
ENGINE=InnoDB DEFAULT CHARSET=latin1;
我不假思索地尝试包括:
CONSTRAINT `ParentTable_IDChildTableA` FOREIGN KEY (`IDChildTableA`) REFERENCES `ChildTableA` (`IDChildTableA`),
CONSTRAINT `ParentTable_IDChildTableB` FOREIGN KEY (`IDChildTableB`) REFERENCES `ChildTableB` (`IDChildTableB`)
失败了,因为很多行有 0 IDChildTableA
,很多行有 0 IDChildTableB
。但是,没有行两者都为 0。它看到 0 不ChildTableA
存在IDChildTableA
,B 也一样。
在保持参照完整性的同时,是否有适当的方法来处理这种情况?不用ParentTable
一分为二?如果它是 0 或引用有效的相关表,可以说没关系?或者,想要多态表是否意味着我必须不受约束?顺便说一句,我更喜欢这条路线,而不是有一个IDChildTable
外键,然后有另一列指定它是表 A 还是 B ......不是我认为这对约束有效,只是说我不想走那条路线.. .