0

MySQL を使用して、MyISAM から InnoDB テーブルに移行します。データベースの設計は、データをダンプし、外部キーや制約なしで再インポートすることから始まりました。エラーを見つけるためにそれらを一度に追加します。

またはのParentTableいずれかにリンクできるものがありますが、両方にはリンクできません。構文は次のとおりです: (複数の ではなく、単純化のために構文を使用)ChildTableAChildTableBCREATECREATEALTER

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かを指定する別の列を持つよりも、このルートをはるかに好みます... .

4

1 に答える 1