Modelo de Entidad-Relación para personas y termos
Modelar significa crear una representación abstracta de la realidad. La representación en sí (denominada modelo) suele ilustrarse en forma de un esquema o dibujo, que varía según el propósito por el cual se desea modelar. Para el caso particular del diseño de bases de datos, se suele utilizar el llamado Modelo de Entidad-Relación (abreviado a través de su sigla MER).
Supongamos que por algún motivo que se desconoce, necesitamos desarrollar un sistema para gestionar información sobre todos los termos del mundo. Primero debemos tener conocimientos suficientes sobre las propiedades de los termos. Recurriendo un poco a nuestro sentido común y conocimiento general, podríamos partir del supuesto de que un termo tiene una marca, una capacidad, y en todo caso podría tener información sobre sus medidas, como ser el alto y el diámetro, si suponemos que tiene forma cilíndrica. Bien podríamos también considerar que un termo tiene color y además un peso expresado en kilogramos. Todos estos elementos (marca, capacidad, alto, diámetro, color y peso) son atributos del termo. Podemos asumir entonces que todos los termos del mundo comparten este conjunto de atributos. Ahí es donde surge el concepto de la entidad, o más técnicamente hablando la Clase, Termo.
Pero claro está, mi termo no es el mismo que el tuyo, ni tampoco es el mismo termo que aquél que tiene José, que está viviendo en Estados Unidos y para recordar un poco las costumbres que hay en Uruguay se llevó su tan querido y anhelado termo en la maleta. Diremos entonces, que tanto tú termo, como el mío y el de José, son instancias de la clase Termo y cada una de ellas será almacenada como un registro diferente en la base de datos.
No quiero seguir siendo repetitivo ni redundante, pero déjenme agregar una nueva suposición a este ejemplo: además de almacenar los datos de todos los termos, se necesita también registrar la información de las personas a las cuales pertenecen. Al hacer esto, nos vemos obligados a agregar una nueva entidad, a saber, la clase Persona. Y aquí es donde tenemos que comenzar a deducir cuáles serían los atributos de una persona que son necesarios o importantes para almacenar en nuestra base de datos (podría ser el nombre, la edad, su identificación, su grupo sanguíneo tal vez, etc).
En este punto tenemos dos entidades o clases: la entidad Termo y la entidad Persona. Ahora, ¿cómo dejamos registrada la información de cuáles son los termos que posee una persona? Para eso no nos alcanza con tener solamente dos entidades separadas, vamos a tener que definir entonces una relación entre ambas.
Una relación es aquello que se encarga de vincular dos entidades entre sí y existen muchos tipos de relaciones, dependiendo de cuál es la naturaleza de ese vínculo. Supongamos que existe en el mundo una ley que dice que una persona no puede tener en su posesión más de un termo a la vez. En ese caso, la relación Persona-Termo sería una relación N a 1 (también se suele decir muchos a uno o many to one en inglés), esto se puede expresar como: N personas pueden tener a lo sumo 1 solo termo cada una. La mejor forma de representar esto sería definir un identificador de termo directamente como un atributo más de la entidad persona. Si además nos dijeran que en la realidad que está siendo objeto de estudio, toda persona tiene que tener sí o sí un termo, entonces sería conveniente fijar como obligatorio el atributo identificador de termo en la entidad Persona, lo que significa que el atributo no puede quedar vacío o sin valor, o lo que es lo mismo no existe una persona que no tenga termo.
Sin embargo, esto en la vida real no es así. Por lo general no existe restricción alguna sobre la cantidad de termos que cada persona puede poseer, escenario en el cual se tiene una relación de tipo 1 a N (uno a muchos o one to many), que puede entenderse como: una persona puede tener N termos diferentes y cada termo a su vez está asignado a una sola persona. En esta situación resulta conveniente agregar un atributo más a la entidad Termo que sea un identificador de la persona que lo posee. Podría incorporarse además (si es que tiene sentido para la realidad analizada) la restricción de que no es posible que exista un termo sin dueño, ante lo cual se debería establecer como obligatorio el atributo identificador de persona dentro de la entidad Termo.
Vayamos ahora a un caso menos real que este: pensemos en un mundo en donde cada persona puede tener en su propiedad más de un termo, pero que cada termo puede ser compartido por más de una persona. Suena como si dos personas se pusieran de acuerdo en comprar un termo a medias y lo utilizaran la mitad del tiempo cada uno. En esta situación, nos encontraríamos frente a una relación Persona-Termo de tipo N a N (muchos a muchos o many to many), que a grandes rasgos significa: cada persona puede tener N termos y cada termo a su vez puede ser asignado a (o compartido por) N personas. Este tipo de relaciones se suele modelar como una entidad nueva que representa a la misma relación (llamémosle entidad Persona-Termo), en donde se agregan dos atributos: un identificador de persona, que hace referencia a uno de los propietarios del termo, y un identificador del termo, que menciona a uno de los termos que esta persona “comparte” o “posee”.
La realidad que se está analizando en este ejemplo es siempre la misma. Lo que varía es el modelo con el cual se representa a la hora de almacenar su información. Eso depende de cómo se interpreta la realidad a modelar, cómo entendemos que son las relaciones entre las entidades y de cuáles son los requerimientos que nos solicitan a la hora de modelar. Si existen tantas variantes posibles de atributos y relaciones para representar una realidad sencilla en donde solo hay dos entidades (en este post se mencionan personas y termos solo para fijar ideas, pero bien podría tratarse de otra pareja de entidades cualesquiera), imagínese lo complejo que sería modelar escenarios del mundo real, en donde se suelen tener mucho más que solamente dos entidades y una relación.
Sin más nada que escribir, me tengo que retirar. Es hora de tomar mate y tengo que calentar agua para mi termo.
Pablo Carballo Soria PabloXaCarballo
Analista en Computación/Desarrollador de Software