多约束键

问题描述:

如果我提交:多约束键

  • 资源(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约束冲突[...]。冲突发生在表资源,列编号

或者我需要将此分解成3个表?

资源(ID,第一个,最后一个)
RESOURCE_MANAGER(ID,RESOURCE_ID,经理标识)
经理(ID)

只是一个提示:

resourcemngr_model_01

UPDATE

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

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 
+0

如果我外键回到同一张表的资源ID和经理ID我真的需要3表吗? – leora 2009-12-27 14:45:33

+0

'资源'是为了资源;员工的'员工','经理ID(BossID)'用于公司层级(谁向谁报告)。 'ResourceManager'描述谁负责什么 - 我假设资源不是员工,而是一个事物或一个“外部对象”。 – 2009-12-27 21:25:45

+0

对不起。 。也许是坏名字。 。我正在使用资源作为员工表。我不想让资源拥有经理ID,因为有些资源有多个经理(因此最初的两个表)。 – leora 2009-12-27 23:45:28

你必须创建在管理表外键。

+0

我打算要求作者发布他们的代码,但我认为你对他们的问题是正确的。他们是 – 2009-12-27 13:59:39

+0

。 。我更新的问题是更明确 – leora 2009-12-27 14:10:22