質問

私がテーブルに置いた場合:

  • リソース (ID (PK)、名前)
  • マネージャー (id(PK)、resource_id (FK)、manager_resource_ID(FK))

resource_id と manager_id の両方を外部キーにする必要があります。 リソース テーブル。

適切なリソースではないこれらの各列に値を入力したくないのは明らかです

最初の関係 (resource_id <-> id) を追加すると、正常に動作しますが、

2 番目のもの (manager_resource_id <-> id) を追加すると、次のエラーが発生して失敗します。

関係を作成できません [ .。.] ALTER TABLE ステートメントが FOREIGN KEY 制約と競合しました [...]。テーブルリソース、列IDで競合が発生しました

それともこれを 3 つのテーブルに分割する必要がありますか?

リソース(ID、最初、最後)
リソースマネージャー(id, リソースid, マネージャーID)
マネージャー(ID)

役に立ちましたか?

解決

ちょっとしたヒント:

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  

他のヒント

あなたはマネージャーのテーブルに外部キーを作成する必要があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top