Ошибка при вставке моих данных в этот код в мою базу данных. Я хотел, чтобы у EventStaff был первичный ключ, составленный из StaffID.EventID, как на этой диаграмме внизу. Я не вижу, что делаю неправильно, потому что таблица в StaffID заполнена и имеет TypeID. Я пытался создать составной ключ из двух разных таблиц, это неправильный способ? Я использовал ссылку на диаграмму.
ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails (`db`.`EventStaff`, CONSTRAINT `fStaff1` FOREIGN KEY (`StaffID`) REFERENCES `Staff` (`StaffID`))
А это код для базы данных
CREATE TABLE EventType (
TypeID INT NOT NULL,
Description VARCHAR(200) NULL,
CONSTRAINT pEventType PRIMARY KEY (TypeID)
);
CREATE TABLE Staff (
StaffID INT NOT NULL,
CONSTRAINT pStaff PRIMARY KEY (StaffID)
);
CREATE TABLE Event (
EventID INT NOT NULL,
Description VARCHAR(500) NULL,
Name VARCHAR(100) NULL,
DateStart DATE NULL,
DateEnd DATE NULL,
TimeStart TIME NULL,
TimeEnd TIME NULL,
TypeID INT NULL,
ClientID INT NULL,
NoBands BOOLEAN NOT NULL,
MaxFoodStall INT NULL,
CONSTRAINT pEvent PRIMARY KEY (EventID),
CONSTRAINT fType1 FOREIGN KEY (TypeID) REFERENCES EventType (TypeID),
);
CREATE TABLE EventStaff (
StaffID int NOT NULL,
EventID int NOT NULL,
Role VARCHAR(45) NULL,
PRIMARY KEY (StaffID, EventID),
CONSTRAINT fStaff1 FOREIGN KEY (StaffID) REFERENCES Staff (StaffID),
CONSTRAINT FEvent1 FOREIGN KEY (EventID) REFERENCES Event (EventID)
);
а вот вставки
insert into EventType (TypeID, Description) values (1, 'Intuitive attitude-oriented hierarchy');
insert into EventType (TypeID, Description) values (2, 'Mandatory executive concept');
insert into Staff (StaffID) values (1);
insert into Staff (StaffID) values (2);
insert into Event (EventID, Description , DateStart, DateEnd, TimeStart, TimeEnd, NoBands, MaxFoodStall, Name) values (1, 'Cloned 6th generation pricing structure', '2018-03-13', '2018-07-20', '11:18 PM', '4:58 PM', false, 17, 'Swaniawski-Ankunding');
insert into Event (EventID, Description , DateStart, DateEnd, TimeStart, TimeEnd, NoBands, MaxFoodStall, Name) values (2, 'Ameliorated mission-critical throughput', '2017-10-11', '2019-01-05', '10:44 AM', '8:26 PM', true, 4, 'Langworth-Ferry');
insert into EventStaff (Role) values ('Editor');
insert into EventStaff (Role) values ('Budget/Accounting Analyst IV');






В коде, который вы разместили в этом вопросе, есть опечатки, и он даже не будет работать как есть. Как только я их исправил, я смог воспроизвести вашу ошибку внешнего ключа. Проблема на самом деле вызвана этими двумя последними вставками:
INSERT INTO EventStaff (Role) VALUES ('Editor');
INSERT INTO EventStaff (Role) VALUES ('Budget/Accounting Analyst IV');
Вы не указываете значения для StaffID и EventID, и эти столбцы помечены как не допускающие значения NULL. Это внешние ключи, и было бы нормально вставить NULL, если бы вы не отметили столбцы как не допускающие значения NULL. Вот один из способов избавиться от этой ошибки:
INSERT INTO EventStaff (Role, StaffID, EventID)
VALUES ('Editor', 1, 1);
INSERT INTO EventStaff (Role, StaffID, EventID)
VALUES ('Budget/Accounting Analyst IV', 2, 2);
Я не знаю, какие значения вы собираетесь вставить, но приведенный выше пример - один из возможных вариантов.
Обратите внимание, что во вставках в таблицу Event вы не указываете значение для столбца TypeID, который также является внешним ключом. Однако в этом случае вы пометили столбец как допускающий значение NULL, поэтому MySQL принимает его.
Вам по-прежнему необходимо установить значения StaffID и EventID при вставке записей EventStaff. Затем, если вам случится вставить идентификаторы, которых нет в справочных таблицах, вы получите ошибку.