Как исправить ограничение внешнего ключа при попытке ссылки на два первичных ключа из одной таблицы? - PullRequest
0 голосов
/ 28 марта 2019

Misson:

Я пытаюсь создать две таблицы в MySQL, первая таблица имеет два первичных ключа (составные). Вторая таблица имеет три, два из которых являются внешними ключами, которые ссылаются на первые таблицы двух первичных ключей. Так что теперь я пытаюсь соединить их, что изолирует код проблемы и можно увидеть ниже.

Проблема:

Отказы MySQL Workbench позволяют мне создать таблицу, которая ссылается на два первичных ключа другой таблицы. Это просто дает мне код ошибки: 1215. Невозможно добавить ограничение внешнего ключа.

Я пытался:

Изменение типов атрибутов с datetime на varchar (). Изменение имен атрибутов. Проверено орфография 5 раз. Ссылка только на один ключ работает нормально, но мне нужны оба.

Код проблемы (таблица SQL):

CREATE TABLE IF NOT EXISTS TestInformation2
(
WorkOrder varchar(15),                              
Date datetime,                                  
TechnicianID smallint,
Primary key (WorkOrder, Date)
) ENGINE = InnoDB;


CREATE TABLE IF NOT EXISTS TestBridge2
(
TestBridgeID integer Primary key,
WorkOrder varchar(15),      
Date datetime,                  
Foreign key (WorkOrder) references TestInformation (WorkOrder),
Foreign key (Date) references TestInformation (Date)
) ENGINE = InnoDB;

Результат, который я хочу:

Создать таблицу «TestBridge», которая имеет два атрибута внешнего ключа: WorkOrder и Date

Ответы [ 2 ]

1 голос
/ 28 марта 2019

Это должен быть один составной внешний ключ, а не два:

CREATE TABLE `TestBridge2` (
    `TestBridgeID` INTEGER NOT NULL,
    `WorkOrder` VARCHAR(15),
    `Date` DATETIME,
    PRIMARY KEY (`TestBridgeID`),
    CONSTRAINT FOREIGN KEY (`WorkOrder`, `Date`) REFERENCES `TestInformation2` (`WorkOrder`, `Date`)
)
ENGINE=InnoDB;

0 голосов
/ 28 марта 2019

Для этого необходимо создать один внешний ключ, например:

CREATE TABLE IF NOT EXISTS TestBridge2
(
TestBridgeID integer Primary key,
WorkOrder varchar(15),      
Date datetime,                  

Foreign key (WorkOrder, Date) references TestInformation2 (WorkOrder, Date)
) ENGINE = InnoDB;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...