多个约束键

时间:2009-12-27 13:50:24

标签: sql-server compound-index

如果我已经提交了:

  • 资源(id(PK),名称)
  • 经理(id(PK),resource_id(FK),manager_resource_ID(FK))

resource_id和manager_id都应该是资源表中的外键。

我显然不想在每个不合适资源的列中输入任何值

当我添加第一个关系(resource_id< - > id)时,它工作正常,但

当我添加第二个(manager_resource_id< - > id)时,它失败并显示错误:

无法创建关系[。 。 。] ALTER TABLE语句与FOREIGN KEY约束冲突[...]。表Resource,列id

中发生了冲突

或者我需要将其分解为3个表吗?

资源(id,first,last)
Resource_manager(id,resource_id,manager_ID)
管理器(ID)

2 个答案:

答案 0 :(得分:1)

只是一个提示:

resourcemngr_model_01

<强>更新

如果您的模型的员工经理多对多(有点不寻常),那么您可以这样做:

resourcemngr_model_02

CREATE TABLE Employee
  ( 
   EmployeeID int NOT NULL
  ,[Name] varchar(50)
  )
go  
ALTER TABLE Employee ADD
CONSTRAINT PK_Employee PRIMARY KEY CLUSTERED (EmployeeID ASC)
go   

CREATE TABLE Manager
  ( 
   EmployeeID int NOT NULL
  ,ManagerID int NOT NULL
  )
go  
ALTER TABLE Manager ADD
 CONSTRAINT PK_Manager PRIMARY KEY CLUSTERED (EmployeeID ASC, ManagerID ASC)
,CONSTRAINT FK1_Manager FOREIGN KEY (EmployeeID) REFERENCES Employee(EmployeeID)
,CONSTRAINT FK2_Manager FOREIGN KEY (ManagerID) REFERENCES Employee(EmployeeID)
,CONSTRAINT chk_Manager CHECK (EmployeeID <> ManagerID) 
go  

答案 1 :(得分:0)

您必须在Manager表中创建外键。