|
1. Análisis y diseño. Fases
Una vez tenemos claro los elementos y la forma de trabajar con el modelo entidad-relación de Chen, podemos empezar a analizar y diseñar lo que será el boceto de nuestra base de datos. En este boceto se utilizarán las entidades, las relaciones y los atributos con el fin de diferenciar los componentes que, posteriormente, serán implementados en una base de datos.
El análisis y diseño del modelo entidad-relación se lleva a cabo mediante una serie de pasos que nos permitirán facilitar la labor de identificación de los diferentes elementos. Las etapas o fases son las siguientes:
- Identificar entidades
- Identificar atributos y dominios
- Identificar claves principales
- Identificar relaciones y su grado
- Representación del modelo entidad-relación
- Verificaciones
1.1. Identificar entidades
Para identificar a las entidades, debemos examinar las especificaciones de requisitos de usuario y buscar los nombres o sustantivos (por lo general actúan como sujero o complemento directo) que se mencionan. Otra forma de identificarlos es pensar en aquellos que existen por sí mismos (por ejemplo, empleado es una entidad porque los empleados existen, sepamos o no sus datos).
Al identificar entidades pensaremos en: objetos reales, documentos, personas, actividades u objetos abstractos. Además, debemos tener cuidado con elegir un nombre adecuado e identificativo con el fin de no tener problemas posteriormente.
1.1.1. Ejemplos
Por ejemplo (en negrita se muestran las entidades):
- Una empresa vende productos a varios clientes. Se necesita conocer los datos personales de los clientes (nombre, apellidos, dni, dirección, teléfonos, edad, fecha de nacimiento). Cada producto tiene un nombre y un código. Un cliente puede comprar varios productos a la empresa, y un mismo producto puede ser comprado por varios clientes.
- Los productos son suministrados por diferentes proveedores. Se debe tener en cuenta que un producto sólo puede ser suministrado por un proveedor, y que un proveedor puede suministrar diferentes productos. De cada proveedor se desea conocer el NIF, nombre y dirección.
Como podemos observar, las entidades serán clientes (o cliente), productos (o producto) y proveedores (o proveedor). No importa si el nombre está en singular o plural, ya que lo importante será identificar las entidades.
1.2. Identificar atributos y dominios
A partir de la identificación de las entidades, podemos comenzar con la de los atributos. Para ello volvemos a buscar nombres que identifiquen propiedades, cualidades, identificadores o características de entidades, teniendo en cuenta que todos ellos representarán información que se quiere almacenar de las entidades. También se pueden observar las preposiciones entre sustantivos como, por ejemplo, "el precio del artículo", donde el artículo será una entidad y el precio un atributo de dicha entidad.
Un aspecto importante a tener en cuenta es si los atributos son simples o compuestos. Por ejemplo, un valor como "calle Quart, 122, Valencia" puede ser uno solo o una combinación de varios: calle Quart; 122; Valencia. Lo más sencillo es decidir si queremos acceder a los diferentes componentes (atributo compuesto) o no (atributo simple).
Los atributos, también pueden ser almacenados o derivados, para lo que debemos pensar a partir de qué atributos podemos extraer la información derivada. Por ejemplo, si tenemos el atributo fecha_nacimiento, será fácil ver que la edad será un atributo derivado.
El siguiente paso será identificar los dominios de los atributos anteriores, es decir, el conjunto de valores que pueden tener. Para ello debemos pensar en los posibles valores que puede contener el atributo (teniendo en cuenta las longitudes máximas y/o mínimas, así como el tipo de datos). Así, el dominio de la edad de una persona será un número (de una a tres cifras), el de una dirección será una cadena (de 30 caracteres), etc.
1.2.1. Ejemplos
Por ejemplo (en negrita se muestran los atributos):
- Una empresa vende productos a varios clientes. Se necesita conocer los datos personales de los clientes (nombre, apellidos, dni, dirección, teléfonos, edad, fecha de nacimiento). Cada producto tiene un nombre y un código. Un cliente puede comprar varios productos a la empresa, y un mismo producto puede ser comprado por varios clientes.
- Los productos son suministrados por diferentes proveedores. Se debe tener en cuenta que un producto sólo puede ser suministrado por un proveedor, y que un proveedor puede suministrar diferentes productos. De cada proveedor se desea conocer el NIF, nombre y dirección.
Además, los dominios podrían ser:
- Nombre: cadena de 20 caracteres
- Apellidos: cadena de 30 caracteres
- Dni: cadena de 9 caracteres
- Dirección: cadena de 40 caracteres
- Teléfonos: cadena de 10 caracteres
- Edad: número de tres dígitos
- Fecha nacimiento: fecha
- Nombre: cadena de 10 caracteres
- Código: cadena de 5 caracteres
- NIF: cadena de 8 caracteres
- Nombre: cadena de 10 caracteres
- Dirección: cadena de 40 caracteres
1.3. Identificar claves principales
Una vez tenemos todas las entidades con sus respectivos atributos, debemos seleccionar los atributos clave que identifiquen unívocamente todas las ocurrencias de esa entidad. En caso de haber varios, debemos seleccionar uno de ellos y subrayarlo tal y como comentamos en la práctica anterior.
1.3.1. Ejemplos
Ejemplos de claves principales podrían ser: DNI (entidad persona), Expediente (entidad alumno), CIF (entidad empresa), etc.
Si observamos el ejemplo sobre el que estamos trabajando (en negrita indicamos los atributos clave):
- Una empresa vende productos a varios clientes. Se necesita conocer los datos personales de los clientes (nombre, apellidos, dni, dirección, teléfonos, edad, fecha de nacimiento). Cada producto tiene un nombre y un código. Un cliente puede comprar varios productos a la empresa, y un mismo producto puede ser comprado por varios clientes.
- Los productos son suministrados por diferentes proveedores. Se debe tener en cuenta que un producto sólo puede ser suministrado por un proveedor, y que un proveedor puede suministrar diferentes productos. De cada proveedor se desea conocer el NIF, nombre y dirección.
1.4. Identificar relaciones y su grado
El siguiente paso será identificar las relaciones existentes entre ellas. Del mismo modo que para las entidades se buscaban nombres en las especificaciones, para las relaciones debemos buscar expresiones verbales (por ejemplo: oficina tiene empleados, empleado gestiona inmueble, alumno asiste a clases, etc.). Si las especificaciones de requisitos reflejan estas relaciones es porque son importantes para la empresa y, por lo tanto, se deben reflejar en el esquema conceptual.
En el modelado de las relaciones debemos tener cuidado, ya que sólo interesarán las relaciones necesarias. En el ejemplo anterior, se han identificado las relaciones empleado gestiona inmueble y cliente visita inmueble. Se podría pensar en incluir una relación entre empleado y cliente: empleado atiende a cliente, pero observando las especificaciones de requisitos no parece que haya interés en modelar tal relación.
Aunque la mayoría de las relaciones son binarias (participan dos entidades), es posible encontrar relaciones en las que participen más de dos, así como relaciones recursivas. Además, hay que determinar las cardinalidades con las que participa cada entidad en cada una de ellas. Éstas son un tipo de restricción que se utiliza para comprobar y mantener la calidad de los datos.
1.4.1. Ejemplos
Ejemplos de relaciones podrían ser: un proveedor suministra varios artículos y cada artículo lo pueden suministrar varios proveedores, en un banco existen varias sucursales y cada sucursal solo puede ser de un banco.
Si observamos el ejemplo sobre el que estamos trabajando (en negrita indicamos las relaciones):
- Una empresa vende productos a varios clientes. Se necesita conocer los datos personales de los clientes (nombre, apellidos, dni, dirección, teléfonos, edad, fecha de nacimiento). Cada producto tiene un nombre y un código. Un cliente puede comprar varios productos a la empresa, y un mismo producto puede ser comprado por varios clientes.
- Los productos son suministrados por diferentes proveedores. Se debe tener en cuenta que un producto sólo puede ser suministrado por un proveedor, y que un proveedor puede suministrar diferentes productos. De cada proveedor se desea conocer el NIF, nombre y dirección.
Además, tenemos que fijar las cardinalidades máximas de cada una de las relaciones:
- En el caso de la relación comprar podríamos ver que cada cliente puede comprar varios productos (N) y cada producto puede ser comprado por varios clientes (M). Por tanto la cardinalidad será N:M.
- En caso de la relación suministrar podríamos ver que cada producto puede ser suministrado por varios proveedores (N) y cada producto solo puede ser suministrado por un proveedor (1). Por tanto la cardinalidad será 1:N.
1.5. Representación del modelo entidad-relación
Utilizando la simbología vista, representaremos gráficamente todas las entidades, relaciones, atributos y cardinalidades. En el ejemplo hemos ido representando, parcialmente y paso a paso, los elementos nuevos que iban surgiendo en cada uno de ellos.
Recordamos, en la imagen inferior, la simbología que se ha utilizado para cada uno de los elementos:
2. Ejemplos de diseño
2.1. Gabinete de abogados
Se quiere diseñar una base de datos relacional para almacenar información sobre los asuntos que lleva un gabinete de abogados. Cada asunto tiene un número de expediente que lo identifica, y corresponde a un solo cliente. Del asunto se debe almacenar el período (fecha de inicio y fecha de archivo o finalización), su estado (en trámite, archivado, etc.), así como los datos personales del cliente al que pertenece (DNI, nombre, dirección, fecha nacimiento). Algunos asuntos son llevados por uno o varios procuradores, de los que nos interesa también los datos personales (DNI, número de colegiado, nombre, apellidos, dirección, número de casos ganados).
- ENTIDADES: asunto, cliente, procurador
- ATRIBUTOS:
- Asunto: num expediente, período (compuesto por fecha inicio y fecha fin), estado
- Cliente: dni, nombre, dirección, fecha nacimiento
- Procurador: dni, nombre, apellidos, número colegiado, casos ganados
- RELACIONES: corresponder (cardinalidad 1:N), llevar (cardinalidad N:M)
- ATRIBUTOS CLAVES: num expediente (ASUNTO), dni (CLIENTE), dni (PROCURADOR)
- DOMINIOS:
- num expediente: número 4 dígitos
- fecha inicio: fecha
- fecha fin: fecha
- estado: cadena de 10 caracteres
- dni: cadena de 9 caracteres
- nombre: cadena de 20 caracteres
- apellidos: cadena de 20 caracteres
- dirección: cadena de 30 caracteres
- fecha nacimiento: fecha
- número colegiado: número de 5 dígitos
- casos ganados: número de 5 dígitos
2.2. Videoclub
Se desea diseñar una base de datos relacional que almacene la información sobre los préstamos de las películas de un videoclub. En la actualidad, la gestión de esta información se lleva cabo del siguiente modo:
Cada socio tiene una ficha con una serie de datos asociados: el número, el nombre del socio, su dirección y teléfono, y los nombres de sus directores favoritos. Además, cada socio puede sacar prestadas películas de las que interesa saber el título, el género (comedia, terror, etc.), su director, el año y los actores que intervienen. Un socio puede tomar prestadas varias películas y cada película puede ser prestada a varios socios.
Cada película está guardada en un archivador y cada archivador tiene varias películas. De los archivadores se desea conocer: el número de serie, la ubicación, el número de estanterías, el total de películas y la fecha de compra.
- ENTIDADES: socio, películas, archivador
- ATRIBUTOS:
- Socio: número, nombre, dirección, teléfono, director favorito (multivaluado)
- Películas: título, género, director, actor (multivaluado), año
- Archivador: estanterías, total películas (derivado de las películas), fecha compra, num serie, ubicación
- RELACIONES: sacar (cardinalidad N:M), guardar (cardinalidad 1:N)
- ATRIBUTOS CLAVES: número (SOCIO), título, director, año (PELÍCULAS), num serie (ARCHIVADOR)
- DOMINIOS:
- número: número de 4 dígitos
- nombre: cadena de 30 caracteres
- dirección: cadena de 30 caracteres
- teléfono: cadena de 10 caracteres
- director favorito: cadena de 30 caracteres
- título: cadena de 30 caracteres
- género: cadena de 10 caracteres
- director: cadena de 30 caracteres
- actor: cadena de 30 caracteres
- año: número de 4 dígitos
- estanterías: número de 2 dígitos
- total películas: número de 2 dígitos
- fecha compra: fecha
- num serie: cadena de 10 dígitos
- ubicación: cadena de 10 dígitos
|