首页 > 解决方案 > 两个 SQL Server 表之间的多个 FOREIGN KEY

问题描述

我正在为我的作业创建我的第一个数据库,但我遇到了一个问题。我有一个Tasks表格,其中有一列包含正在处理此任务的员工和更改任务状态的员工。所以我需要两个外键(EmployeeIdChangedId)都引用表的IdEmployee

这是描述我想要的图表:

数据库图。看一下“Tasks”和“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”中。

标签: sqlsql-serverforeign-keys

解决方案


将值插入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.

推荐阅读