asp.net - microsoft - visual studio installer
Dos claves externas que hacen referencia a la misma clave principal (3)
La opción 1 es una solución perfecta. Puede definir la restricción de clave externa como sigue
1ª restricción de clave foránea para la columna Timesheet_For
ALTER TABLE TIMESHEETTABLE
ADD CONSTRAINT fk_TimesheetTable_EmployeeTable
FOREIGN KEY (TIMESHEET_FOR)
REFERENCES EMPLOYEETABLE(EMPLOYEE_ID)
2a restricción de clave foránea para la columna Entered_By
ALTER TABLE TIMESHEETTABLE
ADD CONSTRAINT fk_TimesheetTable_EmployeeTable_1
FOREIGN KEY (ENTERED_BY)
REFERENCES EMPLOYEETABLE(EMPLOYEE_ID)
¿Está bien tener dos claves externas en una tabla que hacen referencia a una clave principal de otra tabla?
EmployeeID es una clave principal en la tabla de empleados y aparece como una clave externa dos veces en la tabla de hojas de tiempo.
Habrá pocos usuarios administradores llenando hojas de tiempo en nombre de otros empleados.
En el campo de la tabla de hoja de tiempo ''TimsheetFor'' tendrá el ID de empleado de esa persona que ha trabajado en proyectos y el campo ''EnteredBy'' o ''FilledBy'' tendrá el ID de la persona que completó esta hoja de tiempo.
¿Cuál de las siguientes opciones es correcta?
NOTA: Las tablas muestran solo aquellos campos que están relacionados con esta pregunta.
Yo iría con la opción 1 . Es perfectamente correcto tener dos columnas de clave externa que hagan referencia a la misma columna de clave principal en una tabla diferente, ya que cada valor de clave externa hará referencia a un registro diferente en la tabla relacionada.
Estoy seguro de que la opción 2 funcionaría, pero esencialmente tendrías una relación 1 a 1 entre TIMESHEET_TABLE
y TIMESHEET_FILLED_BY
, haciendo que dos tablas sean innecesarias y más difíciles de mantener.
De hecho, si se requieren los pares ENTERED_BY
y TIMESHEET_FOR
en pares, usar la opción 1 tiene mucho más sentido, ya que la base de datos y las claves externas aplican automáticamente esta opción .
sí, no hay problema con eso ... puede usar una clave principal de una tabla en otra tabla como clave externa dos veces.