• No se han encontrado resultados

4 - Modelo Relacional de BD

N/A
N/A
Protected

Academic year: 2020

Share "4 - Modelo Relacional de BD"

Copied!
23
0
0

Texto completo

(1)

MODELO RELACIONAL DE LAS BASES DE DATOS

1.1 ESTRUCTURA DE LAS BASES DE DATOS RELACIONALES

Una base de datos relacional consiste en una colección de tablas a cada una de las cuales se asigna un nombre único, una fila de una tabla representa una relación entre un conjunto de valores, puesto que una tabla es una colección de dichas relaciones hay una estrecha correspondencia entre el concepto de tablas y el concepto matemático de la relación del cual toma su nombre el modelo de datos relacional.

ESTRUCTURAS BASICAS

En general una tabla (también llamada relación) contendrá únicamente un subconjunto del conjunto de todas las filas posibles. Por lo tanto la tabla o relación es un subconjunto de D1xD2xD3x…xDn-1xDn. Debido a que cada atributo contiene un conjunto de valores permitidos llamado dominio de ese atributo (D1,D2,D3…).

Puesto que las tablas son esencialmente relaciones, usaremos los términos matemáticos relación y tupla en lugar de los términos de tabla y fila.

Debido a que una relación es un conjunto de tuplas usaremos la notación matemática t  r para indicar que la tupla t está o pertenece a la relación r.

Donde:

t= tupla

= pertenece a

r= relación

Entonces tenemos que para todas las relaciones R, los dominios de todos los atributos de r, deberán ser atómicos.

Un dominio es atómico si los elementos del dominio se consideran unidades indivisibles.

(2)

ESQUEMA DE LA BASE DE DATOS

Al hablar de una base de datos se debe diferenciar entre el esquema de la base de datos o el diseño lógico de la base de datos, y una instancia de la base de datos, que son los datos en la base de datos en un instante de tiempo dado.

El concepto de esquema de una relación, corresponde a la noción de definición de tipo en los lenguajes de programación. Una variable de un tipo dado tiene un valor determinado en un instante de tiempo dado.

Así una variable en los lenguajes de programación corresponde al concepto de una instancia de una relación. Es conveniente dar un nombre al esquema de una relación así como damos nombres a las definiciones de tipo en los lenguajes de programación.

Usaremos nombres en minúsculas para relaciones y nombres empezando con una letra mayúscula para los esquemas de relaciones.

Ejemplo:

Esquema_deposito=(nombre_sucursal, número_cuenta, nombre_cliente, saldo)

El hecho de que depósito es una relación sobre el esquema depósito se indica de la siguiente manera:

depósito (esquema_depósito)

Cuando queramos definir nuestros dominios usaremos la notación siguiente:

Esquema_depósito = (nombre_sucursal: cadena, número_Cuenta: entero, nombre_cliente: cadena, saldo: entero)

CLAVES

Las claves de una tabla o relación pueden ser superclave, clave candidata y clave primaria las cuales pueden formarse por atributos simples o por un conjunto de atributos, llamados atributos compuestos.

Ejemplo:

Esquema _ sucursal = (nombre_sucursal, activo, ciudad_sucursal)

Para el esquema sucursal ({nombre sucursal} y {nombre_sucursal, ciudad _ sucursal} son súper claves.

(3)

{nombre_sucursal} Es en sí, una súper clave y además es una llave candidata.

Este atributo {ciudad_sucursal} no es una súper clave por sí solo debido a que dos sucursales pueden estar en una misma ciudad teniendo nombres diferentes.

LENGUAJES DE CONSULTA

Un lenguaje de consulta, es un lenguaje en el que un usuario solicita información de la base de datos, estos lenguajes son normalmente de más alto nivel que los lenguajes estándar de programación.

Los lenguajes de consulta se pueden clasificar en:

1. Lenguaje procedimental: En este, el usuario da instrucciones al sistema para que realice una secuencia de operaciones en la base de datos para calcular el resultado deseado.

2. Lenguaje no precedimental: En este el usuario describe la información deseada sin dar un procedimiento específico para obtener esa información.

La mayor parte de los sistemas comerciales de bases de datos relacionales ofrecen un lenguaje de consulta que incluya elementos de los dos enfoques procedimental y no procedimental.

El álgebra relacional es procedimental, mientras que el cálculo relacional de tuplas y el cálculo relacional de dominios son no procedimentales.

Enunciados Relacionales.

Los enunciados relacionales, son predicados que especifican una operación precisa sobre una o dos relaciones para obtener consultas definidas por condiciones planteadas por los usuarios de las bases de datos.

(4)

Operadores Relacionales.

Los operadores relacionales son símbolos que se usan para comparar dos valores. Si el resultado de la comparación es correcto la expresión considerada es verdadera, en caso contrario es falsa. Los principales operadores de comparación utilizados en el álgebra relacional son:

Mayor que >

Menor que <

Igual =

Diferente 

Mayor o igual 

Menor o igual 

Y (Lógico) 

O (Lógico) V

1.2. ÁLGEBRA RELACIONAL

El Álgebra Relacional es un lenguaje que se compone de un conjunto de operaciones fundamentales ( también llamadas operadores ), que toman una o dos relaciones para obtener una tabla que representa una consulta generada por un proceso ( mediante operadores, enunciados o predicados y comandos ).

OPERADORES RELACIÓNALES BÁSICOS.

Las principales operaciones básicas del Álgebra Relacional también conocidas como operaciones fundamentales son:

1. Seleccionar.

2. Proyectar.

3. Renombrar.

Estas operaciones son unitarias porque se aplican sobre una sola tabla.

4. Producto cartesiano.

5. Unión

6. Diferencia de conjuntos

(5)

Otras operaciones del álgebra relacional que son consideradas como no fundamentales (debido a que el uso de estas puede sustituirse utilizando una combinación de las operaciones fundamentales antes mencionadas) son:

7. Intersección de Conjuntos.

8. Producto Natural.

9. División.

10. Asignación.

EJEMPLO DE ACCESO A BASES DE DATOS RELACIÓNALES.

Los ejemplos del acceso a las Bases de Datos relacionales, se tomaran del siguiente Diagrama E-R correspondiente a una Empresa Bancaria para utilizar los operadores fundamentales y no fundamentales que se mencionaron en el punto anterior y se explican a detalle a continuación.

Ejemplo: El siguiente diagrama E-R, representa una Empresa Bancaria el cual contiene dos conjuntos de entidades llamadas Cliente y Sucursal y las claves primarias para estos son Nombre_cliente y Nombre_sucursal, respectivamente. Además se tienen dos relaciones llamadas Depósito y Préstamo.

CLIENTE

Depósito

Calle

Nombre_cliente Activo Nombre_sucursal

Ciudad_cliente

Numero_prestamo Cantidad Numero_cuenta Saldo

Ciudad_sucursal

Préstamo

(6)

Relación CLIENTE

Nombre_cliente Calle Ciudad_cliente

Johnson Main Harrison Smith North Rye Hayes Main Harrison Curry North Rye Lindsay Park Pittsfield Turner Putnam Stamford Williams Nassau Princeton Adams Spring Pittsfield Johnson Alma Palo Alto Glenn Sand Hill Woodside Brooks Senator Brooklyn

Relación Depósito

Nombre_sucursal Numero_cuenta Nombre_cliente Saldo

Downtown 101 Johnson 500

Mianus 215 Smith 700

Perryridge 102 Hayes 400

Round Hill 305 Turner 350

Perryridge 201 Williams 900

Redwood 222 Lindsay 700

Brigthon 217 Green 750

Downtown 105 Green 850

El atributo Nombre_cliente representa el mismo conjunto de entidades en las 2 relaciones. En caso de querer utilizar una sola tabla con el siguiente esquema:

Esquema_info(nombre_sucursal,numero_cuenta, nombre_cliente,saldo, calle, ciudad_cliente)

Primero, habría repetición de información, ya que si un cliente tiene varias cuentas, se debe listar su dirección una vez para cada cuenta.

Segundo, si un cliente tiene una o más cuentas, pero no ha dado su dirección, no se puede construir una tupla en Esquema_info, ya que no se conocen los valores de Calle y Ciudad_cliente. Es decir, se crearian valores nulos, lo cual no es conveniente.

Debido a estos inconvenientes se realizaron las dos relaciones anteriores (tablas), que se muestran en el esquema E-R.

Las Tablas faltantes son las relaciones Sucursal y Préstamo, que a continuación se presentan:

Relación SUCURSAL

Nombre_sucursal Activo Ciudad_sucursal

(7)

Relación Prestamo

Nombre_sucursal Numero_prestamo Nombre_cliente Cantidad

Downtown 17 Jones 1000

Redwood 23 Smith 2000

Perryridge 15 Hayes 1500

Downtown 14 Jackson 1500

Mianus 93 Curry 500

Round Hill 11 Turner 900

Pownal 29 Williams 1200

North Town 16 Adams 1300

Downtown 18 Johnson 2000

Perryridge 25 Glen 2500

Brigthon 10 Brooks 2200

Tomaremos una tabla más denominada relación Servicio la cual se obtiene de la relación entre los conjuntos de entidades Banquero y Cliente (que no se muestra en el diagrama E-R anterior.

Relación servicio

Nombre_cliente Nombre_banquero

Turner Jonson Hayes Jones Johnson Jonson

SELECCIONAR

Esta operación permite seleccionar tuplas que satisfacen un predicado dado (condición). Se utiliza el símbolo de la letra griega minúscula Sigma () para inmdicar la selección. El predicado aparece como subíndice de () y entre paréntesis el nombre de la relación de la cual se hace la operación.

Ejemplos:

a) Seleccionar las tuplas de la relación préstamo en las que la sucursal es Perryridge:

Nombre_sucursal=”Perryridge” (Préstamo)

La tabla generada es la siguiente:

Nombre_sucursal Numero_prestamo Nombre_cliente Cantidad

Perryridge 15 Hayes 1500

(8)

b) Encontrar las tuplas en las que la cantidad es mas de 1200 dólares. cantidad>1200 (Préstamo)

Genera la siguiente tabla:

Nombre_sucursal Numero_prestamo Nombre_cliente Cantidad

Redwood 23 Smith 2000

Perryridge 15 Hayes 1500

Downtown 14 Jackson 1500

North Town 16 Adams 1300

Downtown 18 Johnson 2000

Perryridge 25 Glen 2500

Brigthon 10 Brooks 2200

PROYECTAR

La operación proyectar es una operación unitaria que devuelve su relación con ciertas columnas seleccionadas. Puesto que una relación es un conjunto se eliminan todas las filas duplicadas. La proyección se indica con la letra griega Pi (). Se listan los atributos que queremos que aparezcan como subíndice de Pi (), la relación argumento se escribe a continuación entre paréntesis después de Pi ().

Ejemplos:

a) Seleccionar las tuplas de la relación servicio de aquellos clientes cuyo nombre es igual al nombre del banquero, proyectando el nombre del cliente

nombre_cliente(nombre_cliente=nombre_banquero(servicio))

La tabla resultante es:

Nombre_cliente

Johnson

b) Seleccionar las tuplas de la relación préstamo donde cantidad es mayor o igual a 2000, proyectando sucursal y cantidad.

Nombre_sucursal,Cantidad(Cantidad>=2000(Préstamo))

La tabla resultante es:

Nombre_sucursal cantidad

Redwood 2000

Downtown 2000

Perryridge 2500

(9)

c) Proyectar Nombre_sucursal de la relación Sucursal, aquella donde el activo es mayor o igual a 8 000 000.

Nombre_sucursal

Downtown Round Hill

PRODUCTO CARTESIANO

Esta operación se representa por medio de una cruz (X), es una operación binaria y ayuda a combinar información de varias relaciones. Escribimos el producto cartesiano de las relaciones

R1 y R2 como R1XR2. Se listan todos los atributos de las 2 relaciones y se adjunta el nombre de

la relación de la que el atributo procede originalmente; para aquellos atributos que solo aparecen en uno de los dos esquemas, se puede omitir el prefijo del nombre de la relación.

El número de tuplas que existen en el producto cartesiano se define por n1n2, siendo n1 el

número de tuplas que tiene R1, y n2 el número de tuplas que tiene R2.

Ejemplo: Encontrar todos los clientes del banquero Jonson, así como las ciudades en que viven estos clientes.

Solución:

Se utilizarán las relaciones Servicio y Cliente.

r = servicio X cliente

Esquema_r=(servicio.nombre_cliente, servicio.nombre_banquero, cliente.nombre_cliente, cliente.calle, cliente.ciudad_cliente)

Nota: se puede cambiar cliente.calle, cliente.ciudad_cliente por calle,ciudad_cliente, puesto que solo son atributos de cliente.

La tabla resultante es la siguiente:

Servicio.

Nombre_cliente Nombre_banquero

Cliente.

Nombre_cliente Calle Ciudad_cliente

(10)

Turner Johnson Brooks Senator Brooklyn Turner Johnson Green Walnut Stamford Hayes Jones Johnson Main Harrison Hayes Jones Smith North Rye Hayes Jones Hayes Main Harrison Hayes Jones Curry North Rye Hayes Jones Lindsay Park Pittsfield Hayes Jones Turner Putnam Stamford Hayes Jones Williams Nassau Princeton Hayes Jones Adams Spring Pittsfield Hayes Jones Johnson Alma Palo Alto Hayes Jones Glenn Sand Hill Woodside Hayes Jones Brooks Senator Brooklyn Hayes Jones Green Walnut Stamford Johnson Johnson Johnson Main Harrison Johnson Johnson Smith North Rye Johnson Johnson Hayes Main Harrison Johnson Johnson Curry North Rye Johnson Johnson Lindsay Park Pittsfield Johnson Johnson Turner Putnam Stamford Johnson Johnson Williams Nassau Princeton Johnson Johnson Adams Spring Pittsfield Johnson Johnson Johnson Alma Palo Alto Johnson Johnson Glenn Sand Hill Woodside Johnson Johnson Brooks Senator Brooklyn Johnson Johnson Green Walnut Stamford

Como solo se quieren los clientes de Johnson, entonces, el predicado es: nombre_banquero=”Johnson”(servicioXcliente)

La tabla resultante quedaría de la siguiente manera:

Servicio.

Nombre_cliente Nombre_banquero

Cliente.

Nombre_cliente Calle Ciudad_cliente

(11)

Johnson Johnson Williams Nassau Princeton Johnson Johnson Adams Spring Pittsfield Johnson Johnson Johnson Alma Palo Alto Johnson Johnson Glenn Sand Hill Woodside Johnson Johnson Brooks Senator Brooklyn Johnson Johnson Green Walnut Stamford

La columna cliente.nombre_cliente puede contener clientes de banqueros que no sean Johnson. La operación producto cartesiano (X) asocia todas las tuplas de cliente con todas las tuplas de servicio, alguna tupla en servicioXcliente tiene la dirección del cliente del banquero. Esto ocurre solo cuando servicio.nombre_cliente=cliente.nombre_cliente. Entonces:

servicio.nombre_cliente=cliente.nombre_cliente(nombre_banquero=”Jonson”(servicioXcliente))

Como solo queremos el nombre del cliente y la ciudad, hacemos una proyección:

servicio.nombre_cliente,ciudad_cliente(servicio.nombre_cliente=cliente.nombre_cliente

(nombre_banquero=”Jonson”(servicioXcliente)))

Quedando la tabla de la siguiente manera:

Servicio.

Nombre_cliente Ciudad_cliente

Johnson Harrison

Turner Stamford

Johnson Palo Alto

RENOMBRAR

Esta operación se utiliza para renombrar una referencia a una relación y así hacer la referencia a la relación 2 veces sin ambigüedad. Se denota por la letra griega ; su sintaxis es la siguiente:

x(r)

Donde x es el nombre de la nueva relación (copia) y r es el nombre de la relación original.

Ejemplo: Encontrar los nombres de todos los clientes que viven en la misma calle y misma ciudad que Smith.

Se encuentra la calle y ciudad de Smith:

calle,ciudad_cliente(nombre_cliente=”Smith”(cliente))

Para encontrar otros clientes con esa calle y ciudad, se tiene que referenciar una segunda vez: cliente.nombre_cliente(cliente2.calle=cliente.calle^cliente2.cliente_ciudad=cliente.cliente_ciudad(clienteX(calle,ciudad_cliente

(12)

La tabla resultante es:

Nombre_cliente

Smith Curry

UNION

Esta operación selecciona las tuplas que cumplen con ciertas condiciones en las relaciones que la conforman. Se representa por  .

Sirve para encontrar cierta información en las relaciones y finalmente une el resultado de cada una, obteniendo un conjunto de tuplas eliminando los valores duplicados.

En general debemos asegurarnos de que las uniones se toman entre relaciones compatibles. Por lo tanto para que una operación de unión R  S sea valida exigimos se cumplan dos condiciones:

1. Las relaciones R y S deben tener el mismo número de atributos.

2. Los dominios del atributo iésimo de S y del atributo iésimo de R deben ser los mismos.

Ejemplo:

a) Encontrar todos los clientes de la sucursal Perryridge, que tengan un préstamo, una cuenta o ambas.

nombre_cliente(nombre_sucurscal=”Perryridge”(prestamo)) nombre_cliente(nombre_sucurscal=”Perryridge”(deposito))

Puesto que las relaciones son conjuntos, se eliminan los valores duplicados. La tabla resultante es:

Nombre_cliente Nota: Para que una operación rs

Hayes sea válida, se tiene que tomar de

Glenn relaciones compatibles y tener al

Williams menos un atributo igual.

DIFERENCIA DE CONJUNTO

(13)

* Encontrar todos los clientes de la sucursal Perryridge que tienen una cuenta ahí, pero no tienen un préstamo.

nombre_cliente(nombre_sucurscal=”Perryridge”(deposito)) - nombre_cliente(nombre_sucurscal=”Perryridge”(prestamo))

La tabla quedaría de la siguiente manera:

Nombre_cliente

Williams

INTERSECCIÓN DE CONJUNTOS.

Permite seleccionar las tuplas que se encuentran en las dos relaciones. Su símbolo es .

* Encontrar todos los clientes que tienen una cuenta y un préstamo en la sucursal Perryridge.

nombre_cliente(nombre_sucurscal=”Perryridge”(préstamo))nombre_cliente(nombre_sucurscal=”Perryridge”(déposito))

Nombre_cliente

Williams

Se puede representar esta operación como:

rs = r - (r - s)

PRODUCTO NATURAL.

Permite combinar ciertas selecciones y un producto cartesiano en una misma operación. El

símbolo utilizado es . Forma un producto cartesiano de sus dos argumentos, realiza una

selección forzando la igualdad en aquellos atributos que aparezcan en ambas planificaciones

de relaciones y, finalmente, quita las columnas duplicadas.

* Encontrar todos los clientes que tienen un préstamo y las ciudades donde viven.

El predicado con operaciones fundamentales sería:

(14)

Utilizando el Producto Natural quedaría de la siguiente manera: nombre_cliente,ciudad_cliente (prestamocliente)

El resultado es:

Nombre_cliente Ciudad_cliente

Jones Harrison Smith Rye Hayes Harrison Curry Rye Turner Stamford Williams Princeton Adams Pittsfield Johnson Palo Alto Glenn Woodside Brooks Brooklyn

DIVISIÓN.

Esta operación se establece para aquellas consultas que incluyen la frase <<para todos>>. El símbolo utilizado es .

* Encontrar todos los clientes que tienen una cuenta en todas las sucursales que están en Brooklyn.

Se encuentran todas las sucursales que están en Brooklyn: R1 = nombre_sucursal (ciudad_sucursal=”Brooklyn”(sucursal))

La relación resultante es

Nombre_sucursal

Brighton Downtown

Ahora, se encuentran todos los pares nombre_cliente, nombre_sucursal para los cuales el cliente tiene una cuenta en una sucursal:

R2 = nombre_cliente,nombre_sucursal (déposito)

Quedando de la siguiente forma:

Nombre_cliente Nombre_sucursal

(15)

Se necesita encontrar los clients que aparecen en R2 con cada nombre de sucursal en R1. La división hace exactamente esto. El predicado resultante sería:

= nombre_sucursal (ciudad_sucursal=”Brooklyn”(sucursal))nombre_cliente,nombre_sucursal (déposito)

La tabla resultante sería:

Nombre_cliente

Green

ASIGNACIÓN.

A veces es conveniente escribir una expresión del álgebra relacional por partes usando la asignación a una variable de relación temporal. La operación asignación, representada por , funciona de forma parecida a la asignación en un lenguaje de programación. Para ilustrar esta operación, considérese la definición de división anterior. Podemos definir rs como:

tempR-S(r)

temp - R-S((temp  s) – r)

La evaluación de una asignación no da como resultado una relación que se presenta al usuario. Más bien, el resultado de la expresión a la derecha de  es asignado a la variable de la relación a la izquierda de . Esta variable de relación puede usarse en subsiguientes expresiones. Con la operación asignación una consulta puede escribirse como un programa secuencial que consta de una serie de asignaciones seguidas de una expresión cuyo valor se presenta como el resultado de la consulta. Las asignaciones deben hacerse siempre a una variable de relación temporal y es una forma conveniente de expresar consultas complejas.

1.3. NORMALIZACIÓN

Uno de los conceptos fundamentales en la normalización es el de dependencia funcional y uno

de los retos en el diseño de la base de datos es el de obtener una estructura estable y lógica tal

que:

 El sistema de base de datos no sufra de anomalías de almacenamiento.

 El modelo lógico pueda modificarse fácilmente para admitir nuevos requerimientos.

Una base de datos implantada sobre un modelo bien diseñado tiene mayor esperanza de vida

aun en un ambiente dinámico, que una base de datos con un diseño pobre. En promedio, una

base de datos experimenta una reorganización general cada seis años, dependiendo de lo

(16)

buen desempeño aunque aumente su tamaño, y será lo suficientemente flexible para incorporar

nuevos requerimientos o características adicionales.

Existen diversos riesgos en el diseño de las bases de datos relacionales que afecten la

funcionalidad de la misma, los riesgos generalmente son la redundancia de información y la

inconsistencia de datos.

La normalización es el proceso de simplificar la relación entre los campos de un registro. Por

medio de la normalización un conjunto de datos en un registro se reemplaza por varios registros

que son más simples y predecibles y, por lo tanto, más manejables. La normalización se lleva a

cabo por cuatro razones:

 Estructurar los datos de forma que se puedan representar las relaciones pertinentes

entre los datos.

 Permitir la recuperación sencilla de los datos en respuesta a las solicitudes de consultas

y reportes.

 Simplificar el mantenimiento de los datos actualizándolos, insertándolos y borrándolos.  Reducir la necesidad de reestructurar o reorganizar los datos cuando surjan nuevas

aplicaciones.

En términos más sencillos la normalización trata de simplificar el diseño de una base de

datos, esto a través de la búsqueda de la mejor estructuración que pueda utilizarse con

las entidades involucradas en ella.

La teoría de normalización tiene como fundamento el concepto de formas normales; se dice que

una relación está en una determinada forma normal si satisface un conjunto de restricciones.

Formas normales: Son las técnicas para prevenir las anomalías en las tablas. Dependiendo de

su estructura, una tabla puede estar en primera forma normal, segunda forma normal o en

(17)

PRIMERA FORMA NORMAL

Una relación R se encuentra en 1FN si y solo sí por cada renglón columna contiene valores

atómicos.

Abreviada como 1FN, se considera que una relación se encuentra en la primera forma normal

cuando cumple lo siguiente:

1. Las celdas de las tablas poseen valores simples y no se permiten grupos ni arreglos

repetidos como valores, es decir, contienen un solo valor por cada celda.

2. Todos los ingresos en cualquier columna (atributo) deben ser del mismo tipo.

3. Cada columna debe tener un nombre único, el orden de las columnas en la tabla no es

importante.

4. Dos filas o renglones de una misma tabla no deben ser idénticas, aunque el orden de las

filas no es importante.

Por lo general la mayoría de las relaciones cumplen con estas características, así que podemos

decir que la mayoría de las relaciones se encuentran en la primera forma normal.

Para ejemplificar como se representan gráficamente las relaciones en primera forma normal

consideremos la relación alumno cursa materia cuyo diagrama E-R es el siguiente:

ALUMNO CURSA MATERIA

Control Nombre clave NomM

(18)

Como esta relación maneja valores atómicos, es decir un solo valor por cada uno de los

campos que conforman a los atributos de las entidades, ya se encuentra en primera forma

normal, gráficamente así representamos a las relaciones en 1FN.

SEGUNDA FORMA NORMAL.

Para definir formalmente la segunda forma normal requerimos saber que es una dependencia

funcional: Consiste en edificar que atributos dependen de otro(s) atributo(s).

Definición formal: Una relación R está en 2FN si y solo si está en 1FN y los atributos no

primos dependen funcionalmente de la llave primaria.

Una relación se encuentra en segunda forma normal, cuando cumple con las reglas de la

primera forma normal y todos sus atributos que no son claves (llaves) dependen por completo

de la clave . De acuerdo con está definición, cada tabla que tiene un atributo único como clave,

esta en segunda forma normal.

La segunda forma normal se representa por dependencias funcionales como:

Nótese que las llaves primarias están representadas con doble cuadro, las flechas nos indican

que de estos atributos se puede referenciar a los otros atributos que dependen funcionalmente

de la llave primaria.

TERCERA FORMA NORMAL.

Para definir formalmente la 3FN necesitamos definir dependencia transitiva: En una afinidad

(tabla bidimensional) que tiene por lo menos 3 atributos (A,B,C) en donde A determina a B, B

determina a C pero no determina a A.

control

Nombre

Esp

Clave

NomM

(19)

Definición formal: Una relación R está en 3FN si y solo si esta en 2FN y todos sus atributos no

primos dependen no transitivamente de la llave primaria.

Consiste en eliminar la dependencia transitiva que queda en una segunda forma normal, en

pocas palabras una relación esta en tercera forma normal si está en segunda forma normal y no

existen dependencias transitivas entre los atributos, nos referimos a dependencias transitivas

cuando existe más de una forma de llegar a referencias a un atributo de una relación.

Existen seis niveles más de normalización, los cuales se mencionan a continuación:

1. Forma Normal Boyce-Codd

2. Cuarta Forma Normal (4NF)

3. Quinta Forma Normal (5FN) o Forma Normal de Proyección-Unión

4. Forma Normal de Proyección-Unión Fuerte

5. Forma Normal de Proyección-Unión Extra Fuerte

6. Forma Normal de Clave de Dominio

Estas formas de normalización pueden llevar las cosas más allá de lo que necesita. Éstas

existen para hacer una base de datos realmente relacional. Tienen que ver principalmente con

dependencias múltiples y claves relacionales.

¿Porque APLICAR la NORMALIZACION?

Debido a que la normalización es un conjunto de reglas que sirven para ayudar a los

diseñadores a desarrollar un esquema que minimice los problemas de lógica, cada regla está

basada en la que le antecede.

La normalización se adoptó porque el viejo estilo de poner todos los datos en un solo lugar,

como un archivo o una tabla de la base de datos, era ineficiente y conducía a errores de lógica

(20)

Resumen de Normalización

La normalización es una técnica que se utiliza para crear relaciones lógicas apropiadas entre

tablas de una base de datos.

Ayuda a prevenir errores lógicos en la manipulación de datos. La normalización facilita también

agregar nuevas columnas sin romper el esquema actual ni las relaciones.

Las tres primeras formas normales proveen suficiente nivel de normalización para cumplir con

las necesidades de la mayoría de las bases de datos.

Normalizar demasiado puede conducir a tener una base de datos ineficiente y hacer que el

esquema sea demasiado complejo para trabajar. Un balance apropiado de sentido común y

práctico puede ayudarnos a decidir cuándo normalizar.

1.4. CÁLCULO RELACIONAL

El álgebra relacional dice cómo obtener unos resultados, mientras el cálculo dice qué resultado se desea.

El álgebra es procedimental mientras que el cálculo es no procedimental.

El cálculo relacional es un lenguaje declarativo, es decir no funciona con procedimientos. Es un lenguaje formal, basado en la rama de la lógica matemática llamado cálculo de predicados. El cual tiene dos adaptaciones: cálculo relacional de tuplas y cálculo relacional de dominios.

Cálculo Relacional de Tuplas

Se basa en la especificación de un cierto número de variables tupla.

Su forma general es:

{ t / P ( t )}

(21)

o en forma ampliada:

{t 1 A 1 , t 2 A 2 ,... t n A n / condición(t 1, t 2... t n )}

Lenguajes como Quel (1976) y SQL (1984) se apoyan en este.

Cuantificadores

Se pueden usar los cuantificadores Universal ( ? ) y Existencial ( ? ).

Si una variable tupla esta cuantificada se dice que es una variable restringida o ligada.

Ejemplos.

Obtener los alumnos con promedio superior a 4.0

{t /t ? alumno ? t[promedio] >4.0}

también:

{t /t ? alumno ? t.promedio >4.0}

El caso anterior pero solo obteniendo los codigos y nombres de los estudiantes: {t.codigoal, t.nombreal /t ? alumno ? t.promedio >4.0}

Encontrar el nombre de los profesores que tienen asignadas materias.

{t.nombre /t ? profesor ? ? s ? prof_mat ( t.codigoprof = s.codigoprof )}

Encontrar los nombres de los alumnos que tienen notas en todas las materias.

{t.nombreal /t ? alumno ? ? s ? nota ( t.codigoal = s.codigoal) ? v ? materia (s.codigomat = v.codigomat) }

Cálculo relacional de Dominios

Variables de dominio toman valores en los dominios de los atributos.

Forma General:

(22)

Donde:

<x 1 ,x 2 ... x n >, representa las variables tuplas.

P(x 1 ,x 2 ... x n ), es el predicado o condiciones sobre las variables.

Ejemplos.

Obtener los alumnos con promedio superior a 4.0

{<a,b,c,d> /<a,b,c,d> ? alumno ? d >4.0}

El caso anterior pero solo obteniendo los códigos y nombres de los estudiantes: {<a,b> /<a,b,c,d> ? alumno ? d >4.0}

Ejercicios propuestos.

Conseguir los siguientes resultados tanto con cálculo relacional de tuplas, como de dominios:

• Encontrar los nombres de los monitores y los códigos de las materias que monitorean.

• Encontrar los códigos de los estudiantes que no sean monitores

• Encontrar los alumnos que pertenezcan a ASI o a IE

• Encontrar los nombres de los monitores y sus promedios de carrera para aquellos monitores matriculados en ASI

TRABAJANDO SOBRE LAS RELACIONES CON LOS SIGUIENTES ESQUEMAS

cliente (nclie, nombre, ciudad, dire, telef) proveedor (nprove,nombre,ciudad)

producto (nprod, descr, color, peso, nprove, precio) pedido (nped, nclie, fecha, total)

prodped (nped, nprod, cant, subt)

alumno (codigoal, nombreal,promedio, carrera) monitor (codigoal, codmat)

profesor (codprof, nombre, escalafon,carrera) materia (codmat,nombremat,carrera)

(23)

USANDO ALGEBRA O CALCULO RELACIONAL DE TUPLAS O DOMINIOS, A MENOS QUE SE ESPECIFIQUE UNO EN PARTICULAR:

• Encontrar la carrera que tenga el máximo de los promedios de los estudiantes.

• Mostrar los clientes que hayan comprado todos los productos del proveedor con nombre “soluciones en Sistemas”.

• Borrar de la relación producto los productos que sean de valor inferior a $500.

• Incremente en 20% el precio de todos los productos.

• Encuentre la cantidad de pedidos realizados por cada cliente.

• Conseguir la pareja profesor, monitor para cada materia que tenga monitor.

• Nombre de cliente que sus pedidos sumen más de $150,000. Muestre ese valor total para cada uno.

• Valor total y promedio de los productos pedidos fabricados por proveedor CINDU ANDINA.

• Mostrar los clientes que hayan comprado todos los productos del proveedor con nombre “soluciones en Sistemas”. Hacerlo por Cálculo relacional.

Referencias

Documento similar

DISEÑO DE UNA CAMPAÑA PUBLICITARIA PARA EL PRODUCTO BABY ACEITE CON ALOE Y VITAMINA E DE JOHNSON &amp; JOHNSON PARA.. CAPTAR UN TARGET SECUNDARIO EN LAS PARROQUIAS COQUIVACOA Y

Para el desarrollo de estos sistemas en entornos virtuales se enfrentan problemáticas tales como, la detección de colisiones entre cuerpos rígidos y/o deformables, el alejamiento

de 0,000, Rho de Spearman con 0,766 lo cual nos dice que tiene un nivel de correlación positiva muy fuerte entre las variables; esto se compara con (Jones,

El reconocimiento de esto se encuentra ya en el pensamiento de líderes de los negocios más evolucionados (Google, IBM, Intel, Johnson &amp; Johnson, Nestlé) dando un

While struvite stones were observed frequently in mice infected with the wt strain, but were never found in those infected with an urease mutant (Johnson et al., 1993; Jones et

AUTHORS Marcos-Carcavilla,A., Calvo,J.H., Gonzalez,C., Moazami-Goudarzi,K., Laurent,P., Bertaud,M., Hayes,H., Beattie,A.E., Serrano,C., Lyahyai,J., Martin-Burriel,I.,

NOVES DADES SOBRE LA DERTOSA ROMANA: UN FRAGMENT DE SIGIL·LATA AFRICANA C DECORADA AMB MOTLLE.. ponents probablement a la forma Hayes 52 B) un amb la representació d’un peix i

El síndrome de Steven-Johnson atípico (SSJA) se ha descrito como un enantema con compromiso de al menos dos áreas (mucosa oral, conjuntival, ge- nital o gastrointestinal),