Elementos EER

Agregaciones

Vamos a ver cómo se resuelve a partir del siguiente ejemplo, donde la relación de la agregación es una binaria M:M, pero los pasos a seguir serían los mismos que si fuese una relación unaria o ternaria, tenga la conectividad que tenga.

Pasos a seguir:

  1. Resolver la relación de la agregación sin tener en cuenta el resto del esquema ER, pero SIEMPRE debe salir una tabla nueva para la relación, aunque sea 1:1 o 1:M

  2. Continuar con el diseño del resto del esquema. Para resolver las relaciones con la agregación, lo haremos como si estuvieran relacionadas con la tabla que ha salido antes en la relación de la agregación (en este caso, R).

Ejercicio 23

Pasa a tablas el siguiente ER.

Solución

Tener en cuenta

Para que la solución sea más sencilla he puesto la relación de la agregación (asignar) como una tabla a parte y con el nombre de la agregación (Usuarios). De esta manera una vez resuelta la agregación, la relación solucionar se relacioonará M:M entre la tabla Usuarios y la de Ejercicios.

Especializaciones / Generalizaciones

Vemos cómo sería el paso a tablas a partir del siguiente ejemplo:

ejemplo generalización

  1. Una tabla por cada superclase (con su clave y los atributos propios de la superclase):

    Tabla EMPLEADOS
    EMPLEADOS = dni + nombre + ape1 + ape2 + d_nacimiento + dirección
  2. Una tabla para cada subclase (con la clave de la superclase y los atributos propios de la subclase). Y claves ajenas correspondientes.

    Tabla COMERCIALES
    COMERCIALES = dni + comisión
    - C. Aj: dni -> EMPLEADOS(dni)
    Tabla TÉCNICOS
    TÉCNICOS = dni + nivel
    - C. Aj: dni -> EMPLEADOS(dni)
    Tabla INGENIEROS
    INGENIEROS = dni + licenciatura
    - C. Aj: dni -> EMPLEADOS(dni)

Si la especialización es Total:

  • R.I. Empleados[dni] = Comerciales[dni] Técnicos[dni] Ingenieros[dni]

Si la especialización es Disjunta:

  • R.I. Comerciales[dni] Técnicos[dni] =
  • R.I. Comerciales[dni] Ingenieros[dni] =
  • R.I. Técnicos[dni] Ingenieros[dni] =

Parcial y Disjunta

Para los otros tipos de especialización (tanto parcial como superpuesta) no pondremos ninguna restricción de integridad, ya que no suponen ninguna limitación a los datos.

Otra forma, si la especialización es Total y Disjunta

Ninguna tabla para la superclase. Y una tabla por cada subclase: con la clave y los atributos de la superclase más los atributos propios de la subclase:

COMERCIALES = DNI + Nombre + Cog1 + Cog2 + Fecha_nace +Dirección + Comisión

TÉCNICOS = DNI + Nombre + Cog1 + Cog2 + Fecha_nace +Dirección + Nivel

INGENIEROS = DNI + Nombre + Cog1 + Cog2 + Fecha_nace +Dirección + Licenciatura

Pero esta opción:

  • no es válida puesto que no podríamos controlar que el dni no se pueda repetir (por ejemplo, podría haber un comercial con el mismo dni que un técnico)
  • no es válida para una especialización Parcial ya que no podríamos insertar a un empleado que no fuera de ninguna especialidad.
  • no es válida para una especialización Superpuesta, puesto que si un empleado tiene muchas especialidades, sus datos aparecerían de forma repetida en más de una tabla.

Además, tiene el inconveniente de que, cuando buscamos a un empleado cualquiera, deberemos recorrer todas las tablas de las subclases para ver si está o no.

Esta opción NO es una buena práctica.

Ejercicio

Ejercicio 24

Pasa a tablas el siguiente ER.

Solución