varias claves de restricción
-
21-09-2019 - |
Pregunta
Si he presentado:
- Recurso (id (PK), nombre)
- Manager (id (PK), RESOURCE_ID (FK), manager_resource_ID (FK))
En caso RESOURCE_ID y MANAGER_ID tanto ser claves externas en el web tabla.
i, obviamente, no quiero entrar en cualquiera de los valores en cada una de las columnas que no son recursos adecuados
Cuando agrego la primera relación (RESOURCE_ID <-> id) funciona bien, pero
Cuando agrego el segundo (manager_resource_id <-> id) falla con el error:
No se puede crear la relación [. . .] La declaración ALTER TABLE en conflicto con la restricción de clave externa [...]. El conflicto se produjo en la tabla de recursos, la columna ID
o tengo que romper esto en 3 mesas?
Recurso (id, primero, último)
RESOURCE_MANAGER (id, RESOURCE_ID, MANAGER_ID)
Manager (id)
Solución
Sólo un consejo:
Actualizar
Si el modelo tiene empleado-gerente ya que muchos-a-muchos (poco inusual) entonces se podría hacer:
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
Otros consejos
Hay que crear las claves externas en la tabla Manager.