1

如果我提出:

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

resource_id 和 manager_id 都应该是Resource表的外键。

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

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

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

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

还是我需要把它分成 3 张桌子?

Resource(id, first, last)
Resource_manager(id, resource_id, manager_ID)
Manager(id)

4

2 回答 2

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  
于 2009-12-27T14:26:33.763 回答
0

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

于 2009-12-27T13:53:17.057 回答