0

こんにちは、mysql ワークベンチでデータベースを設計しました。フォワード エンジニアに行ったときに (errno: 121) を得たのは、複数のテーブルで同じ名前の外部キーが許可されていないことに気付いたためです。ほとんどの場合、n:m の関係としてかなりの数のジャンクション テーブルがあります。これらのジャンクション テーブルのほとんどに、(2 つの外部キーで構成される) 複合主キーを使用しています。私の質問は、これらの主キーの名前を外部キーと共に一意になるように変更する必要がありますか? 助けてください。

(以下のコードではまだ外部キーの名前を変更していません)

CREATE TABLE IF NOT EXISTS `mydb`.`tblStudent` (
  `StudentID` INT(6) NOT NULL AUTO_INCREMENT ,
  `Student_Firstname` VARCHAR(20) NOT NULL 、
  `Student_Lastname` VARCHAR(20) NOT NULL 、
  `DOB` DATE NOT NULL 、
  `Student_Gender` ENUM('男性','女性') NOT NULL ,
  `Student_Address1` VARCHAR(40) NOT NULL 、
  `Student_Address2` VARCHAR(22) NOT NULL 、
  `Student_Address3` VARCHAR(14) NOT NULL 、
  `Student_Phonenum` INT(10) NULL ,
  `Student_Email` VARCHAR(60) NOT NULL ,
  `Student_Password` CHAR(128) NOT NULL ,
  `Enrollment_Date` DATE NOT NULL ,
  `Graduation_Date` DATE NULL ,
  `Student_Picture` VARCHAR(100) NOT NULL ,
  `PPSN` VARCHAR(9) NOT NULL 、
  主キー (`StudentID`) )
エンジン = InnoDB

CREATE TABLE IF NOT EXISTS `mydb`.`tblIllness` (
  `IllnessID` CHAR(5) NOT NULL ,
  `Illness_Name` VARCHAR(30) NOT NULL 、
  PRIMARY KEY (`IllnessID`) )
エンジン = InnoDB

CREATE TABLE IF NOT EXISTS `mydb`.`tblStudentIllness` (
  `IllnessID` CHAR(5) NOT NULL ,
  `StudentID` INT(6) NOT NULL ,
  `Doctor_Name` VARCHAR(30) NOT NULL 、
  `Doctor_Phonenum` INT(10) NOT NULL ,
  `薬` VARCHAR(40) NOT NULL ,
  `Medical_Advice` VARCHAR(250) NOT NULL ,
  PRIMARY KEY (`IllnessID`, `StudentID`) ,
  INDEX `IllnessID_idx` (`IllnessID` ASC) 、
  INDEX `StudentID_idx` (`StudentID` ASC) 、
  制約 `IllnessID`
    外部キー (`IllnessID` )
    REFERENCES `mydb`.`tblIllness` (`IllnessID` )
    カスケード削除時
    更新カスケードでは、
  CONSTRAINT `StudentID`
    FOREIGN KEY (`StudentID` )
    REFERENCES `mydb`.`tblStudent` (`StudentID` )
    カスケード削除時
    更新カスケード時)
エンジン = InnoDB
4

1 に答える 1

2

これは私にとってはうまくコンパイルされます。1つの解決策は、制約名を削除することです。これにより、制約名が自動的に生成されます。

...
CONSTRAINT 
    FOREIGN KEY (`IllnessID` )
    REFERENCES `tblIllness` (`IllnessID` )
    ON DELETE CASCADE
    ON UPDATE CASCADE,
CONSTRAINT
    FOREIGN KEY (`StudentID` )
    REFERENCES `tblStudent` (`StudentID` )
    ON DELETE CASCADE
...
于 2013-02-07T15:29:46.657 に答える