UT03 - Modelo entidad relación avanzado

Conexión legislativa

En esta Unidad de Trabajo nos centraremos en BBDD-CE-06.a, BBDD-CE-06.b, BBDD-CE-06.c, BBDD-CE-06.d y BBDD-CE-06.e


Introducción

En la UT02 estudiamos los cimientos del diseño conceptual mediante el Modelo Entidad/Relación clásico. Aprendimos a abstraer el mundo real en entidades con atributos simples y a conectarlas mediante relaciones binarias (1:1, 1:N, N:M). Este esquema es suficiente para estructurar la gran mayoría de problemas de almacenamiento básicos, pero resulta insuficiente para capturar la semántica completa de sistemas de información complejos.

En las organizaciones reales existen reglas de negocio, restricciones de seguridad y estructuras de datos que no se adaptan de forma limpia a una combinación de relaciones binarias o entidades independientes. Intentar forzar estas situaciones complejas en el modelo básico conduce inevitablemente a dos problemas graves:

  1. Pérdida de semántica y expresividad: el diagrama omite restricciones clave del dominio, dejando la responsabilidad de validarlas a la programación de la aplicación.
  2. Redundancia e inconsistencia: se crean relaciones binarias artificiales que introducen combinaciones de datos inválidas o duplicadas en la base de datos.

¿Por qué necesitamos conceptos avanzados?

Para solucionar estas limitaciones, la UT03 introduce un conjunto de extensiones del modelo conceptual que responden a necesidades específicas de modelado:


Entidades - Fuertes VS Débiles

Hasta ahora, todas las entidades que hemos visto se pueden considerar fuertes (o independientes). Una entidad fuerte posee existencia propia por sí misma dentro del dominio del problema y cuenta con un atributo identificador.

Sin embargo, a menudo nos encontraremos con entidades débiles: aquellas cuya existencia depende de forma estricta de otra entidad principal. Es decir, no pueden existir de forma autónoma en el sistema.

Existen 2 tipos de dependencia: de existencia y de identificación.

Dependencia de existencia

Ocurre cuando la entidad débil posee un atributo identificador propio que la distingue de forma única en todo el sistema, pero su ciclo de vida está completamente ligado al de la entidad fuerte.

Se representan con un rectángulo doble:
ut03-entidades-fuerte-debil.png

Vehículo y Póliza de seguro

En una compañía de seguros podemos tener las entidades VEHÍCULO y PÓLIZA_SEGURO.

  • La póliza posee un número de póliza único que le sirve de atributo principal.
  • Sin embargo, una póliza se crea por y para un vehículo concreto. Si el vehículo se da de baja en el sistema, su póliza asociada deja de tener sentido.

ut03-vehiculo-poliza.png

Dependencia de identidad

Es el grado de dependencia más fuerte. Ocurre cuando la entidad débil no posee un atributo identificador. Para poder identificarla necesitamos combinar 2 elementos:

Se representan de la siguiente manera:

ut03-libro-ejemplar.png500

Compra y Línea de compra

En un supermercado podemos tener las entidades COMPRA y LÍNEA_COMPRA.

  • La entidad COMPRA se identifica con una combinación de fechaHora e idEmpleado, o incluso con un idCompra autogenerado.
  • La entidad LÍNEA_COMPRA representa cada producto individual dentro de un ticket. Internamente se numera con un atributo propio numLinea.

El atributo numLinea no identifica de forma única una instancia en todo el sistema, ya que existen miles de "líneas 1" (una por cada compra realizada en la tienda). Para identificar inequívocamente una línea de compra concreta, es necesario combinar:

  1. El atributo principal de la entidad fuerte: idCompra.
  2. Su clave parcial: numLinea.

La clave completa de una línea de compra sería (idCompra, numLinea).
ut03-compra-lineacompra.png500

Al igual que con el ejemplo anterior, si borramos una instancia de COMPRA, debemos borrar también todas las instancias de LÍNEA_COMPRA asociadas.


Atributos

Además de los atributos simples, principales y compuestos que ya vimos, existen dos tipos especiales de atributos que responden a la acumulación de valores o al comportamiento dinámico de los datos: los atributos multivalorados y los atributos derivados (o calculados).

Atributos multivalorados

Un atributo multivalorado es aquel que puede almacenar más de un valor simultáneamente para una misma instancia u ocurrencia de entidad.

En lugar de definir atributos independientes y rígidos como telefono1, telefono2 o telefono3 (lo cual limita el número de valores y genera huecos nulos en la base de datos), el modelo permite declarar que una propiedad representa una colección o lista de valores.

Ejemplo

  • Un CLIENTE puede disponer de varios números de teléfono de contacto (telefonos).
  • Un EMPLEADO puede hablar varios idiomas (idiomas).
  • Una PELÍCULA puede tener varias categorías o géneros asignados (generos).

Representación gráfica

Atributos derivados

Son aquellos cuyo valor no se almacena directamente de forma física en la base de datos, sino que se deduce, calcula o computa en tiempo real a partir de otros datos del sistema (atributos de la misma entidad, de entidades relacionadas o funciones del sistema como la fecha actual).

Ejemplo

  • edad: se calcula en tiempo real restando la fecha actual a la fecha de nacimiento almacenada (CURRENT_DATE - fechaNacimiento).
  • numEjemplares: en una biblioteca, se calcula contando dinámicamente las ocurrencias de la entidad débil EJEMPLAR asociadas a un LIBRO.
  • importeTotal: en un ticket de COMPRA, se calcula sumando el subtotal de todas sus LÍNEA_COMPRA asociadas más el IVA correspondiente.

Representación gráfica

Documentación en el Diccionario de Datos

Como el diagrama ER solo muestra el nombre del atributo la regla de cálculo exacta debe quedar especificada formalmente en el Diccionario de Datos del sistema.

Toda entrada de un atributo derivado en el Diccionario de Datos debe incluir:

  1. Atributo/s base/origen: datos requeridos para el cálculo.
  2. Expresión de cálculo: la fórmula matemática o lógica de cálculo.

No hace falta ser muy estricto con una sintaxis concreta, ya que aún no hemos especificado las tecnologías que vamos a utilizar. Esta descripción se hace usando nuestras propias palabras.

Entidad / Relación Atributo Derivado Atributos Base / Origen Regla de Cálculo
CLIENTE /edad fechaNacimiento, FECHA_ACTUAL() edad=AñosTranscurridos(fechaNacimiento,FECHA_ACTUAL())
EMPLEADO /antiguedad fechaContratacion, FECHA_ACTUAL() antiguedad=AñosTranscurridos(fechaContratacion,FECHA_ACTUAL())
PRODUCTO /precioFinal precioBase, porcentajeIVA precioFinal=precioBase×(1+porcentajeIVA100)
PEDIDO /importeTotal LINEA_PEDIDO.cantidad, LINEA_PEDIDO.precioUnitario importeTotal=∑(cantidad×precioUnitario)

Relaciones avanzadas

En la UT02 estudiamos cómo conectar entidades mediante relaciones binarias. Estas permiten modelar la inmensa mayoría de las interacciones del mundo real. Sin embargo, existen situaciones donde las reglas de negocio son más complejas que la relación entre dos entidades. Para ampliar la capacidad semántica de los diagramas ER conviene introducir dos tipos de relación nuevos:

Relaciones reflexivas

También llamadas recursivas o de grado 1. Son aquellas relaciones donde la misma entidad cumple 2 roles diferentes en la relación. Algunos ejemplos comunes son las relaciones entre familiares o entre empleados. Por ejemplo:

"Todo empleado trabaja para otro, excepto el jefe de la empresa. Un jefe supervisa a varios empleados"

ut03-reflexivas-empleado.png

Como puede apreciarse, a simple vista no puede saberse qué conexión de EMPLEADO con SUPERVISAR corresponde con la relación "supervisa" y cuál con "es supervisado" y es precisamente por esto que en las relaciones reflexivas resulta obligatorio etiquetar explícitamente el rol en cada uno de los extremos que conectan la entidad con el rombo.

Rol

Son las etiquetas o nombres que especifican la función o papel que desempeña cada instancia de una entidad al participar en una relación reflexiva.

Al conectar una entidad consigo misma, ambos extremos parten del mismo origen. Los roles permiten romper esa ambigüedad indicando en qué sentido debe leerse la regla de negocio:

ut03-reflexivas-empleado-roles.png

Relaciones ternarias

También llamadas de grado 3 (o N-arias en su sentido general). Son aquellas relaciones en las que tres entidades distintas participan de forma simultánea e indivisible en un mismo hecho o transacción del mundo real.

El principio de Irreducibilidad

Una relación es legítimamente ternaria cuando es atómica e irreducible: no se puede desglosar en dos o tres relaciones binarias independientes sin alterar la regla de negocio o perder la trazabilidad de los datos.

Ejemplo: matriculación por curso académico

Consideremos la siguiente regla de negocio en un instituto:

"Un ALUMNO puede cursar en uno o varios MÓDULOS por CURSO ACADÉMICO"

Podríamos tratar de descomponer esta regla en las siguientes relaciones binarias:

  1. ALUMNO cursa un MÓDULO.
  2. ALUMNO se matricula en CURSO_ACADÉMICO.
  3. MÓDULO se oferta en CURSO_ACADÉMICO.

ut03-alumno-curso-modulo.png500

Sin embargo, se da la siguiente situación:

  • Juan cursó Bases de Datos.
  • Juan estuvo matriculado en los cursos 24/25 y 25/26.
  • Bases de Datos se ofertó tanto en 24/25 como en 25/26.

¿En qué curso académico hizo Juan el módulo de Bases de Datos? Es imposible determinar en cuál se matriculó, o si suspendió y se matriculó en ambos cursos. Hasta ahora hemos visto que una solución a esto es mediante atributo en relaciones, pero un atributo en la relación CURSAR que se "desvincule" de la entidad CURSO_ACADÉMICO no es una solución válida. ¿Y si no existiese una instancia de CURSO_ACADÉMICO correspondiente con el atributo de CURSAR?

¿Y si, además, quisiéramos guardar el atributo notaFinal?

  • Si lo ponemos en la relación CURSAR (ALUMNO-MÓDULO): sólo podríamos guardar una única nota para Juan en Bases de Datos a lo largo de toda su vida académica. Si Juan suspende en el curso 24/25 con un 3 y aprueba en el 25/26 con un 8, el sistema no podría almacenar ambas calificaciones sin sobrescribir o duplicar registros.
  • Si lo ponemos en MATRICULAR (ALUMNO-CURSO_ACADÉMICO): guardaríamos una nota global por curso escolar, pero no sabríamos a qué módulo corresponde.
  • Si lo ponemos en OFERTAR (MÓDULO-CURSO_ACADÉMICO): sería la nota del módulo en un curso, ¡pero totalmente desvinculada de quién la ha sacado!

Conclusión: la nota de un alumno no pertenece al alumno solo, ni al módulo solo, ni al curso solo, ni a ninguna combinación de dos de ellos. La calificación pertenece de forma unívoca a la intersección atómica de las tres entidades: un ALUMNO concreto, en un MÓDULO concreto, durante un CURSO_ACADÉMICO concreto.

Representación mediante Relación Ternaria

Para solucionar esta incoherencia y mantener la integridad conceptual, debemos sustituir las relaciones binarias independientes por una relación ternaria atómica.

Desafortunadamente, ERDPlus no permite representar este tipo de relación de manera "pura", sino que depende de otro tipo de entidad llamada "Associative". Como aún no hemos visto ese tipo de entidad, voy a utilizar draw.io.

ut03-ternarias.png500

Participación y cardinalidad en relaciones ternarias

Para establecer la participación de cada una de las entidades en la relación, es necesario fijar una instancia concreta de las otras entidades asociadas:

Paso a paso:

  1. Extremo de ALUMNO:
    • Fijamos CURSO_ACADÉMICO: 25/26.
    • Fijamos MÓDULO: Bases de Datos.
    • ¿Cuántos alumnos pueden matricularse en Bases de Datos en el curso 25/26?
      • Ninguno, si no se oferta el módulo (0) o varios (n).
        ut03-ternarias-participacion1.png500
  2. Extremo de CURSO_ACADÉMICO:
    • Fijamos ALUMNO: Juan.
    • Fijamos MÓDULO: Bases de Datos.
    • ¿En cuántos cursos académicos puede matricularse Juan de Bases de Datos?
      • En ninguno si se matricula de otra cosa (0) o en varios si suspende y tiene que repetir (n).
        ut03-ternarias-participacion2.png500
  3. Extremo de MÓDULO:
    • Fijamos CURSO_ACADÉMICO: 25/26.
    • Fijamos ALUMNO: Juan.
    • ¿De cuántos módulos se puede matricular Juan en el curso 25/26?
      • De ninguno si anula la matrícula (0) o de varios (n).
        ut03-ternarias-participacion3.png500

Para establecer la cardinalidad global, al igual que con las relaciones binarias, nos quedamos con los máximos de participaciones de cada entidad. En este caso, sería una cardinalidad resultante de:

N:M:P

Modelo E/R extendido

Generalización

Agregación

under_construction.webp