在Microsoft SQL Server中,假设我有以下表格:
CREATE TABLE dbo.Employee
(
ID int not null,
Name varchar(50) not null
)
CREATE TABLE dbo.EmployeeAddress
(
ID int not null,
EmployeeID int not null,
Address varchar(50) not null
)
CREATE TABLE dbo.Paycheck
(
ID int not null,
EmployeeID int not null,
AddressID int not null,
Checkdate datetime not null,
Amount money not null
)
我知道我可以创建外键以确保Employee表中的employeeid存在于Employee表中,并且我可以创建外键以确保Paycheck中的employeeid和addressid存在于它们各自的表中。我想知道的是,我可以创建一个约束来确保Paycheck中的EmployeeID与EmployeeAddress中的EmployeeID匹配Paycheck中的AddressID吗?
是的,我意识到我可以从Paycheck表中删除EmployeeID并解决问题,但我的真实结构(与员工或他们的薪水没有任何关系)要复杂得多,并且不允许这样做。 / p>
答案 0 :(得分:2)
在composite primary key
和EmployeeAddress
列的ID
表格中创建EmployeeID
CREATE TABLE dbo.EmployeeAddress
(
ID int not null,
EmployeeID int not null,
Address varchar(50) not null,
PRIMARY KEY(ID,EmployeeID)
)
现在,您可以在foreign key
Paycheck
表的Composite primary key
表格中定义EmployeeAddress
ALTER TABLE dbo.Paycheck
ADD CONSTRAINT FK_Paycheck_EmployeeAddress
FOREIGN KEY(AddressID, EmployeeID) REFERENCES EmployeeAddress(ID, EmployeeID)