Diseño Lógico de una Base de Datos

Unidad de Apoyo para el Aprendizaje

Iniciar

Introducción


Una vez realizado el diseño conceptual de una base de datos, el paso siguiente es el diseño lógico, cuyo objetivo es transformar aquél —en este caso, el modelo relacional—. Por ello, es importante que primero revises su concepto y características principales, y luego puedas expresarlo, a partir de la notación adecuada, pues una vez que te apropies de dichos conocimientos, podrás construir una base de datos. Posteriormente, podrás realizar dos actividades de aprendizaje y una autoevaluación para verificar tus conocimientos adquiridos y, si lo crees necesario, puedes revisar nuevamente el contenido y realizar las actividades para obtener un mejor desempeño.

Productos

Smaldone, J. (2008). Ejemplo de llave primaria en una tabla [imagen]. Tomada de https://blog.smaldone.com.ar/2008/06/25/la-base-de-datos-del-sistema-de-escrutinio-de-msa/



El estudio de este tema te permitirá:

Expresar el modelo lógico con la notación adecuada que te permita la posterior contrucción de una base de datos.

Modelo lógico


El modelo entidad-relación nos permite representar la realidad sobre la cual vamos a almacenar información. Mediante el diagrama entidad-relación (DER), captamos el significado de todo aquello que queremos almacenar en la base de datos. Gracias a esto, podemos pasar de un modelo conceptual a uno lógico y, finalmente, a uno físico.

Para realizar lo anterior, es necesario determinar el modelo de datos con el que construiremos nuestra base. En nuestro caso, utilizaremos el modelo relacional, el cual está basado en relaciones o tablas, para determinar los aspectos físicos de almacenamiento como registros, punteros, direccionamiento y asignación de espacio para memorias intermedias.

La realidad es que hoy en día son los manejadores de bases de datos los que se encargan de esto, y el diseñador no juega un papel decisivo en estos aspectos físicos del almacenamiento. La parte donde sí se involucra el experto es en la modificación de parámetros de rendimiento del manejador.

Dado que el sistema administrador de bases de datos relacionales (RDBMS, por sus siglas en inglés “relational database management system”) es el más utilizado hoy en día, es común que el proceso de diseño se realice inicialmente con el modelo entidad-relación, a través del diagrama respectivo y después se realice un mapeo o trasformación a relaciones o tablas de un modelo relacional.



Ejemplo de llaves foráneas en la tabla factura

Ejemplo de llaves foráneas en la tabla factura (IdCliente, IdAgencia)



Implementación de un modelo E/R al modelo relacional


Una vez realizado el modelado para obtener el diagrama entidad-relación, es necesario seguir un conjunto de pasos para convertirlo en un modelo relacional. Las tres reglas generales para realizar esto son:


Esquema con las tres reglas para implementar un modelo Entidad-Relación a un modelo relacional

Las tres reglas para implementar un modelo E/R a un modelo relacional



A continuación, explicaremos detalladamente los pasos necesarios para esta derivación. Es necesario recordar que, de forma ideal, se debe mantener la semántica del modelo conceptual en el lógico. Desafortunadamente, no siempre es posible hacerlo. Las reglas específicas para derivar un modelo entidad-relación son:

a) Derivación de dominios: Deben crearse los dominios de todos los atributos. Para esto utilizamos la sentencia CREATE DOMAIN; por ejemplo:

CREATE DOMAIN edo_civil AS CHAR(1) CHECK (VALUE IN ('S', 'C'));

b) Derivación de entidades: Cada tipo de entidad se transforma en una relación o tabla. Para ello, utilizamos la sentencia CREATE TABLE.



Ejemplo de una derivación de entidades

(s. a.) (2013). Ejemplo de derivación de entidades [imagen]. Tomada de https://daumindex.wordpress.com/2013/03/18/reglas-de-transformacion-del-modelo-er-al-modelo-relacional-2/



c) Derivación de atributos: Todo atributo de una entidad se transforma en una columna de su relación correspondiente.



Atributos identificadores (claves o principales)

Se transforman en claves primarias. Para ello, se usa la restricción de integridad PRIMARY KEY; por ejemplo:

cod_alumno INTEGER CONSTRAINT pk_cod_alumno PRIMARY KEY

Atributos identificadores alternativos (claves candidatas)

Se les aplica la restricción de integridad UNIQUE; por ejemplo:

rfc CHAR(13) CONSTRAINT un_rfc UNIQUE

Atributos no identificadores (no clave, no principales)

Se les aplica la restricción de integridad de NOT NULL, sólo si es necesario; por ejemplo:

nombre VARCHAR(30) NOT NULL


d) Derivación de interrelaciones:



La interrelación se transforma en una relación que tendrá como superclave los atributos identificadores —claves o principales— de las entidades que relaciona. Los atributos de la relación resultante —relación o tabla de interrelación— se convierten en llaves foráneas —claves ajenas—, mediante la restricción FOREIGN KEY. Para esta restricción, es necesario indicar la tabla padre y la llave primaria en esa tabla. Además, podemos indicar las restricciones de borrado y actualización en cascada; por ejemplo:

( cod_curso INTEGER,
cod_profesor INTEGER,
PRIMARY KEY (cod_curso, cod_profesor), /*Primaria compuesta*/
CONSTRAINT fk_cod_curso FOREIGN KEY (cod_curso) REFERENCES curso(cod_curso)
ON DELETE CASCADE
ON UPDATE CASCADE, /* Foránea con borrado y actualización en cascada*/
CONSTRAINT fk_cod_profesor FOREIGN KEY (cod_profesor) REFERENCES profesor(cod_profesor)
ON DELETE CASCADE
ON UPDATE CASCADE /* Foránea con borrado y actualización en cascada*/)

Otro aspecto importante por derivar es la cardinalidad de las entidades participantes. Como sabemos, existen casos en los que hay restricciones de negocio que impiden que un determinado número de ejemplares de una entidad interactúe con ejemplares de otra entidad. En este caso, es necesario agregar una restricción de aserción. Desafortunadamente, no todos los manejadores de bases de datos incluyen esta posibilidad. En ese caso, debemos utilizar disparadores —triggers— de integridad; por ejemplo, supongamos que un curso sólo puede ser impartido por cuatro profesores, es decir, con cardinalidad (0,4). En ese caso, tendríamos que crear la siguiente aserción:

CREATE ASSERTION profesor_curso
CHECK NOT EXIST (SELECT COUNT(*)
FROM imparte
GROUP BY cod_curso
HAVING
COUNT(*)>=4);

La manera general de transformar esta interrelación consiste en propagar —pasar— el atributo identificador —clave o principal— de la entidad con cardinalidad 1 hacia la entidad con cardinalidad N. Como resultado, la interrelación se pierde; es decir, no se convierte en entidad como en el caso de N:M. El atributo propagado se convierte en llave foránea, para el cual debemos indicar si existe borrado en cascada. La cardinalidad de la interrelación también debe ser implementada como ya establecimos, esto es, utilizando restricciones de aserción o triggers. Adicionalmente, si la cardinalidad indica que el número de ejemplares puede ser 0, la llave foránea aceptará valores nulos. Si, por el contrario, indica que al menos un ejemplar debe estar relacionado con uno o más ejemplares —cardinalidad 1—, la llave foránea debe tener restricción de NOT NULL.



Ejemplo de una interrelación entre entidades

La ocurrencia de la entidad A puede relacionarse con varias ocurrencias de la entidad B

No hay regla fija para la transformación de esta interrelación. Lo más común es aplicar las interrelaciones N:M, aunque puede ser posible emplear las 1:N. Es importante notar que al usar éstas necesitamos decidir en qué dirección se propaga la llave primaria. Para resolverlo, podemos tomar en cuenta al menos dos aspectos:
•Pasar la llave primaria de una entidad fuerte a una débil es generalmente más conveniente.
•Pasar la llave primaria de la entidad con cardinalidad (1,1) a la entidad con cardinalidad (0,1) permite aplicar NOT NULL a la llave foránea.

e) Atributos de interrelaciones: Si la interrelación se transforma en relación, los atributos de la interrelación se convierten en columnas de la relación resultante. En caso de que se aplicase una propagación de identificador o clave, los atributos de la interrelación pasan en la misma dirección que dicha clave.



Ejemplo de un atributo de interrelaciones

Sotorrío, Ó. (2010). La interrelación “tiene” se convierte en tabla [esquema]. Tomada de http://oscarsotorrio.com/post/2010/10/12/Transformacion-del-Modelo-ER-al-Modelo-Relacional.aspx



f) Otras restricciones: Podemos encontrar restricciones de valores posibles para un atributo. Para transformarlas al modelo relacional, utilizamos la restricción CHECK. Además, si el manejador de bases de datos no acepta creación de dominios, con el CHECK es posible restringir los valores de un dominio.



Tipo de integridad Tipo de restricción Descripción

Dominio

DEFAULT

Especifica el valor predeterminado de una columna.

CHECK

Especifica el valor permitido de una columna.

FOREING KEY

Especifica la columna en la que deben existir los valores.

NULL

Especifica si se permite NULL.

Entidad

PRIMARY KEY

Identifica cada fila de manera única.

UNIQUE

Impide la duplicación de claves no principales.

Referencia

PRIMARY KEY

Define columnas cuyo valor debe coincidir con la clave principal de esta tabla.

PRIMARY KEY

Especifica el valor permitido para una columna, basándose en el contenido de otra columna.



g) Transformación de dependencias de existencia e identificación En este caso se realiza una propagación de identificador o clave, asegurándonos de poner en la llave foránea, si es necesaria, la restricción de borrado y actualización en cascada. Cuando se trate de una dependencia de identificación, la llave primaria propagada se combina con algún atributo de la entidad débil para formar una superclave.



Ejemplo de un atributo de interrelaciones

Microsoft. (2007). Ejemplo de interfaz de DBMS para permitir actualizar o eliminar en cascada [imagen]. Tomada de https://support.office.com/es-es/article/Actualizar-los-datos-de-una-base-de-datos-5e90a80c-106d-4c55-996e-07d7200980ce



h) Derivación de tipos y subtipos: No hay una manera de conservar la semántica de los tipos y subtipos en el modelo relacional. Lo más recomendable es crear relaciones para cada supertipo y cada subtipo; después, propagar la clave principal del supertipo en cada relación de los subtipos. Esta clave propagada será, además de llave foránea, la llave primaria de cada subtipo. Finalmente, si queremos asegurarnos de que un tipo no pueda aparecer en varios subtipos, tendremos que usar disparadores que revisen que la clave del tipo no exista ya en algún subtipo.



Ejemplo de un atributo de interrelaciones

(s. a.) (2013). Ejemplo de derivación de tipos y subtipos [imagen]. Tomada de https://daumindex.wordpress.com/2013/03/18/reglas-de-transformacion-del-modelo-er-al-modelo-relacional-2/

UML


El diagrama de clases de UML es una herramienta para modelado de sistemas orientado a objetos; muestra la estructura estática del sistema mediante clases. Estas clases representan objetos involucrados en el sistema; pueden mantener relaciones entre ellas, ser especializaciones de otras clases o tener dependencias. Algunas de estas clases pueden terminar almacenadas en la base de datos, pero no necesariamente. El diagrama de clases es producto del modelado de sistemas orientado a objetos, de tal modo que, si la base de datos es orientada a objetos, sería de esperarse que las clases del sistema sean persistentes de forma transparente.



Ejemplo de diagrama de clases en UML

Microsoft. (2015). Ejemplo de diagrama de clases en UML [imagen]. Tomada de https://msdn.microsoft.com/es-es/library/dd409437.aspx



El problema radica en si la implementación se realiza en una base de datos relacional. En este caso parece necesario, además de este diagrama, elaborar uno de entidad-relación y luego pasarlo a tablas. El diagrama de clases ayuda a modelar las entidades que intervienen en el sistema junto con sus atributos, pero recordemos que no está orientado al modelado de datos. Existen estándares de representación de este tipo de modelos de clases. Uno muy conocido y utilizado es el lenguaje de modelado unificado (UML, por sus siglas en inglés “unified modeling language”). Se trata de una norma de modelado mediante aspectos gráficos auspiciada por el grupo de administración de objetos (OMG, por sus siglas en inglés “object management group”), dedicado al desarrollo de especificaciones y estándares para crear componentes de software.

Ejemplo de diagrama de clases en UML

Yorick, P. (2015). Ejemplo de diagrama de caso de uso en UML [imagen]. Tomada de https://es.wikipedia.org/wiki/Diagrama_de_casos_de_uso. [Un diagrama de casos de uso representa la forma en cómo interactúan los elementos de un sistema.]

Actividad 1. Modelos involucrados en el diseño lógico

El diseño lógico se deriva del diseño conceptual; es el paso previo para la construcción de una base de datos. Para expresar adecuadamente este diseño, es importante que primero identifiques perfectamente los distintos modelos involucrados en él. Para ello, en la siguiente actividad, deberás relacionar dichos modelos con sus descripciones correspondientes.

Actividad 2. El modelo lógico y las reglas de derivación

La transformación del modelo entidad-relación al relacional se conoce como derivación, y existen reglas específicas para su implementación. ¿Eres capaz de expresar el modelo lógico, a través de las reglas de la derivación?Averígualo seleccionando la notación adecuada, de acuerdo con las descripciones que se presentan a continuación.

Autoevaluación. Conceptos sobre el diseño lógico

Como revisaste en este tema, el diseño lógico es el paso siguiente al conceptual, asegura la integridad de los datos; en éste, se transforman las relaciones en tablas, y los atributos, en campos. Así entonces, es necesario que verifiques si te has apropiado de estos conocimientos. Para ello, elige si las siguientes descripciones forman parte o no de los conceptos primordiales del diseño lógico para la construcción de una base de datos.

Fuentes de información

Básicas

Bibliografía

Churcher, C. (2007). Beginning database design. From novice to professional. Berkeley, California: Apress.


De Miguel, A., Piattini, M. y Marcos, E. (2000). Diseño de bases de datos relacionales. Madrid: Alfaomega/RA-MA Editorial.

Johnson, J. L. (1997). Bases de datos. Modelos, lenguajes, diseño. Ciudad de México: Oxford University Press.

Pin-Shan, P. (1976, marzo). The entity-relationship model-toward a unified view of data. ACM Transactions on Database Systems, 1(1), 9-36.

Silberschatz, A., Korth, H. F. y Sudarshan, S. (2006). Fundamentos de bases de datos (5.ª ed.). Madrid: McGraw-Hill.



Documentos electrónicos

Méndez, C. F. (2012). Licenciatura en informática. Bases de datos. Ciudad de México: Facultad de Contaduría y Administración-UNAM. Consultado el 11 de septiembre de 2017 de http://fcasua.contad.unam.mx/apuntes/interiores/docs/20172/informatica/4/apunte/LI_1365_17056_A_BaseDatos.pdf

Complementarias

Documentos electrónicos

Campos, R., Casillas, L. A., Costal, D., Gibert, M., Martín, C. y Pérez, O. (2005). Software libre: bases de datos. Barcelona: Fundación para la Universitat Oberta de Catalunya. Consultado el 4 de octubre de 2017 de http://www.uoc.edu/masters/oficiales/img/913.pdf

(s. a.) (s. f.). Diseño de base de datos relacionales. Universitat de València. Consultado el 4 de octubre de 2017 de http://informatica.uv.es/estguia/ATD/apuntes/teoria/documentos/DisenoBD.pdf

Cómo citar

Texto correspondiente a esta sección.