2009-12-27 96 views
1

如果我提交:多約束鍵

  • 資源(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)

回答

1

只是一個提示:

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

你必須創建在管理表外鍵。

+0

我打算要求作者發佈他們的代碼,但我認爲你對他們的問題是正確的。他們是 – 2009-12-27 13:59:39

+0

。 。我更新的問題是更明確 – leora 2009-12-27 14:10:22