Diseño lógico de bases de datos
Índice
- Introducción
- Objetivos
- 1.Introducción al diseño lógico
- 2.Reconsideración del modelo conceptual: trampas de diseño
- 3.Diseño lógico: transformación del modelo conceptual en el modelo relacional
- 3.1.Conceptos previos del modelo relacional
- 3.2.Impacto del uso de los valores nulos
- 3.3.Tipo de entidad
- 3.3.1.Atributos multivaluados
- 3.4.Tipo de relación
- 3.5.Tipos de entidades asociativas
- 3.6.Generalizaciones
- 3.7.Restricciones
- 3.7.1.Multiplicidades
- 3.7.2.Generalizaciones
- 3.7.3.Abrazos mortales
- 3.8.Reconsideraciones
- 4.Normalización
- 4.1.Anomalías
- 4.2.Conceptos previos
- 4.3.Teoría de la normalización
- 4.3.1.Primera forma normal
- 4.3.2.Segunda forma normal
- 4.3.3.Tercera forma normal
- 4.3.4.Forma normal de Boyce-Codd
- 4.3.5.Reglas de Armstrong
- 4.3.6.Algoritmo de análisis
- 4.3.7.Algoritmo de síntesis
- 4.3.8.Cuarta forma normal
- 4.3.9.Quinta forma normal
- 4.4.Práctica de la normalización
- Resumen
- Glosario
- Bibliografía
Introducción
Objetivos
-
Entender el diseño lógico como actividad de transformación.
-
Conocer las trampas de diseño e identificar las situaciones en las que se pueden producir.
-
Conocer los efectos negativos que puede suponer la existencia de valores nulos.
-
Conocer las alternativas de transformación de los elementos del modelo conceptual en los diferentes elementos del modelo relacional.
-
Conocer y aplicar los diferentes mecanismos de definición de restricciones en el modelo relacional.
-
Conocer las anomalías que se pueden producir en un esquema no normalizado.
-
Conocer las formas normales hasta la quinta, y ser capaces de aplicarlas a un esquema dado.
1.Introducción al diseño lógico
2.Reconsideración del modelo conceptual: trampas de diseño
2.1.Abanico
2.2.Corte
2.3.Pérdida de afiliación
2.4.Aridad de los tipos de relación
2.5.Semántica de los tipos de entidad
3.Diseño lógico: transformación del modelo conceptual en el modelo relacional
3.1.Conceptos previos del modelo relacional
-
Clave candidata. Un atributo o grupo de atributos constituye una clave candidata de la relación cuando no puede haber dos tuplas con el mismo valor en aquel atributo o grupo de atributos. Además, no es posible asignar valor nulo a estos atributos.
-
Clave primaria. De entre las claves candidatas, el diseñador elige una que será la que utilizaremos habitualmente para identificar de manera unívoca una tupla de la relación. En lenguaje SQL, la restricción PRIMARY KEY sirve para especificar la clave primaria de una relación.
-
Clave alternativa. Cada una de las claves candidatas que no ha sido elegida clave primaria recibe el nombre de clave alternativa. En lenguaje SQL, se usa la cláusula UNIQUE se utiliza para especificar una clave alternativa en una relación.
EjemploSiguiendo con el ejemplo anterior sobre la relación de orquestas, si añadimos un atributo con el nombre de orquesta, y éste es diferente para cada una, dicho nombre también puede ser clave candidata y, puesto que la otra es la primaria, esta sería una clave alternativa.
-
Clave foránea. Se puede especificar que un atributo o conjunto de atributos de una relación R1 forman una clave foránea, que referencia una relación R2 del esquema, mediante una clave candidata de R2. Esta clave candidata de R2 deberá estar formada por un conjunto de atributos que se corresponden uno a uno con los de la clave foránea de R1. La declaración de clave foránea implica que para cada tupla t de R1 debe existir una tupla de R2 que tenga como valor de los atributos de la clave candidata referenciada los mismos valores que tiene la tupla t en los atributos de la clave foránea. De manera alternativa, t puede tener valores nulos en los atributos de la clave foránea. En lenguaje SQL, la restricción FOREIGN KEY permite especificar la clave foránea de una relación.
EjemploSi tenemos definidas las relaciones Obra (con un atributo nombreObra y un atributo comp) y Compositor (con un atributo nombreComp –que es clave primaria– y un atributo anoNac) y decimos que el atributo comp de Obra es clave foránea que referencia Compositor por medio de nombreComp, entonces para cada obra que no tenga el valor nulo en comp debe existir un compositor con este valor en el atributo nombreComp.
-
Valores nulos. Decimos que no admiten valores nulos todos aquellos atributos que siempre deben estar informados. En lenguaje SQL, un atributo de este tipo se especifica mediante la restricción NOT NULL aplicada a la columna en cuestión.
-
Comprobación de una condición. Es una restricción que verifica que el valor de uno o más atributos satisface una expresión booleana que se especifica en la declaración de la restricción. En lenguaje SQL, usamos la restricción CHECK seguida de la expresión que debe satisfacerse.
EjemploSi la relación de orquestas utilizada anteriormente tiene un atributo numérico denominado numeroMusicos y queremos que todas las orquestas presentes en la relación tengan 30 músicos o más, estableceremos la restricción Check(numeroMusicos >= 30).
-
Denotaremos las relaciones a partir del nombre, seguido de la lista de atributos entre paréntesis y separados por comas.
-
Denotaremos las claves primarias subrayando con una línea continua los atributos que las forman.
-
Denotaremos las claves alternativas subrayando con una línea discontinua los atributos que las forman.
-
Denotaremos las claves foráneas como flechas que tienen su origen en el conjunto de atributos que las forman y su destino en el conjunto de atributos que forman la clave referenciada. Esta notación es diferente de la notación utilizada en otros textos sobre diseño de bases de datos, pero resulta interesante, puesto que muestra de manera gráfica y más comprensible la transformación del esquema conceptual en el modelo relacional. En caso de tener un gran número de relaciones, puede ser confusa porque puede implicar un gran número de flechas que se cruzan entre sí. En estas ocasiones será mejor usar una notación textual que indique en cada relación qué claves foráneas contiene y qué relación referencia cada clave foránea.
-
Utilizaremos el tipo de letra negrita en los nombres de atributo que queremos declarar NOT NULL.
3.2.Impacto del uso de los valores nulos
SELECT * FROM Obra WHERE nTenores >= 1
SELECT * FROM ObraCoral WHERE nTenores >= 1
SELECT * FROM Director WHERE pais NOT IN (SELECT pais FROM Compositor) SELECT * FROM Director d WHERE NOT EXISTS (SELECT * FROM Compositor c WHERE d.pais = c.pais)
3.3.Tipo de entidad
3.3.1.Atributos multivaluados
3.4.Tipo de relación
3.4.1.Tipos de relaciones binarias con una multiplicidad 1
3.4.2.Tipos de relaciones binarias reflexivas
-
bien físicamente, con aserciones que lo garanticen,
-
bien virtualmente, guardando solo la mitad de los pares y con aserciones que eviten la existencia de pares simétricos y una vista definida sobre la tabla. Esta vista debe reconstruir la extensión entera a partir de la mitad que tenemos almacenada.
3.4.3.Tipos de relaciones binarias de composición
3.4.4.Tipos de relaciones n-arias
3.5.Tipos de entidades asociativas
3.6.Generalizaciones
3.7.Restricciones
-
Restricciones admitidas en la creación de tablas: PRIMARY KEY, FOREIGN KEY, UNIQUE, NOT NULL, CHECK. Son mecanismos automáticos y de baja complejidad que resultan fáciles de definir y de mantener.
-
Aserciones. El estándar SQL incorpora este mecanismo de definición de restricciones basado en condiciones que se especifican usando una construcción que puede involucrar instrucciones SELECT. Por este motivo, son muy potentes y permiten expresar condiciones que no pueden incluir las restricciones del subapartado anterior, las cuales sólo pueden acceder a información de una tupla de una relación. Se trata de un mecanismo con las características positivas de los anteriores (son automáticas, de baja complejidad, fáciles de definir y de mantener) pero que desgraciadamente ningún SGBD implementa hoy día.
-
Procedimientos almacenados. Son procedimientos que pueden contener sentencias SQL (consulta, actualización y definición) combinadas con estructuras de control clásicas de programación (iteraciones, alternativas, etc.). Se pueden definir unos procedimientos de acceso a las tablas que efectuarán los controles necesarios para asegurar el mantenimiento de restricciones.
-
Disparadores (3) . Son similares a procedimientos almacenados que se asocian a operaciones sobre tablas y que se ejecutan de manera automática a partir de determinadas acciones sobre los datos (inserción, modificación o eliminación de datos). Se trata de un mecanismo automático, pero requiere un esfuerzo considerable definirlos y mantenerlos. Podemos, pues, diseñar disparadores que se ejecuten cuando se realicen actualizaciones en los datos de tablas en las cuales haya que comprobar que no se violan las restricciones.
-
Precondiciones. Se puede considerar la posibilidad de delegar el control de algunas restricciones a las aplicaciones y liberar la base de datos, la cual actuará bajo el supuesto de que las operaciones que se le piden satisfacen las condiciones de corrección necesarias.
-
Control externo. Incluso se puede llevar la idea anterior más allá y confiar en que determinadas restricciones se controlen de manera externa a la aplicación, habitualmente por parte de algún mecanismo o proceso automático que valida los datos.
3.7.1.Multiplicidades
-
Si es *, no hay que añadir nada más.
-
Si es 0..1, tenemos que declarar que fk es UNIQUE, asegurando así que no puede haber más de un elemento de B asociado con el mismo elemento de A.
-
Si es 1, tenemos que asegurar que toda tupla de A es referenciada por una tupla de B. Podemos expresar de varias maneras que toda fila de A es referenciada por una fila de B. Por ejemplo, como una aserción o una clave foránea de A hacia B. Esta clave foránea sería el atributo pk de A que haría referencia a fk de B, que habremos definido como UNIQUE. Además, será necesario controlar que si la tupla b de B hace referencia a la tupla a de A, la tupla a hace referencia a la tupla b. Esta comprobación se podría hacer, por ejemplo, empleando un disparador.
-
Si es 1..*, tenemos que asegurar mediante una aserción que toda fila de A es referenciada por una o más filas de B.
-
si ambos máximos son iguales a 1, tendremos dos claves alternativas.
-
si un máximo es igual a 1 pero el otro es mayor que 1, habrá una sola clave formada por una sola columna.
-
si ambos máximos son mayores que 1, habrá una clave formada por las dos columnas.
3.7.2.Generalizaciones
3.7.3.Abrazos mortales
3.8.Reconsideraciones
4.Normalización
4.1.Anomalías
4.2.Conceptos previos
-
Dados dos conjuntos O e I, el producto cartesiano O × I es el conjunto de todos los pares ordenados (o, i) tales que o ∈ O e i ∈ I. Lo podemos representar gráficamente como se ve en la figura 33. El conjunto O recibe el nombre de conjunto origen y el conjunto I se denomina conjunto imagen.
-
Un subconjunto cualquiera del producto cartesiano es una correspondencia. La figura 34 muestra una correspondencia entre los mismos conjuntos del ejemplo anterior.
-
Algunas correspondencias son, además, funciones: aquellas en las que cada elemento del conjunto origen está relacionado con un elemento (y solo uno) del conjunto imagen. La figura 35 es un ejemplo de función entre los conjuntos O e I de las figuras anteriores.
-
Decimos que una función es inyectiva cuando cada elemento del conjunto imagen está relacionado, como mucho, con un elemento del conjunto origen. En la figura 36, podemos ver un ejemplo de función inyectiva.
-
{work} → {composer, yearComp, bCentury, digitDegree}. Esta dependencia corresponde a la clave primaria.
-
{composer} → {bCentury, digitDegree}. Sabemos que el compositor determina el siglo en que nació y también el grado de digitalización conseguido en sus obras. Podemos comprobar que la extensión utilizada de ejemplo es correcta respecto a esta dependencia: Mahler, el compositor que se repite, aparece dos veces con los mismos valores para los atributos bCentury y digitDegree.
4.3.Teoría de la normalización
-
la primera (1FN) se define en términos de la atomicidad de los atributos,
-
las tres siguientes (2FN, 3FN y BCNF), en términos de dependencias funcionales,
-
la penúltima (4FN) se basa en dependencias multivaluadas, y
-
la última, (5FN), en la dependencia de proyección-combinación.
4.3.1.Primera forma normal
4.3.2.Segunda forma normal
4.3.3.Tercera forma normal
4.3.4.Forma normal de Boyce-Codd
-
{workCode} → {workName}
-
{workName} → {workCode}
-
{workCode, record} → {durWorkRecord}
-
{workName, record} → {durWorkRecord}
4.3.5.Reglas de Armstrong
-
{work} → {composer, yearComp}, podemos afirmarlo por el conocimiento que tenemos del dominio sobre el que hacemos el diseño.
-
Asimismo, como conocedores del dominio, sabemos que {composer} → {bCentury, digitDegree}.
-
Y ahora podemos razonar que si work determina composer, work también determina los atributos determinados por composer, y deducimos que work determina todos los demás atributos.
-
Reflexividad: X → X
-
Aumentatividad: si X → Y, entonces X ∪ Z → Y
-
Distributividad: si X → Y ∪ Z, entonces X → Y y X → Z
-
Aditividad: si X → Y y X → Z, entonces X → Y ∪ Z
-
Transitividad: si X → Y y Y → Z, entonces X → Z
-
Seudotransitividad: si X → Y y Y ∪ Z → W, entonces X ∪ Z → W
-
Confirmar o descartar una dependencia que sospechamos que se verifica.
-
Encontrar todas las claves candidatas de las relaciones. Si queremos normalizar hasta FNBC, esta información es imprescindible.
-
Confirmar o descartar que dos esquemas lógicos son equivalentes. A partir de las dependencias conocidas de D1 y D2, se puede decir que D1 y D2 son equivalentes si se verifica que .
4.3.6.Algoritmo de análisis
4.3.7.Algoritmo de síntesis
-
{codigoObra} → {nombreObra}, {nombreObra} → {codigoObra}
-
{codigoObra, nombreObra} → {compositor, sigloNac}
-
{compositor} → {sigloNac}
-
{codigoObra, grab} → {duracionObraGrab}
4.3.8.Cuarta forma normal
4.3.9.Quinta forma normal
4.4.Práctica de la normalización
Resumen
Glosario
- abrazo mortal de carga f
- Imposibilidad de insertar tuplas en ninguna tabla de un conjunto de tablas porque las claves foráneas que contienen forman un ciclo.
- abrazo mortal de definición f
- Imposibilidad de definir un conjunto de tablas porque las claves foráneas que contienen forman un ciclo.
- anomalía de actualización f
- Necesidad de actualizar muchas tuplas para reflejar un cambio elemental.
- clausura transitiva de un conjunto de dependencias f
- Conjunto de todas las dependencias que se pueden deducir aplicando de manera reiterada las reglas de Armstrong a partir del conjunto inicial.
- dependencia funcional f
- En una relación, decimos que un conjunto de atributos Y depende de un conjunto de atributos X (X → Y) si siempre que dos tuplas tienen los mismos valores en los atributos de X, también tienen los mismos valores en los atributos de Y.
- dependencia funcional completa f
- X → Y es completa si no existe ningún X' subconjunto propio de X tal que X' → Y.
- dependencia multivaluada independiente f
- Decimos que hay una dependencia multivaluada independiente de Y respecto a X, que denotamos por X →→ Y, si se verifica que para todo par de tuplas de la relación que tienen el mismo valor en X y diferente en Y, hay dos tuplas como estas que intercambian los valores de R – X – Y.
- dependencia proyección-combinación f
- Decimos que una relación con tres atributos presenta una dependencia de proyección-combinación si para cualquier extensión correcta de la relación se verifica que, como resultado de descomponerla en otras tres relaciones de dos atributos (haciendo las correspondientes proyecciones) y combinar estas tres relaciones a continuación, obtenemos nuevamente la relación original.
- desnormalización f
- Proceso consistente en deshacer la normalización agrupando datos lógicamente independientes o añadiendo redundancia a la base de datos, con el objetivo de hacer más eficientes las consultas.
- determinante m
- Conjunto de atributos X de una dependencia funcional X → Y.
- diseño lógico m
- Proceso de transformación de un esquema conceptual en un esquema lógico de base de datos.
- forma normal f
- Decimos que una relación está en una determinada forma normal si satisface las condiciones fijadas por aquella forma normal. Las formas normales son inclusivas: la condición de una forma normal de nivel superior implica la condición de cada uno de los niveles inferiores y, por lo tanto, si una relación está en una forma normal también está en todas las formas normales de nivel inferior.
- normalización f
- Proceso por el cual, a partir de un conjunto de relaciones, se obtiene un conjunto de relaciones equivalente que satisface la condición de la forma normal deseada.
- trampa de diseño m
- Patrón del esquema conceptual que puede inducir a cometer errores en la interpretación del mundo real.
- recubrimiento mínimo m
- Conjunto más simple de otro conjunto a partir del cual se pueden deducir las dependencias del conjunto original.
- reglas de Armstrong f pl
- Conjunto de reglas de deducción que permiten demostrar si una dependencia es consecuencia de otras.
- restricción f
- Condición que limita las extensiones válidas de una relación.