我正在創建一個項目的數據庫,我需要爲另一個外鍵聲明一個外鍵,以便檢查約束。外鍵上的外鍵 - 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