我正在创建一个项目的数据库,我需要为另一个外键声明一个外键,以便检查约束。外键上的外键 - SQL Server
我有一个Person
表和Groups
表,这两个表都包含一个DepartmentID
。每当我在Task
表中插入新任务时,我想检查Groups.DepartmentID
是否与Person.DepartmentID
匹配。
这个想法是任务链接到一个人,并且有两种类型,一个组合类型,它定义了它的数据库工作,财务工作等等,以及定义它的维护,培训等的任务类型。当一个人试图添加具有不适合他/她部门的groupType的任务应该失败。
我试图将这些属性添加到Task
表作为一个外键,但声明对非唯一的或者非主键的外键是不是在Microsoft SQL Server(该DepartmentID
在Person
和Group
表接受不能是唯一的!)。
任何人都知道如何解决这个问题?
CREATE TABLE Department
(
ID int PRIMARY KEY IDENTITY,
Name varchar(50),
UNIQUE ("Name")
)
CREATE TABLE Groups
(
ID int IDENTITY,
GroupType varchar(50) PRIMARY KEY,
Description varchar(255) DEFAULT ('-'),
DepartmentID int
FOREIGN KEY (DepartmentID) REFERENCES Department(ID),
)
CREATE TABLE Person
(
ID int PRIMARY KEY IDENTITY,
Name varchar(50),
DepartmentID int
FOREIGN KEY (DepartmentID) REFERENCES Department(ID)
)
CREATE TABLE TaskType
(
ID int IDENTITY,
TaskType varchar(50) PRIMARY KEY,
Description varchar(255) DEFAULT ('-'),
)
CREATE TABLE Task
(
ID int IDENTITY,
TimeFrame decimal(4,2),
Yearcount int,
GroupType varchar(50),
TaskType varchar(50),
WeekNr int,
ExceptionDetail varchar(255) DEFAULT ('-'),
PersonID int
)
这些是FK在未接受了任务表的属性:
GDID int FOREIGN KEY REFERENCES Groups(DepartmentID),
PDID int FOREIGN KEY REFERENCES Person(DepartmentID),
CHECK (GDID = PDID),
UNIQUE ("TaskType", "GroupType", "WeekNr", "Yearcount"),
FOREIGN KEY (TaskType) REFERENCES TaskType(TaskType),
FOREIGN KEY (PersonID) REFERENCES Person(ID),
FOREIGN KEY (GroupType) REFERENCES Groups(GroupType)
先生,您需要在其他表中使用主键/唯一键。你为什么想这样试试? 'Foreignkey数据应该在主表中唯一可用' –
哪些外键被sql拒绝?请张贴失败的陈述。 – Paolo
这些:GDID INT FOREIGN KEY REFERENCES组(DepartmentID), PDID INT FOREIGN KEY REFERENCES人(DepartmentID), – Alim