MySQL を使用して、MyISAM から InnoDB テーブルに移行します。データベースの設計は、データをダンプし、外部キーや制約なしで再インポートすることから始まりました。エラーを見つけるためにそれらを一度に追加します。
またはのParentTable
いずれかにリンクできるものがありますが、両方にはリンクできません。構文は次のとおりです: (複数の ではなく、単純化のために構文を使用)ChildTableA
ChildTableB
CREATE
CREATE
ALTER
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`)
IDChildTableA
多くの行で が 0 であり、多くの行でが 0 であるため、これは失敗しましたIDChildTableB
。ただし、両方が 0 の行はありません。of 0 にはnoChildTableA
が存在しIDChildTableA
、B にも同様に存在することがわかります。
参照整合性を維持しながら、この状況を処理する適切な方法はありますか? 二つに割らずParentTable
に?0 であるか、有効な関連テーブルを参照していれば問題ないと言う方法はありますか? それとも、ポリモーフィック テーブルが欲しいということは、制約なしで行かなければならないということですか? IDChildTable
ところで、私は、単一の外部キーを持ち、それがテーブルAかBかを指定する別の列を持つよりも、このルートをはるかに好みます... .