質問
私がテーブルに置いた場合:
- リソース (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)
解決
ちょっとしたヒント:
アップデート:
モデルに従業員とマネージャーが多対多の場合 (少し珍しいですが)、次のようにすることができます。
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
他のヒント
あなたはマネージャーのテーブルに外部キーを作成する必要があります。
所属していません StackOverflow