Modelado de datos con UML: Multiplicidades


La multiplicidad de una clase dentro de una asociación nos indica cuántas instancias de esa clase pueden asociarse con las otras clases de la asociación.
Se escribe con la siguiente notación: M..N, donde M es el límite inferior y N, el superior
  • Si el límite inferior es 0, la asociación es opcional. Si el límite inferior es 1 o superior implica que la asociación es obligatoria  y como mínimo han de ocurrir ese número de instancias.
  • El límite superior puede estar acotado por un número exacto o ser indefinido. En este último caso se usa el símbolo * (asterisco)
  • Si ambos límites coindicen, se colapsan en un único número. Por ejemplo, 1..1 pasa a ser 1.
Las multiplicidades más comunes son las siguientes:
  • 0..1. Sin instancia o sólo una (opcional)
  • 1. Una y siempre una instancia (obligatorio)
  • *. Cero o múltiples instancias (opcional)
  • 1..*. Múltiples instancias pero al menos una (obligatorio)
MULTIPLICIDADES EN ASOCIACIONES BINARIAS Y UNARIAS
Para leer la multiplicidad en el lado A de una asociación binaria, nos tenemos que preguntar para una instancia concreta de B, cuántas instancias pueden asociarse de A con esa B. Por ejemplo:
Para hallar la multiplicidad de mascota nos preguntamos lo siguiente:
Dada una persona, ¿cuántas mascotas puede tener? Una persona tiene varias mascotas y puede no tener ninguna. Por lo tanto es * (o 0..*)
Fíjate que la multiplicidad no la añadimos en la clase por la que estamos preguntando, sino en el lado inverso. Y para hallar la de persona:
Dada una mascota, ¿cuántas personas pueden ser su dueño? Una mascota pertenece siempre a una y sólo una persona (obligatoria). Por lo tanto es 1.
Otro ejemplo más:
Dado un curso, ¿cuántos empleados se pueden inscribir en él? En un curso se pueden inscribir de 0 a 15 empleados (0..15)
Dado un empleado, ¿a cuántos cursos se puede inscribir? Un empleado puede inscribirse en muchos cursos y no es necesario que lo esté en alguno (*).
MULTIPLICIDADES EN ASOCIACIONES N-ARIAS
Modelar la multiplicidad de cada uno de los lados una asociación N-aria es un poco más complejo respecto a las binarias y unarias. Vamos a modelar primero las multiplicidades máximas. Para ello nos tenemos que preguntar para una agrupación concreta y fija de instancias del resto de clases, cuántas ocurrencias pueden asociarse.
Es decir, supongamos una asociación ternaria A-B-C. Para preguntarse por la multiplicidad de A nos tenemos que preguntar para unas instancias B y C concretas, cuántas ocurrencias de A se admiten para esas B y C concretas. Se recomienda el uso de ejemplos reales y concretos, como en el siguiente caso:
En este ejemplo, un piloto gana grandes premios de Fórmula1 en temporadas. Vamos a tomar como casos concretos al Piloto "Vettel", el Gran Premio F1 de "Mónaco" y la Temporada "2015".
  • En el Gran Premio de Mónaco en la Temporada 2015, ¿cuántos pilotos han podido ganar ese premio? Sólo uno. La multiplicidad máxima de Piloto es 1.
  • Vettel en la temporada 2015, ¿cuántos grandes premios puede ganar? Muchos. La multiplicidad máxima de Gran Premio F1 es *.
  • Vettel en el Gran Premio de Mónaco, ¿cuántas temporadas lo ha ganado? Muchas. La multiplicidad máxima de Temporada es *.
Hay que prestar también atención a las multiplicidades mínimas. UML nunca ha definido un criterio claro en este aspecto. Usaremos el criterio de las tuplas potenciales, que es el más aceptado dentro de la comunidad académica. Partiendo de una asociación A-B-C, A tiene una multiplicidad mínima de 1 sólo cuando todas las combinaciones posibles de B-C (esto es, el producto cartesiano) necesiten estar asociadas a un A. En consecuencia, si tengo 10 instancias de B y 300 de C, tendré mínimo 3.000 relaciones en la asociación. Por regla general las parejas no se combinan "todos con todos" y la multiplicidad mínima suele ser 0.
Veámoslo con este ejemplo: empleados que trabajan en una fábrica cada día por turnos. Para que este modelo sea coherente, hay que tener en cuenta que un empleado sólo trabaja un turno al día, que los empleados tienen vacaciones y días libres y que la fábrica no detiene su actividad nunca.

Vamos a tomar como casos concretos la empleada Ana, el turno de tarde y la fecha de hoy.
  • Hoy en el turno de tarde, ¿cuantos empleados trabajan? Muchos. ¿En Todos los turnos en todas las fechas necesariamente ha de haber algún empleado trabajando? Sí (la fábrica no cierra). La multiplicidad de Empleado es 1..*. Recuerda que se trata de un caso excepcional.
  • Ana hoy, ¿cuanto turnos trabaja? Uno. ¿Todos los empleados han de trabajar en todas las fechas al menos en un turno? No (tienen vacaciones y días libres). La multiplicidad de Turno es 0..1.
  • Ana en el turno de tarde, ¿cuántos días puede trabajar? Muchos. ¿Todos los empleados han de trabajar todos los turnos al menos un día? No (pueden haber empleados con turnos no rotativos). La multiplicidad de Fecha es 0..*.
Si deseas profundizar más sobre las multiplicidades mínimas, te recomendamos este artículo.
Hasta ahora hemos visto el caso para relaciones ternarias. Podemos generalizar este caso al caso N fijando todas las "dimensiones" de la asociación excepto una. Por ejemplo, para sacar la multiplicidad de A en una relación 5-aria A-B-C-D-E, nos tenemos que preguntar para una cuádrupla B-C-D-E, cuántas instancias de A se relacionan con ella.

Comentarios

  1. Buenas tardes, estupendamente explicado, muy útil. Pero en la primera explicación las multiplicidades del diagrama dibujado están al revés. Un saludo.

    ResponderEliminar
  2. En el caso de que un extremo no indique multiplicidad, es sinónimo de 1?

    ResponderEliminar

Publicar un comentario