Atributos Multivaluados. Como implementarlos.

Atributos Multivaluados. Como implementarlos.

En el contexto de un modelo entidad-relación en bases de datos, se considera a los atributos multivaluados o multivalorado a aquellos que pueden tener más de un valor para una única entidad. Esto significa que un registro o entidad específica puede contener múltiples valores para ese atributo en particular. Estos atributos proporcionan una manera flexible de representar situaciones en las que una entidad puede tener diversos valores asociados a una misma característica.

Dentro de la implementación de un modelo Entidad-Relación, muchas veces nos encontramos con estos atributos, y muchas veces la forma de resolver esto dentro de nuestra base de datos se va complicando. En este artículo mostraremos las distintas situaciones que nos podemos encontrar y algunas formas de solución de estas. En particular, creo que se pueden presentar dos situaciones, las cuales se describen a continuación.

La primera situación dentro de atributos multivaluados que podemos encontrar, es, por ejemplo, identificar una entidad "Persona" y que esta pueda tener varios números telefónicos. El diagrama resultante de este requisito es el siguiente:

01_entidad_relacion

En este caso, sabemos que nuestra entidad "Persona" puede tener 0, 1 o muchos teléfonos. En esta etapa y con lo que nos menciona el modelo, nos deja abierto a que podamos restringir, a 1 o 2 teléfonos, lo cual simplemente es agregar uno o dos campos a la Entidad "Persona" al momento de implementar esto físicamente.

En nuestro caso, vamos a dar un paso adicional, y además de mantener el listado de todos los teléfonos que la entidad "Persona" pueda tener, podemos también considerar el estado de este, si está activo y además, la fecha de actualización y modificación. Con esta información adicional, nuestro atributo multivaluado, se puede ya resolver directamente en el modelo entidad-relación, con el siguiente resultado:

02_entidad_relacion

En este caso, dada las nuevas restricciones del modelo que agregamos, un atributo multivaluado se nos transformó en una entidad adicional, con una serie de atributos. En este caso tenemos que considerar que los números de teléfonos son únicos para cada tupla dentro de la entidad "Persona", por lo que no podemos considerar una entidad adicional de referencia, como en el siguiente ejemplo.

Otra situación que se puede presentar con los atributos multivaluados es la siguiente. Consideremos una tienda que maneja órdenes de compra y solicitan almacenar las formas de pagos utilizadas al momento de efectuar el pago de la orden. Un ejemplo de nuestro modelo es el que se presenta a continuación:

03_entidad_relacion

En este caso, tenemos nuestra "Orden Compra", con su identificador, fecha de compra y total de compra (atributo que se puede calcular desde el detalle, pero en este caso se omite esa parte) y las distintas formas de pago usadas para el pago de esta orden. A diferencia del punto anterior, el universo de valores de formas de pago está acotado, dado que estas van a ser determinadas por el negocio en particular, dependiendo qué formas de pago acepte. Por lo que, una forma de resolver esta situación es la que se presenta a continuación:

04_entidad_relacion

Adicional a esto, se incorpora información con respecto a la tupla generada, monto de pago y la fecha de realización del pago.

Físicamente, la implementación final de este atributo multivaluado es el siguiente

05_entidad_relacion

En general, la implementación de atributos multivaluados es un tema un poco complejo en un comienzo en cuanto a modelamiento de datos, por lo que, personalmente recomiendo que sea en el modelo entidad relacional se pueda resolver todas estas aristas, y evitar llegar al paso de creación del modelo relacional para solucionar este punto. El solucionar todos los posibles problemas que puedan surgir de nuestro modelo en una primera etapa, permiten que luego dediquemos fuerzas y energías en solucionar otros problemas que puedan surgir.

Para el desarrollo de los distintos diagramas en este post se utilizó EDR Plus y DBDiagram.

Agregar un comentario