我是一名学生,我可能已经在这个问题上苦苦挣扎了大约几个小时,检查 MySQL 语法在线帮助、其他 stackoverflow 问题和我的教科书。我一直在反复调整我的代码,但我完全被难住了。
我一直在尝试在 MySQL 上使用正向工程功能,但在标题为“LabT3”的表上,我不断收到 1215 错误消息:无法添加外键约束。我将在下面发布代码。正如我在标题中所说,我已检查以确保没有重复的主键,并且所有属性的数据类型在表之间都匹配。我不确定我做错了什么。
这是代码。任何意见将不胜感激:
-- MySQL Workbench Forward Engineering
SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL,ALLOW_INVALID_DATES';
-- -----------------------------------------------------
-- Schema Amber's_Clinic_ER_Diagram
-- -----------------------------------------------------
-- Lab 2
-- Amber Lewis
-- Entity-Relationship Diagram for sample Clinic
-- -----------------------------------------------------
-- Schema Amber's_Clinic_ER_Diagram
--
-- Lab 2
-- Amber Lewis
-- Entity-Relationship Diagram for sample Clinic
-- -----------------------------------------------------
CREATE SCHEMA IF NOT EXISTS `Amber's_Clinic_ER_Diagram` DEFAULT CHARACTER SET utf8 ;
USE `Amber's_Clinic_ER_Diagram` ;
-- -----------------------------------------------------
-- Table `Amber's_Clinic_ER_Diagram`.`DoctorT2`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `Amber's_Clinic_ER_Diagram`.`DoctorT2` (
`DoctorID` VARCHAR(20) NOT NULL,
`DoctorName` VARCHAR(50) NOT NULL,
`Dept` VARCHAR(20) NOT NULL,
PRIMARY KEY (`DoctorID`))
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table `Amber's_Clinic_ER_Diagram`.`PatientT1`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `Amber's_Clinic_ER_Diagram`.`PatientT1` (
`PID` VARCHAR(5) NOT NULL,
`Name` VARCHAR(20) NOT NULL,
`Age` INT NULL,
`Weight` VARCHAR(10) NULL,
`Gender` VARCHAR(6) NOT NULL,
`Address` VARCHAR(50) NULL,
`PhoneNo` INT NULL,
`Disease` VARCHAR(50) NOT NULL,
`DoctorID` VARCHAR(20) NOT NULL,
PRIMARY KEY (`PID`, `DoctorID`),
INDEX `fk_Patient - T1_Doctor - T2_idx` (`DoctorID` ASC),
CONSTRAINT `fk_Patient - T1_Doctor - T2`
FOREIGN KEY (`DoctorID`)
REFERENCES `Amber's_Clinic_ER_Diagram`.`DoctorT2` (`DoctorID`)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table `Amber's_Clinic_ER_Diagram`.`OutpatientT5`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `Amber's_Clinic_ER_Diagram`.`OutpatientT5` (
`PID` VARCHAR(5) NOT NULL,
`Date` DATE NOT NULL,
`LabNo` INT NOT NULL,
PRIMARY KEY (`PID`, `Date`))
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table `Amber's_Clinic_ER_Diagram`.`RoomT6`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `Amber's_Clinic_ER_Diagram`.`RoomT6` (
`RoomNo` INT NOT NULL,
`RoomType` VARCHAR(15) NOT NULL,
`Status` VARCHAR(15) NOT NULL,
PRIMARY KEY (`RoomNo`))
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table `Amber's_Clinic_ER_Diagram`.`InpatientT4`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `Amber's_Clinic_ER_Diagram`.`InpatientT4` (
`PID` VARCHAR(5) NOT NULL,
`RoomNo` INT NOT NULL,
`DateOfAdm` DATE NOT NULL,
`DateOfDis` DATE NOT NULL,
`Advance` INT NOT NULL,
`LabNo` INT NOT NULL,
PRIMARY KEY (`PID`, `RoomNo`, `DateOfAdm`),
INDEX `fk_InpatientT4_RoomT61_idx` (`RoomNo` ASC),
CONSTRAINT `fk_InpatientT4_RoomT61`
FOREIGN KEY (`RoomNo`)
REFERENCES `Amber's_Clinic_ER_Diagram`.`RoomT6` (`RoomNo`)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table `Amber's_Clinic_ER_Diagram`.`LabT3`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `Amber's_Clinic_ER_Diagram`.`LabT3` (
`LabNo` INT NOT NULL,
`PID` VARCHAR(5) NOT NULL,
`Weight` VARCHAR(10) NULL,
`DoctorID` VARCHAR(20) NOT NULL,
`Date` DATE NOT NULL,
`Category` VARCHAR(20) NOT NULL,
`PatientType` VARCHAR(30) NOT NULL,
`Amount` VARCHAR(15) NOT NULL,
PRIMARY KEY (`LabNo`, `PID`),
INDEX `fk_LabT3_DoctorT2_idx` (`DoctorID` ASC),
INDEX `fk_LabT3_OutpatientT5_idx` (`PID` ASC),
CONSTRAINT `fk_LabT3_DoctorID`
FOREIGN KEY (`DoctorID`)
REFERENCES `Amber's_Clinic_ER_Diagram`.`DoctorT2` (`DoctorID`)
ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONSTRAINT `fk_LabT3_PID`
FOREIGN KEY (`PID`)
REFERENCES `Amber's_Clinic_ER_Diagram`.`OutpatientT5` (`PID`)
ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONSTRAINT `fk_LabT3_InpatientT41`
FOREIGN KEY (`LabNo`)
REFERENCES `Amber's_Clinic_ER_Diagram`.`InpatientT4` (`LabNo`)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table `Amber's_Clinic_ER_Diagram`.`BillT7`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `Amber's_Clinic_ER_Diagram`.`BillT7` (
`BillNo` INT NOT NULL,
`PID` VARCHAR(5) NOT NULL,
`PatientType` VARCHAR(30) NOT NULL,
`DoctorCharge` INT NOT NULL,
`MedicineCharge` INT NOT NULL,
`RoomCharge` INT NOT NULL,
`OperationCharge` INT NOT NULL,
`NursingCharge` INT NOT NULL,
`LOS` INT NOT NULL,
`Advance` INT NOT NULL,
`HealthCard` VARCHAR(30) NOT NULL,
`Lab Charge` INT NOT NULL,
`Bill` INT NOT NULL,
PRIMARY KEY (`BillNo`, `PID`),
INDEX `fk_BillT7_OutpatientT51_idx` (`PID` ASC),
CONSTRAINT `fk_BillT7_OutpatientT51`
FOREIGN KEY (`PID`)
REFERENCES `Amber's_Clinic_ER_Diagram`.`OutpatientT5` (`PID`)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;
SET SQL_MODE=@OLD_SQL_MODE;
SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;
最佳答案
在这里,我更改了表 Lab3 和 InepticT4。
Lab3是主表,主键为LabNo,因此需要在InPatientT4中添加外键关系,并删除Lab3中的外键引用。
-- MySQL Workbench Forward Engineering
SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL,ALLOW_INVALID_DATES';
-- -----------------------------------------------------
-- Schema Amber's_Clinic_ER_Diagram
-- -----------------------------------------------------
-- Lab 2
-- Amber Lewis
-- Entity-Relationship Diagram for sample Clinic
-- -----------------------------------------------------
-- Schema Amber's_Clinic_ER_Diagram
--
-- Lab 2
-- Amber Lewis
-- Entity-Relationship Diagram for sample Clinic
-- -----------------------------------------------------
CREATE SCHEMA IF NOT EXISTS `Amber's_Clinic_ER_Diagram` DEFAULT CHARACTER SET utf8 ;
USE `Amber's_Clinic_ER_Diagram` ;
-- -----------------------------------------------------
-- Table `Amber's_Clinic_ER_Diagram`.`DoctorT2`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `Amber's_Clinic_ER_Diagram`.`DoctorT2` (
`DoctorID` VARCHAR(20) NOT NULL,
`DoctorName` VARCHAR(50) NOT NULL,
`Dept` VARCHAR(20) NOT NULL,
PRIMARY KEY (`DoctorID`))
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table `Amber's_Clinic_ER_Diagram`.`PatientT1`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `Amber's_Clinic_ER_Diagram`.`PatientT1` (
`PID` VARCHAR(5) NOT NULL,
`Name` VARCHAR(20) NOT NULL,
`Age` INT NULL,
`Weight` VARCHAR(10) NULL,
`Gender` VARCHAR(6) NOT NULL,
`Address` VARCHAR(50) NULL,
`PhoneNo` INT NULL,
`Disease` VARCHAR(50) NOT NULL,
`DoctorID` VARCHAR(20) NOT NULL,
PRIMARY KEY (`PID`, `DoctorID`),
INDEX `fk_Patient - T1_Doctor - T2_idx` (`DoctorID` ASC),
CONSTRAINT `fk_Patient - T1_Doctor - T2`
FOREIGN KEY (`DoctorID`)
REFERENCES `Amber's_Clinic_ER_Diagram`.`DoctorT2` (`DoctorID`)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table `Amber's_Clinic_ER_Diagram`.`OutpatientT5`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `Amber's_Clinic_ER_Diagram`.`OutpatientT5` (
`PID` VARCHAR(5) NOT NULL,
`Date` DATE NOT NULL,
`LabNo` INT NOT NULL,
PRIMARY KEY (`PID`, `Date`))
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table `Amber's_Clinic_ER_Diagram`.`RoomT6`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `Amber's_Clinic_ER_Diagram`.`RoomT6` (
`RoomNo` INT NOT NULL,
`RoomType` VARCHAR(15) NOT NULL,
`Status` VARCHAR(15) NOT NULL,
PRIMARY KEY (`RoomNo`))
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table `Amber's_Clinic_ER_Diagram`.`LabT3`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `Amber's_Clinic_ER_Diagram`.`LabT3` (
`LabNo` INT NOT NULL,
`PID` VARCHAR(5) NOT NULL,
`Weight` VARCHAR(10) NULL,
`DoctorID` VARCHAR(20) NOT NULL,
`Date` DATE NOT NULL,
`Category` VARCHAR(20) NOT NULL,
`PatientType` VARCHAR(30) NOT NULL,
`Amount` VARCHAR(15) NOT NULL,
PRIMARY KEY (`LabNo`, `PID`),
INDEX `fk_LabT3_DoctorT2_idx` (`DoctorID` ASC),
INDEX `fk_LabT3_OutpatientT5_idx` (`PID` ASC),
CONSTRAINT `fk_LabT3_DoctorID`
FOREIGN KEY (`DoctorID`)
REFERENCES `Amber's_Clinic_ER_Diagram`.`DoctorT2` (`DoctorID`)
ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONSTRAINT `fk_LabT3_PID`
FOREIGN KEY (`PID`)
REFERENCES `Amber's_Clinic_ER_Diagram`.`OutpatientT5` (`PID`)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table `Amber's_Clinic_ER_Diagram`.`InpatientT4`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `Amber's_Clinic_ER_Diagram`.`InpatientT4` (
`PID` VARCHAR(5) NOT NULL,
`RoomNo` INT NOT NULL,
`DateOfAdm` DATE NOT NULL,
`DateOfDis` DATE NOT NULL,
`Advance` INT NOT NULL,
`LabNo` INT NOT NULL,
PRIMARY KEY (`PID`, `RoomNo`, `DateOfAdm`),
INDEX `fk_InpatientT4_RoomT61_idx` (`RoomNo` ASC),
CONSTRAINT `fk_InpatientT4_RoomT61`
FOREIGN KEY (`RoomNo`)
REFERENCES `Amber's_Clinic_ER_Diagram`.`RoomT6` (`RoomNo`)
ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONSTRAINT `fk_LabT3_InpatientT41`
FOREIGN KEY (`LabNo`)
REFERENCES `Amber's_Clinic_ER_Diagram`.`LabT3` (`LabNo`)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table `Amber's_Clinic_ER_Diagram`.`BillT7`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `Amber's_Clinic_ER_Diagram`.`BillT7` (
`BillNo` INT NOT NULL,
`PID` VARCHAR(5) NOT NULL,
`PatientType` VARCHAR(30) NOT NULL,
`DoctorCharge` INT NOT NULL,
`MedicineCharge` INT NOT NULL,
`RoomCharge` INT NOT NULL,
`OperationCharge` INT NOT NULL,
`NursingCharge` INT NOT NULL,
`LOS` INT NOT NULL,
`Advance` INT NOT NULL,
`HealthCard` VARCHAR(30) NOT NULL,
`Lab Charge` INT NOT NULL,
`Bill` INT NOT NULL,
PRIMARY KEY (`BillNo`, `PID`),
INDEX `fk_BillT7_OutpatientT51_idx` (`PID` ASC),
CONSTRAINT `fk_BillT7_OutpatientT51`
FOREIGN KEY (`PID`)
REFERENCES `Amber's_Clinic_ER_Diagram`.`OutpatientT5` (`PID`)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;
SET SQL_MODE=@OLD_SQL_MODE;
SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;
关于MySQL:错误代码 1215 无法添加外键约束。我没有重复的主键并且所有数据类型都匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48373609/