Múltiplas chaves de restrição
-
21-09-2019 - |
Pergunta
Se eu entreguei:
- Recurso (id (pk), nome)
- Gerenciador (ID (PK), Resource_id (FK), Gerenciador_resource_id (FK))
Deve resource_id e gerente_id serem chaves estrangeiras no Recurso tabela.
Obviamente, não quero inserir valores em cada uma dessas colunas que não são recursos adequados
Quando eu adiciono o primeiro relacionamento (Resource_id <-> id), funciona bem, mas
Quando eu adiciono o segundo (gerente_resource_id <-> id), ele falha com o erro:
Incapaz de criar relacionamento [. . .] A declaração da tabela alterada em conflito com a restrição de chave estrangeira [...]. O conflito ocorreu no recurso de tabela, ID da coluna
Ou preciso dividir isso em 3 mesas?
Recurso (ID, primeiro, último)
Resource_Manager (ID, Resource_id, Gerenciador_id)
Gerente (ID)
Solução
Apenas uma dica:
ATUALIZAR:
Se o seu modelo tiver funcionários-gerentes de maneira muitos para muitos (um pouco incomuns), você poderá fazer:
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
Outras dicas
Você precisa criar as chaves estrangeiras na tabela do gerente.