【问题标题】:Error Code: 1215 Cannot add foreign key constraint错误代码:1215 无法添加外键约束
【发布时间】:2016-10-27 07:17:33
【问题描述】:

我正在尝试创建健康管理数据库,但出现此错误。有什么问题?

-- table glocation

CREATE TABLE `MOH`.`glocation` (
`street` VARCHAR(20) NOT NULL,
`city` VARCHAR(20) NOT NULL,
`state` VARCHAR(20) NOT NULL,
`geolocation` INT(8),
PRIMARY KEY (`street`, `city`, `state`));

-- table patient

CREATE TABLE `MOH`.`patient` (
`PID` INT(6) zerofill UNSIGNED NOT NULL AUTO_INCREMENT,
`first_name` VARCHAR(45) NOT NULL,
`last_name` VARCHAR(45) NOT NULL,
`sex` VARCHAR(10),
`b_insurance` VARCHAR(45),
`s_insurance` VARCHAR(45),
`education` VARCHAR(20),
`job` VARCHAR(20),
`street` VARCHAR(20),
`city` VARCHAR(20),
`state` VARCHAR(20),
`date_of_birth` date,
`license` boolean,
PRIMARY KEY (`PID`),
CONSTRAINT `street`
  FOREIGN KEY (`street`)
  REFERENCES `MOH`.`glocation` (`street`),
CONSTRAINT `city`
  FOREIGN KEY (`city`)
  REFERENCES `MOH`.`glocation` (`city`),
CONSTRAINT `state`
  FOREIGN KEY (`state`)
  REFERENCES `MOH`.`glocation` (`state`));

错误是:

创建表MOH.patient (...) 错误代码:1215。无法添加 外键约束

【问题讨论】:

  • 为什么要在 MOH.glocation 中创建多列主键,而不是仅使用地理位置字段?为什么要从 MOH.patient 中的 MOH.glocation 复制字段(街道、城市、州)而不是使用地理定位?

标签: mysql foreign-keys mysql-workbench


【解决方案1】:

我应该认为这是因为您试图使 patient.streetpatient.citypatient.state 外键单独但它们不是独立主要的输入glocation

尝试将列的组合设为单个外键,如

CONSTRAINT location
  FOREIGN KEY (street, city, state)
  REFERENCES glocation (street, city, state)

无论如何,我认为这在您的项目环境中更有意义。 (您尝试定义的三个独立约束将允许像 'El Camino Real', 'New York City', 'Florida' 这样的无意义组合,只要 每个独立 存在于 glocation 中。)

【讨论】:

    猜你喜欢
    • 2016-05-01
    • 2018-11-10
    • 2013-07-15
    • 2018-05-13
    • 2015-05-27
    • 2017-09-18
    相关资源
    最近更新 更多