sql - 两个 SQL Server 表之间的多个 FOREIGN KEY
问题描述
我正在为我的作业创建我的第一个数据库,但我遇到了一个问题。我有一个Tasks
表格,其中有一列包含正在处理此任务的员工和更改任务状态的员工。所以我需要两个外键(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”中。
解决方案
将值插入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
.
推荐阅读
- android - 返回 MediatorResult.Success 时远程调解器不工作
- node.js - 猫鼬中的交叉表查询
- java - 红黑树合并?
- python - 将大文件的特定内容写入多个新文件
- python - 使用 scrapy 解析项目并提高代码速度/整体性能
- c++ - 在异步/线程中使用时“glViewport 中的错误 1282”
- reactjs - 使用 react-virtualized 实现具有动态嵌套子级和节点过滤的嵌套列表
- jpa - 如何使用 @Query 注释和 HQL 编写查询
- java - 以编程方式执行 Google 助理
- azure - Microsoft Azure:高级管理门户链接已禁用