Несколько ИНОСТРАННЫХ КЛЮЧЕЙ между двумя таблицами SQL Server - PullRequest
0 голосов
/ 03 марта 2019

Я создаю свою почти первую базу данных для домашней работы, и у меня возникла проблема.У меня есть таблица Tasks, в которой есть столбец с сотрудником, который работает над этой задачей, и сотрудником, который изменил статус задачи.Поэтому мне нужно иметь 2 внешних ключа (EmployeeId и ChangedId), которые оба ссылаются на столбец Id таблицы Employee.

Вот диаграмма, которая описывает то, что я хочу:

Диаграмма базы данных.Взгляните на таблицы «Задачи» и «Сотрудник».

База данных была создана без проблем, но я не могу вставить элементы в таблицу Tasks.

Вот мой код для этих таблиц:

CREATE TABLE [dbo].[Employees]
(
    [Id] INT NOT NULL IDENTITY(1,1) PRIMARY KEY, 
    [FirstName] VARCHAR(50) NOT NULL, 
    [SecondName] VARCHAR(50) NOT NULL, 
    [LastName] VARCHAR(50) NOT NULL 
)

CREATE TABLE [dbo].[Tasks]
(
    [Id] INT NOT NULL IDENTITY(1,1) PRIMARY KEY, 
    [Deadline] DATE NOT NULL, 
    [StatusId] INT NOT NULL,
    [ChangedId] INT NOT NULL,
    [StatusDate] DATE NOT NULL,
    [EmployeeId] INT NOT NULL,
    [ShortInfo] VARCHAR(255) NOT NULL,
    [ProjectId] INT NOT NULL, 
    FOREIGN KEY (EmployeeId) REFERENCES Employees(id),
    FOREIGN KEY (ChangedId) REFERENCES Employees(id),
    FOREIGN KEY (ProjectId) REFERENCES Projects(id),
    FOREIGN KEY (StatusId) REFERENCES Status(id)
)

Добавление элементов в Tasks:

INSERT INTO Tasks(Deadline, StatusID, ChangedId, StatusDate, EmployeeId, ShortInfo, ProjectId)
VALUES ('2019-12-01', 1, 4, '2018-11-29', 2, 'Hack the security system.', 3),
       ('2019-02-17', 4, 1, '2019-01-19', 3, 'Design new class system.', 1),
       ('2019-06-01', 3, 2, '2019-01-11', 4, 'Test the last storyline mission.', 2),
       ('2018-12-05', 2, 2, '2018-10-03', 2, 'Create Zeus statue model.', 2),
       ('2019-05-21', 1, 1, '2019-04-14', 3, 'Test the Horde campaign.', 1);

Информация об ошибке:

Оператор INSERT конфликтовал с ограничением FOREIGN KEY "FK__Tasks__StatusId__6B24EA82".Конфликт произошел в базе данных «Task4», таблице «dbo.Status», столбце «Id».

Ответы [ 2 ]

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

Попробуйте назвать внешние ключи для employeeid и changeid, так как они ссылаются на один и тот же столбец идентификатора таблицы Employee.

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

Вставка значений в tasks должна быть простой:

insert into tasks (deadline, statusid, changeid, statusdate, employeeid, shortinfo, projectid)
    values (@deadlinedate, @statusid, @changeid, @statusdate, @employeeid, 'This is short info', @projectid);

Вам просто необходимо убедиться в следующем:

  • Ни одно из значений не является NULL иони имеют правильный тип.
  • Все столбцы «id» относятся к существующим строкам в соответствующих таблицах.Например, @statusid имеет целочисленное значение, и это значение находится в status.id.
...