多个表级别的

时间:2015-12-30 17:43:39

标签: sql-server

在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>

1 个答案:

答案 0 :(得分:2)

composite primary keyEmployeeAddress列的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)