0

嗨,我在 mysql 工作台中设计了一个数据库。当我去正向工程师时,我得到了(errno:121),因为我在多个表中都有相同的外键,我意识到这是不允许的。我有很多联结表,主要是 n:m 关系。我对这些联结表中的大多数使用复合主键(由 2 个外键组成)。我的问题是我是否必须将这些主键与外键一起重命名为唯一?请欣赏一些帮助。

(我还没有在下面的代码中重命名外键)

如果不存在 `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('Male','Female') 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

如果不存在 `mydb`.`tblIllness`,则创建表(
  `IllnessID` CHAR(5) NOT NULL ,
  `Illness_Name` VARCHAR(30) NOT NULL ,
  主键(`IllnessID`))
引擎 = InnoDB

如果不存在 `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 ,
  主键 (`IllnessID`, `StudentID`) ,
  INDEX `IllnessID_idx` (`IllnessID` ASC) ,
  索引`StudentID_idx` (`StudentID` ASC) ,
  约束`IllnessID`
    外键(`IllnessID`)
    参考 `mydb`.`tblIllness` (`IllnessID`)
    删除级联
    在更新级联时,
  约束`StudentID`
    外键(`StudentID`)
    参考 `mydb`.`tblStudent` (`StudentID`)
    删除级联
    更新级联)
引擎 = InnoDB
4

1 回答 1

2

对我来说很好。一种解决方案是仅删除约束名称,它们将自动为您生成。

...
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 回答