Una tabla secundaria (A.K.A. entidad débil ) es una tabla cuyos atributos de clave principal dependen en otra tabla, por lo que la tabla secundaria se identifica o identificado parcialmente por filas en la tabla de la que depende (padre). Las filas de una tabla secundaria no pueden existir sin una fila correspondiente en su tabla principal.
Para ilustrar, tomemos un ejemplo simple y completamente relevante con el que todos estamos familiarizados:Padres e hijos en el contexto de la familia . Podemos modelar esta relación con tablas así:
En el modelo anterior, cada fila en Parents
la tabla está identificada de forma única por un SSN
. El SSN
es un atributo intrínseco y único para cada padre, por lo que es una entidad independiente o "fuerte" porque no depende de otra tabla para definir su identidad.
Los niños, sin embargo, requieren un padre para poder existir (Parent_SSN
debe referencia a un SSN
existente en los Parents
mesa).
Observe la clave primaria compuesta (Parent_SSN, Name
) en los Children
mesa. Esto significa que los niños están identificados de forma única por la combinación de Parent_SSN
y Name
. No puede consultar por un niño individual basado solo en el Name
porque varios padres pueden tener hijos con el mismo nombre. Del mismo modo, no puede consultar por un niño individual basado solo en el Parent_SSN
campo porque uno de los padres puede tener muchos hijos. Teniendo eso en cuenta, los padres identifican parcialmente a los niños, por lo que identifican relación.
Pero, ¿los niños no pueden ser identificados únicamente por un SSN también? Porque sí, ciertamente. Avancemos y ajustemos nuestro modelo para incluir eso:
En esta versión del modelo, observe que hemos introducido el SSN
campo para Children
. La identidad única de los niños ahora se define por su propio SSN
intrínseco y único . Su identidad ya no depende en los Parents
mesa. Aunque el Parent_SSN
el campo aún hace referencia al SSN
de los Parents
tabla, no forma parte de la identidad única del niño, por lo que los padres tienen una no identificación relación con sus hijos, y ambas tablas ahora pueden considerarse entidades independientes "fuertes".
Aparte, esta versión del modelo tiene algunas ventajas sobre la primera:
- Un padre ahora puede tener dos o más hijos con el mismo nombre, mientras que la integridad de la entidad la restricción en el modelo anterior no permitiría esto.
- Puede permitir el
Parent_SSN
campo para contenerNULL
para dar cuenta del evento de que tiene datos sobre el niño, pero no sabe quién es su padre.
En los dos modelos anteriores, los Parents
se considera que la tabla es la tabla principal de Children
mesa. Sin embargo, en no identificables relaciones como en el segundo modelo, Parents
es solo una tabla principal en el contexto de la clave externa Parent_SSN
porque Parent_SSN
referencias/depende en SSN
en los Parents
tabla, pero no tener alguna parte en la definición de la identidad real de los niños.
Para ilustrar por qué el contexto es importante al decidir qué tablas son tablas principales/secundarias, considere el siguiente ejemplo que involucra una dependencia circular:
En este ejemplo, los empleados y departamentos se identifican de forma única por sus propios atributos y ninguna parte de su identidad deriva de otras tablas.
Aquí tenemos dos relaciones no identificables:un empleado trabaja para un departamento (DeptNo
en el Employee
table), y un departamento es administrado por un empleado (ManagerSSN
en el Department
mesa). ¿Cuál es la tabla principal? ...¿Mesa infantil?
Depende del contexto:¿de qué relación de clave externa está hablando? La tabla Departamento se consideraría la tabla principal en el contexto de DeptNo
en el Employee
tabla porque DeptNo
es referencia/dependiente en el Department
mesa.
Sin embargo, la tabla Empleado se consideraría la tabla principal en el contexto de ManagerSSN
en el Department
tabla porque ManagerSSN
es referencia/dependiente en el Employee
mesa.