良い一日
3 つのテーブル間の外部キー関係の問題を解決しようとしています。基本的に、2 つのセカンダリ テーブルがあり、それぞれに 2 つの外部キーがあり、各外部キーは 3 番目のテーブルの 1 つの主キーを参照しています。
これと同じ問題は、はるかに大規模なデータベースで発生しますが、その複雑さ、サイズ、および著作権の問題が原因で発生する可能性があります。問題を切り分けて、同じ問題が発生するレプリカを作成するしかありませんでした。ただし、メイン テーブルを参照する同じ 2 つのテーブルPeople
は、問題のデータベース内の数十の同じ種類の宇宙の 2 つに過ぎないことを知っておく必要があります。
私の希望は、誰かが問題を指摘し、おそらく現在の構造にほとんど影響を与えない解決策を提供してくれることです。これにより、おそらく他のすべてのテーブルにそれを自分で適用できるようになります。彼らは皆、同じ問題に苦しむでしょう。データベースの作成者は私のものではありません。これは、図を見るときに混乱を招くだけです。
SQL 作成スクリプト:
CREATE SCHEMA IF NOT EXISTS `sampleBD` DEFAULT CHARACTER SET latin1 COLLATE latin1_swedish_ci ;
USE `sampleBD` ;
-- -----------------------------------------------------
-- Table `sampleBD`.`People`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `sampleBD`.`People` (
`PeopleID` INT NOT NULL AUTO_INCREMENT ,
`Name` VARCHAR(200) NOT NULL ,
`EntryDate` DATETIME NULL ,
`EntryBy` INT NULL ,
PRIMARY KEY (`PeopleID`) )
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table `sampleBD`.`PeopleNumberId`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `sampleBD`.`PeopleNumberId` (
`PeopleNumberIdID` INT NOT NULL AUTO_INCREMENT ,
`PeopleID` INT NOT NULL ,
`NumberId` INT(11) NOT NULL ,
`EntryDate` DATETIME NULL ,
`EntryBy` INT NULL ,
PRIMARY KEY (`PeopleNumberIdID`) ,
INDEX `PeopleID` (`PeopleID` ASC) ,
INDEX `EntryBy` (`EntryBy` ASC) ,
CONSTRAINT `PeopleID`
FOREIGN KEY (`PeopleID` )
REFERENCES `sampleBD`.`People` (`PeopleID` )
ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONSTRAINT `EntryBy`
FOREIGN KEY (`EntryBy` )
REFERENCES `sampleBD`.`People` (`PeopleID` )
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table `sampleBD`.`PeopleCbi`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `sampleBD`.`PeopleCbi` (
`PeopleCbiID` INT NOT NULL AUTO_INCREMENT ,
`PeopleID` INT NOT NULL ,
`Cbi` INT NOT NULL ,
`EntryDate` DATETIME NULL ,
`EntryBy` INT NULL ,
PRIMARY KEY (`PeopleCbiID`) ,
INDEX `PessoaID` (`PeopleID` ASC) ,
INDEX `EntryBy` (`EntryBy` ASC) ,
CONSTRAINT `PessoaID`
FOREIGN KEY (`PeopleID` )
REFERENCES `sampleBD`.`People` (`PeopleID` )
ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONSTRAINT `EntryBy`
FOREIGN KEY (`EntryBy` )
REFERENCES `sampleBD`.`People` (`PeopleID` )
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;
スクリプトは 1 番目と 2 番目のテーブルを作成できますが、3 番目のテーブルに到達するとエラー コードが返されます。
Error Code: 1005. Can't create table 'samplebd.peoplecbi' (errno: 121)
これは外部キーの問題ですが、関連するテーブルの現在の構造を変更せずに修正する方法がわかりません。
助けてくれてありがとう。