You are on page 1of 57

Estructura de BD relacionales

Una base de datos relacional es una base de datos que cumple con el modelo relacional, el cual es el modelo ms utilizado en la actualidad para implementar bases de datos ya planificadas. Permiten establecer interconexiones (relaciones) entre los datos (que estn guardados en tablas), y a travs de dichas conexiones relacionar los datos de ambas tablas, de ah proviene su nombre: "Modelo Relacional".

Estructura de BD relacionales
Tras ser postuladas sus bases en 1970 por Edgar Frank Codd, de los laboratorios IBM en San Jos (California), no tard en consolidarse como un nuevo paradigma en los modelos de base de datos.

En las bases de Codd se definan los objetivos de este modelo: Independencia fsica. La forma de almacenar los datos, no debe influir en su manipulacin lgica Independencia lgica. Las aplicaciones que utilizan la base de datos no deben ser modificadas por que se modifiquen elementos de la base de datos.

Flexibilidad. La base de datos ofrece fcilmente distintas vistas en funcin de los usuarios y aplicaciones. Uniformidad. Las estructuras lgicas siempre tienen una nica forma conceptual (las tablas) Sencillez.

Las bases de datos relacionales se basan en el uso de tablas (tambin se las llama relaciones). Las tablas se representan grficamente como una estructura rectangular formada por filas y columnas. Cada columna almacena informacin sobre una propiedad determinada de la tabla (se le llama tambin atributo), nombre, dni, apellidos, edad,.... Cada fila posee una ocurrencia o ejemplar de la instancia o relacin representada por la tabla (a las filas se las llama tambin tuplas).

Caractersticas
Una base de datos relacional se compone de varias tablas o relaciones. No pueden existir dos tablas con el mismo nombre ni registro. Cada tabla es a su vez un conjunto de registros (filas y columnas). La relacin entre una tabla padre y un hijo se lleva a cabo por medio de las claves primarias y ajenas (o forneas).

Caractersticas
Las claves primarias son la clave principal de un registro dentro de una tabla y stas deben cumplir con la integridad de datos. Las claves ajenas se colocan en la tabla hija, contienen el mismo valor que la clave primaria del registro padre; por medio de stas se hacen las relaciones.

Relaciones base y derivadas


En una base de datos relacional, todos los datos se almacenan y se accede a ellos por medio de relaciones. Las relaciones que almacenan datos son llamadas "relaciones base" y su implementacin es llamada "tabla". Otras relaciones no almacenan datos, pero son calculadas al aplicar operaciones relacionales. Estas relaciones son llamadas "relaciones derivadas" y su implementacin es llamada "vista" o "consulta". Las relaciones derivadas son convenientes ya que expresan informacin de varias relaciones actuando como si fuera una sola.

Las 12 reglas de Codd


Preocupado por los productos que decan ser sistemas gestores de bases de datos relacionales (RDBMS) sin serlo, Codd publica las 12 reglas que debe cumplir todo DBMS para ser considerado relacional. Estas reglas en la prctica las cumplen pocos sistemas relacionales. Las reglas son: 1.- Informacin. Toda la informacin de la base de datos debe estar representada explcitamente en el esquema lgico. Es decir, todos los datos estn en las tablas.

Las 12 reglas de Codd


2.- Acceso garantizado. Todo dato es accesible sabiendo el valor de su clave y el nombre de la columna o atributo que contiene el dato. 3.- Tratamiento sistemtico de los valores nulos. El DBMS debe permitir el tratamiento adecuado de estos valores. 4.- Catlogo en lnea basado en el modelo relacional. Los metadatos deben de ser accesibles usando un esquema relacional.

Las 12 reglas de Codd


5.- Sublenguaje de datos completo. Al menos debe de existir un lenguaje que permita el manejo completo de la base de datos. Este lenguaje, por lo tanto, debe permitir realizar cualquier operacin. 6.- Actualizacin de vistas. El DBMS debe encargarse de que las vistas muestren la ltima informacin.

Las 12 reglas de Codd


7.- Inserciones, modificaciones y eliminaciones de dato nivel. Cualquier operacin de modificacin debe actuar sobre conjuntos de filas, nunca deben actuar registro a registro. 8.- Independencia fsica. Los datos deben de ser accesibles desde la lgica de la base de datos an cuando se modifique el almacenamiento. 9.- Independencia lgica. Los programas no deben verse afectados por cambios en las tablas

Las 12 reglas de Codd


10.- Independencia de integridad. Las reglas de integridad deben almacenarse en la base de datos (en el diccionario de datos), no en los programas de aplicacin. 11.- Independencia de la distribucin. El sublenguaje de datos debe permitir que sus instrucciones funciones igualmente en una base de datos distribuida que en una que no lo es. 12.- No subversin. Si el DBMS posee un lenguaje que permite el recorrido registro a registro, ste no puede utilizarse para incumplir las reglas relacionales.

Transformaciones de entidades fuertes


En principio las entidades fuertes del modelo Entidad Relacin son transformados al modelo relacional siguiendo estas instrucciones: Entidades. Las entidades pasan a ser tablas Atributos. Los atributos pasan a ser columnas. Identificadores principales. Pasan a ser claves primarias Identificadores candidatos. Pasan a ser claves candidatas.

Ilustracin, Transformacin de una entidad fuerte al esquema relacional


Nombre(Identificador, Atributo 1, Atributo 2, Atributo 3)

Restricciones
Una restriccin es una condicin que obliga el cumplimiento de ciertas condiciones en la base de datos. Algunas no son determinadas por los usuarios, sino que son inherentemente definidas por el simple hecho de que la base de datos sea relacional. Algunas otras restricciones las puede definir el usuario, por ejemplo, usar un campo con valores enteros entre 1 y 10. Las restricciones proveen un mtodo de implementar reglas en la base de datos.

Restricciones
Las restricciones restringen los datos que pueden ser almacenados en las tablas. Usualmente se definen usando expresiones que dan como resultado un valor booleano, indicando si los datos satisfacen la restriccin o no. Las restricciones no son parte formal del modelo relacional, pero son incluidas porque juegan el rol de organizar mejor los datos. Las restricciones son muy discutidas junto con los conceptos relacionales.

Dominios
Un dominio describe un conjunto de posibles valores para cierto atributo. Como un dominio restringe los valores del atributo, puede ser considerado como una restriccin. Matemticamente, atribuir un dominio a un atributo significa "todos los valores de este atributo deben de ser elementos del conjunto especificado". Distintos tipos de dominios son: enteros, cadenas de texto, fecha, no procedurales etc.

Clave nica
Cada tabla puede tener uno o ms campos cuyos valores identifican de forma nica cada registro de dicha tabla, es decir, no pueden existir dos o ms registros diferentes cuyos valores en dichos campos sean idnticos. Este conjunto de campos se llama clave nica. Pueden existir varias claves nicas en una determinada tabla, y a cada una de stas suele llamrsele candidata a clave primaria.

Clave primaria
Una clave primaria es una clave nica elegida entre todas las candidatas que define unvocamente a todos los dems atributos de la tabla, para especificar los datos que sern relacionados con las dems tablas. La forma de hacer esto es por medio de claves forneas. Slo puede existir una clave primaria por tabla y ningn campo de dicha clave puede contener valores NULL.

Clave fornea
Una clave fornea es una referencia a una clave en otra tabla, determina la relacin existente en dos tablas. Las claves forneas no necesitan ser claves nicas en la tabla donde estn y s a donde estn referenciadas. Por ejemplo, el cdigo de departamento puede ser una clave fornea en la tabla de empleados. Se permite que haya varios empleados en un mismo departamento, pero habr uno y slo un departamento por cada clave distinta de departamento en la tabla de empleados.

Clave ndice
Las claves ndice surgen con la necesidad de tener un acceso ms rpido a los datos. Los ndices pueden ser creados con cualquier combinacin de campos de una tabla. Las consultas que filtran registros por medio de estos campos, pueden encontrar los registros de forma no secuencial usando la clave ndice. Las bases de datos relacionales incluyen mltiples tcnicas de ordenamiento, cada una de ellas es ptima para cierta distribucin de datos y tamao de la relacin.

Clave ndice
Los ndices generalmente no se consideran parte de la base de datos, pues son un detalle agregado. Sin embargo, las claves ndices son desarrolladas por el mismo grupo de programadores que las otras partes de la base de datos.

Procedimientos almacenados
Un procedimiento almacenado es cdigo ejecutable que se asocia y se almacena con la base de datos. Los procedimientos almacenados usualmente recogen y personalizan operaciones comunes, como insertar un registro dentro de una tabla, recopilar informacin estadstica, o encapsular clculos complejos. Son frecuentemente usados por un API por seguridad o simplicidad. Los procedimientos almacenados no son parte del modelo relacional, pero todas las implementaciones comerciales los incluyen.

Estructura
La base de datos se organiza en dos marcadas secciones; el esquema y los datos (o instancia). El esquema es la definicin de la estructura de la base de datos y principalmente almacena los siguientes datos: El nombre de cada tabla El nombre de cada columna El tipo de dato de cada columna La tabla a la que pertenece cada columna

Estructura
Las bases de datos relacionales pasan por un proceso al que se le conoce como normalizacin, el resultado de dicho proceso es un esquema que permite que la base de datos sea usada de manera ptima.

Los datos o instancia es el contenido de la base de datos en un momento dado. Es en s, el contenido de todos los registros.

Lenguaje formal y comercial de consulta


Los podemos dividir en dos tipos: Lenguajes Formales y Lenguajes Comerciales. Los lenguajes formales estn basados en el lgebra relacional o en el clculo relacional. Solamente se han descrito para consulta a Bases de Datos (existen lenguajes comerciales que adems de consulta permiten otras operaciones).

El lgebra relacional tiene procedimientos (procedimental), mientras que los lenguajes basados en el clculo relacional son aprocedimentales. Dentro del clculo relacional se distingue entre clculo relacional orientado a tuplas y clculo relacional orientado a dominios. Los lenguajes comerciales, en su mayora usan enfoques tanto procedimentales como aprocedimentales, o lo que es lo mismo, no son lenguajes puros como los formales. De esta manera hacen su sintaxis ms amigable al usuario.

Lenguajes Formales
A) Operaciones fundamentales: Tiene cinco por medio de las cuales se puede realizar cualquier consulta. Son las siguientes: 1.- Seleccin (). Es una operacin unaria (acta sobre una relacin nica). Sirve para obtener determinadas tuplas de una relacin, basndose en que dichas tuplas cumplan un predicado determinado P. Su sintaxis es la siguiente: P (r), donde r es la relacin sobre la que se acta y P es el predicado que debe cumplirse.

Si por ejemplo tenemos la relacin: estudiante = (NE, nombre, edad, dccion) y queremos seleccionar al estudiante 2249 tendremos que hacer: NE =2249(estudiante) El predicado de seleccin admite los siguientes operadores relacionales: < , , > , , = . Adems un predicado puede estar compuesto por varias condiciones unidas por los conectivos u . Ejemplo: nombre = "Pepe" edad > 25 (estudiante) De esta manera se seleccionaran todos los estudiantes llamados Pepe y cuya edad supere los 25 aos.

2.- Proyeccin (): Es tambin una operacin unaria. Proyecta una nueva relacin con un nuevo esquema en el cual aparezcan solamente los atributos que se especifican en la operacin. Sintaxis: A1 ,..., An (r). Donde A1 ,...., An es la lista de atributos y "r" la relacin sobre la que se acta. Si, por ejemplo, queremos tener toda la relacin de estudiantes, pero slo con el nombre haramos: nombre (estudiante) Si quisisemos obtener el nombre del estudiante 224: nombre ( NE = 2249 (estudiante))

3.- Producto Cartesiano (r1 x r2): Si el nmero de tuplas de r1 es n1, y el nmero de tuplas de r2 es n2, el nmero de tuplas de la relacin obtenida ser n1n2. Veamos un ejemplo: Supongamos que tenemos las siguientes relaciones: Cliente = (nombre_cliente, ciudad, calle) Sucursal = (nombre_sucursal, activo, ciudad) Prestamo = (num_prestamo, nombre_sucursal, nombre_cliente, importe) Deposito = (num_cuenta, nombre_sucursal, nombre_cliente, saldo)

Si realizamos el producto cliente x prestamo, el esquema sera la unin de los esquemas: (cliente.nombre_cliente, ciudad, calle, num_prestamo, nombre_sucursal, prestamo.nombre_cliente, importe) Como tuplas obtenemos las posibles combinaciones de tuplas de cliente con tuplas de prestamo. Habr muchas tuplas de la nueva relacin en las que se cumplir que: t[cliente.nombre_cliente] t[prestamo.nombre_cliente]

Por ello, normalmente la operacin de producto cartesiano va unida a una seleccin que de entre todas las posibles combinaciones de tuplas selecciona las que cumplen unas condiciones. Por ejemplo, queremos localizar los clientes y las ciudades donde viven que tengan un prstamo.
(prestamo.nombre_cliente cliente.nombre_cliente (cliente x prestamo))
prestamo.nombre_cliente, ciudad =

4.- Unin de Conjuntos (r1 r2): Acta sobre dos relaciones unindolas. El resultado es, por tanto, una nueva relacin con el mismo esquema que las relaciones implicadas y con un nmero de tuplas que es la unin de las tuplas de r1 y r2 (los elementos duplicados se desechan). r1 y r2 deben tener el mismo esquema, es decir, los dominios de los atributos i-simos de cada uno de los esquemas debe coincidir.

En el ejemplo que estamos considerando, no podramos hacer la unin de cliente con prstamo, pero s sera posible hacer esto otro por ejemplo

( nombre_cliente (prestamo))

(cliente))

(nombre_cliente

5.- Diferencia de Conjuntos (r1 - r2): Es una operacin binaria que da como resultado una relacin con los elementos que estn en r1, y no estn en r2. Lgicamente r1 y r2 deben tener el mismo esquema. Esta operacin se podra utilizar, si por ejemplo queremos saber el nombre de los clientes que tienen un prstamo en la sucursal principal, pero que no tienen cuenta en dicha sucursal:

(nombre_cliente (nombre_sucursal = "Principal" (prestamo))) - ( nombre_cliente (nombre_sucursal = "Principal" (deposito))) Con las cinco operaciones definidas (operaciones fundamentales) se puede realizar cualquier consulta en lgebra relacional

Clculo Relacional
A. Clculo Relacional Orientado a Tuplas En este lenguaje, expresamos variables que representan tuplas. Si por ejemplo existe una tupla t contenida en una relacin r escribiremos t r. Si queremos expresar el valor que toma el atributo A para la tupla t, lo haremos de la siguiente forma: t[A]. B. Como dijimos, el clculo relacional es aprocedimental (no tiene procedimientos), por tanto cuando deseamos obtener un conjunto de tuplas (una relacin) a partir de

Clculo Relacional
otras tenemos que expresarlo usando los medios que el clculo relacional nos ofrece, si por ejemplo, queremos obtener una relacin con el conjunto de tuplas que cumplen el predicado P, tendremos que expresarlo de esta manera: {t / P(t)}. Veamos un ejemplo prctico: "Queremos tener una lista completa de todos aquellos clientes que tienen un prstamo cuyo importe sea ms de un milln" (seleccin). {t / t prestamo t[importe] > 1000000}

Modificacin de la base de datos


SQL posee comandos destinados tambin para modificar la base de datos, entre estos se tienen operaciones de borrado, insercin y actualizacin. Borrado La operacin de borrado se expresa de igual manera que una consulta. Se pueden borrar solo tuplas completas, es decir, no se pueden borrar valores de atributos concretos. La expresin SQL relacionada con el borrado es: + delete * from r where p

Donde r es una relacin y p es una condicin lgica que determina las tuplas a ser eliminadas de r, si la condicin p es omitida, se eliminan todas las tuplas en r. Hay que sealar que una orden delete opera solo sobre una relacin. Si se desea borrar Tuplas de varias relaciones, se deber utilizar una orden delete por cada relacin. El predicado de la clausila where puede ser tan complicado como el where de cualquier clausula select, o tan simple como una clausula where vacia.

Ejemplo: Borrar todas las tuplas de la relacin Prestamo ( Los sistemas bien disenados requerirn una confirmacin del usuario antes de ejecutar una consulta como esta ). + Solucion: delete from Prestamo

Ejemplo: Borrar todas las cuentas de la Sucursal Subtiava + Solucion: delete from Cuenta where nombre_sucursal=Subtiava

Ejemplo: Borrar todos los prestamos en los que el monto del prstamo este entre $5000 y $10000 pesos. + Solucin: delete from prstamo where importe between 5000 and 10000 Ejemplo: Borrar las cuentas de todas las sucursales de Granada En este caso la solucin se genera mediante una subconsulta que muestra los nombres de las sucursales ubicadas en Masaya. De modo que la expresin de SQL requerida es: + Solucin: delete from Cuenta where nombre_sucursal in (select nombre_sucursal from Sucursal where ciudad_sucursal = Granada)

Uso de funciones de agregacin en una subconsulta de borrado. Ejemplo: Borrar todas las cuentas cuyos saldos sean ingferiores a la media del banco + Solucion: delete from Cuenta where saldo <(select avg (saldo)from Cuenta) La orden delete comprueba primero que cada tupla de la relacin Cuenta tiene un saldo inferior a la media del banco. A continuacin se borran todas las tuplas que cumplan la condicin anterior, es decir, las que representan una cuenta con un saldo menor que la media. Es importante realizar todas las comprobaciones antes de llevar a cabo el borrado.

Insercin El comando SQL encargado de realizar la insercin de una o mas tuplas en una relacin es el comando insert, este tiene dos variantes: 1. Una para insertar una sola tupla indicando los valores de los atributos de forma explicita, la forma general de este caso es inser into r values (tupla a insertar) en el caso de que se respete el ordel de los atributos en la relacin r. 2. En casi de que la tupla a insertar no respete ese orden, el nombre de los atributos se debe listar tambin en el comando insert.

Para insertar datos eun una relacin, o bien se especifica la tupla que se dese insertar o se formula una consulta cuyo resultado sea el conjunto de tuplas que se desean insertar. Obviamente, los valores de los atributos de las tuplas que se inserten deben pertenecer al dominio de los atributos. De igual manera, las tuplas insertadas debern ser de la aridad corecta.

La instruccin inser mas sencilla corresponde a la insercin de una tupla.

Ejemplo: Insertar un la base de datos asociados a la cuenta C-0045 en la Sucursal Len y que tiene como saldo $6000.00 pesos. + Solucion Caso 1: insert into Cuenta values (C0045,Leon,6000) En este ejemplo los valores se especifican en el mismo orden en que los atributos se lostan en el esquema de la relacin Cuenta. Para beneficio de los usuarios que no pueden recordar el orden de los atributis se especifican en la clausula insert. + Solucion Caso 2: insert into cuenta(numero_cuenta, nombre_sucursal, saldo) values (C-0045,Leon,6000) + Solucion: insert into Cuenta (numero_cuenta, nombre_sucursal, saldo) values (C-0045.Leon,6000)

El efecto es similar al ejemplo anterior con la diferencia de que se han listado explcitamente los nombres de los atributos, esto debido a que en la clausula values no se ha guardado el orden que estos tienen en la estructura de la tabla. +Generalmente se desea insertar las tuplas que resultan de una consulta. Ejemplo: si a todos los clientes que tiene un prstamo en la sucursal Subtiava se les quisiera regalar, como gratificacin una cuenta de ahorro con $5000.00 por cada cuenta de prstamo que posee. +Solucion: inserto into Cuenta select nombre_sucursal, numero_prestamo. 1000 from Prestamo where nombre_sucursal = Subtiava

La instruccin select se evalia primero, produciendo un conjunto de tuplas que a continuacin se insertan en la relacin cuenta. Cada tupla tiene un nombre_sucursal(Subtiava), un numero_prestamo (que sirve como un numero para la nueva cuenta) y un saldo inicial de la cuenta ($1000). Es necesario aadir tuplas a la relacin Impositor, a travs de la siguiente consulta: + Solucion: insert into Impositor select nombre_cliente, numero_prestamo from Prestatario, Prestamo where Prestatario.numero_prestamo = Prestamo.numero_prestamo and nombre_sucursal=Subtiaba

Actualizaciones En determinadas situaciones puede ser necesario cambiar un valor dentro de una tupla, sin cambiar todos los valores de la misma. Para este tipo de situaciones se utiliza la instruccin update. Al igual que ocurre con insert y delete, se puede elegir las tuplas que va a ser actualizadas mediante una consulta. Forma general: Sea r una relacin y sea exp una expresin de actualizacin, entonces la forma general del comando de actualizaciones: Update r set exp

Ejemplo: Realizar el pago de intereses anuales y todos los saldos se incrementen en un 5%, habra que formular la siguiente consulta de actualizacin: + Solucion: update Cuenta set saldo=saldo*1.05 Esta actualizacin se aplica una vez a cada tupla de la relacin Cuenta. Ejemplo: si se paga el inters solo a las cuentas con un saldo de $1000 o superior, se puede escribir la siguiente consulta. + Solucion: update Cuenta set saldo = saldo * 1.05 where saldo >= 1000

En general la clausula where de la instruccin update puede contener cualquier constructor legan en la clausula where de una instruccin select (incluyendo instrucciones select anidadas). Ejemplo: Pagar un inters del 5% a las cuentas cuyo saldo sea mayor que la media. + Solucion: update Cuenta set saldo = saldo * 1.05 where (saldo > select avg (saldo) from Cuenta) Tomar en cuenta, que el orden en el que se ejecutan dos instrucciones de actualizacin es importante.

SQL ofrece una constructora case, que se puede usar para formular las dos instrucciones de actualizacin en una instruccin de actualizacin. + La forma general de la clausula case es: Case When pred1 then result1 When pred2 then result2 When predn then resultn Else result0 End

En este caso se analizan cada uno de los predicados y si pred1 es verdadero entonces se ejecuta result1. Por otra parte si ninguno de los predicados es verdadero se ejecuta result0. Solucion:

Update Cuenta set saldo = case When saldo <= 10000 then saldo * 1.05 Else saldo * 1.06 End

Transacciones Una transaccion es un conjunto de instrucciones SQL de consultas y actualizaciones que se deben de ejecutarse todas de forma exitosa o no ejecutar ninguna. La norma SQL especifica que una transaccin comienza de forma implcita (no hay comando de comienzo) cuando se ejecunta una instruccin SQL, la transaccin finaliza con cualquiera de las siguientes opciones dependiendo de la decisin del usuario.

Commit: compromete la transaccin actual, es decir hace que los cambios realizados por la transaccin sean permanentes en la base de datos. Despus de ejecutarse este comando comienza una nueva transaccin de forma automtica.

RollBack: su efecto es retroceder la transaccin actual es decir deshace todas las actualizaciones realizadas por las instrucciones SQL, de tal forma que la base de datos se restaura al estado que exista previo a la primera instruccin de la transaccin.