investigacion base de datos2

31
EL ÁLGEBRA RELACIONAL Y EL LENGUAJE SQL El Álgebra Relacional es un lenguaje, que define una serie de operaciones, que se realizan utilizando operadores, cada uno de los cuales puede trabajar sobre uno o varios conjuntos de datos produciendo como resultado un nuevo conjunto de datos. El conjunto de datos resultante de una operación puede a su vez ser utilizado en una nueva operación, en forma anidada, tal como se hace con las operaciones aritméticas. Esta propiedad es conocida como “clausura”. El lenguaje SQL (“Structured Query Language”) no es más que una de las más conocidas implementaciones concretas de las operaciones del álgebra relacional. En el presente texto, precisamente, se analizan las operaciones del álgebra relacional utilizando la terminología propia de dicha implementación. Así, los conjuntos de datos antes mencionados se materializan en la práctica como 'tablas', que contienen 'filas', con sus atributos representados mediante “columnas”. Existen nueve tipos diferentes de operadores, que son los siguientes: 1- Unión. 2- Intersección. 3- Diferencia. 4- Producto. 5- Selección. 6- Proyección. 7- Reunión.

Upload: phillip524

Post on 20-Nov-2015

20 views

Category:

Documents


0 download

DESCRIPTION

Diagramas entidad relación y consultas sql

TRANSCRIPT

EL LGEBRA RELACIONAL Y EL LENGUAJE SQL

El lgebra Relacional es un lenguaje, que define una serie de operaciones, que se realizan utilizando operadores, cada uno de los cuales puede trabajar sobre uno o varios conjuntos de datos produciendo como resultado un nuevo conjunto de datos.El conjunto de datos resultante de una operacin puede a su vez ser utilizado en una nueva operacin, en forma anidada, tal como se hace con las operaciones aritmticas. Esta propiedad es conocida como clausura. El lenguaje SQL (Structured Query Language) no es ms que una de las ms conocidas implementaciones concretas de las operaciones del lgebra relacional.En el presente texto, precisamente, se analizan las operaciones del lgebra relacional utilizando la terminologa propia de dicha implementacin. As, los conjuntos de datos antes mencionados se materializan en la prctica como 'tablas', que contienen 'filas', con sus atributos representados mediante columnas.

Existen nueve tipos diferentes de operadores, que son los siguientes: 1-Unin.2-Interseccin.3-Diferencia.4-Producto.5-Seleccin.6-Proyeccin.7-Reunin.8-Divisin.9-Asignacin.

1. UNINOpera sobre dos o ms tablas, siendo necesario que todas posean la misma estructura, devolviendo una nueva tabla cuyo contenido es la combinacin de los contenidos de todas y cada una de las tablas originales, descartando las filas repetidas, tal como puede verse en el siguiente ejemplo:

TABLA A

CODIGOLOCALIDAD

1425Buenos Aires

2000Rosario

3000Santa Fe

TABLA B

CODIGOLOCALIDAD

2000Rosario

3000Santa Fe

2128Arroyo Seco

2121Perez

A UNION B

CODIGOLOCALIDAD

1425Buenos Aires

2000Rosario

3000Santa Fe

2128Arroyo Seco

2121Perez

En la prctica, el comando SQL que se utilizara para obtener la unin de las tablas A y B del ejemplo podra ser el siguiente:SELECT * FROM A UNION SELECT * FROM B

2. INTERSECCINOpera sobre dos o ms tablas, siendo necesario que todas posean la misma estructura, devolviendo una nueva tabla cuyo contenido es las filas comunes a todas las tablas originales, descartando las filas repetidas, tal como puede verse en el siguiente ejemplo:

TABLA A

CODIGOLOCALIDAD

1425Buenos Aires

2000Rosario

3000Santa Fe

TABLA B

CODIGOLOCALIDAD

2000Rosario

3000Santa Fe

2128Arroyo Seco

2121Prez

En la prctica, el comando SQL que se utilizara para obtener lainterseccinde las tablas A y B del ejemplo podra ser el siguiente:SELECT * FROM A INTERSECT SELECT * FROMCabe destacar aqu, que la operacin deinterseccinpuede no existir en algunas implementaciones de SQL, como por ejemplo, la de mySQL versin 5.

3. DIFERENCIAOpera sobre dos tablas, siendo necesario que ambas contengan la misma estructura, devolviendo una nueva tabla cuyo contenido es las filas que figuran en la primera tabla y no en la otra, tal como puede verse en el siguiente ejemplo:TABLA A

CODIGOLOCALIDAD

1425Buenos Aires

2000Rosario

3000Santa Fe

TABLA B

CODIGOLOCALIDAD

2000Rosario

3000Santa Fe

2128Arroyo Seco

2121Prez

En la prctica, el comando SQL que se utilizara para obtener ladiferenciaentre las tablas A y B del ejemplo podra ser el siguiente:SELECT * FROM A EXCEPT SELECT * FROM BCabe destacar aqu, que la operacin dediferenciapuede no existir en algunas implementaciones de SQL, como por ejemplo, la de mySQL versin 5.

4. PRODUCTOOpera sobre dos tablas, efectuando un producto cartesiano del contenido de las mismas, no siendo necesario que ambas posean la misma estructura, y devolviendo una nueva tabla cuyo contenido es todas las posibles combinaciones de las filas de una de ambas tablas, tal como puede verse en el siguiente ejemplo:A DIFERENCIA B

CODIGOLOCALIDAD

1425Buenos Aires

A * B

WXYZ

12315320

12375

783215320

783275

67515320

67575

TABLA A

WX

123

7832

675

TABLA B

YZ

15320

75

En la prctica, el comando SQL que se utilizara para obtener elproductode las tablas A y B del ejemplo podra ser el siguiente:SELECT * FROM A, B

5. SELECCINOpera sobre una o ms tablas, no siendo necesario que stas posean la misma estructura, y devolviendo una nueva tabla cuyo contenido es todas las filas de las tablas indicadas que satisfacen una cierta condicin, tal como puede verse en el siguiente ejemplo:SELECCIN CON X= 100000) { Clave, Nombre, Ciudad}

Al ejecutar esta instruccin, la expresin del lgebra relacional no es evaluada, sino que es recordada por el sistema de tal forma que para el usuario es como si en realidad tuviera una tabla denominada BUEN_VENDEDOR con los registros y atributos que se muestran a continuacin:

En otras palabras, una vista es una ventana a travs de la cual se puede consultar o cambiar informacin de la tabla a la que est asociada. Esto, claro est, en relacin con los privilegios que posea el usuario de la base de datos. Si el usuario solamente tiene privilegios de lectura en una entidad, en la vista tampoco podr agregar o modificar informacin; si el usuario no tiene acceso a determinadas tablas, tampoco podr crear una vista con informacin proveniente de las mismas.Las vistas tienen la misma estructura que una tabla: filas y columnas. La nica diferencia es que slo se almacena de ellas la definicin, no los datos. Los datos que se recuperan mediante una consulta en una vista se presentarn igual que los de una tabla. De hecho, si no se sabe que se est trabajando con una vista, nada hace suponer que es as. Al igual que sucede con una tabla, se pueden insertar, actualizar, borrar y seleccionar datos.Esto significa que una vista no contiene datos duplicados de una tabla de la base de datos. No tiene absolutamente ningn dato, pues como ya se mencionaba, no es una tabla real. Es decir, se percibe como una tabla virtual.Por qu utilizar vistas? Las vistas pueden proporcionar un nivel adicional de seguridad. Las vistas permiten ocultar la complejidad de los datos. Una base de datos se compone de muchas tablas. La informacin de dos o ms tablas puede recuperarse utilizando una combinacin de tablas, y estas combinaciones pueden resultar muy confusas. Creando una vista se hace visualmente todo ms simple. Las vistas ayudan a mantener unos nombres razonables para las consultas. Por ejemplo, en lugar de la instruccin:

Select Clave, Nombre, Ciudad from Vendedores where Venta > 100000

Se utiliza slo la frase: Buen_Vendedor En las vistas remotas y en las vistas sin conexin puede crear reglas a nivel de campo y de registro para validar datos introducidos localmente antes de enviarlos al origen de datos remoto. Puesto que el objetivo de estas reglas es impedir que se enve al origen de datos cualquier dato que pueda ser rechazado por las reglas de Integridad del servidor, debe reproducir las reglas del origen de datos en las reglas que se crean para la vista remota. Por ejemplo, si la clave de un vendedor est formada por cuatro dgitos y as lo establecen las restricciones de Integridad de la tabla Vendedores, entonces en la vista, cuando un vendedor se d de alta, tambin se deber cumplir con esa restriccin.

Existen funciones en los DBMS para crear reglas para las vistas, y es precisamente as como una vista puede implementarse para garantizar la Integridad de la base de datos; tambin, mediante las vistas, es posible determinar si existen datos referenciados que pudieran comprometer la Integridad relacional.

PROPIEDADES ACID

ACID, conformado por las siglas provenientes de Atomicity, Consistency, Isolation y Durability. En espaol, Atomicidad, Consistencia, Aislamiento y Durabilidad, son un conjunto de propiedades necesarias para que un conjunto de instrucciones, sean consideradas como una transaccin en un sistema de gestin de bases de datos.

Una transaccin esun conjunto de rdenes que se ejecutan formando una unidad de trabajo, es decir, en forma indivisible o atmica.Unejemplo de una transaccin compleja es la transferenciade fondos de una cuenta a otra, la cual implica mltiples operaciones individuales. Si un sistemasupera la prueba ACID, significa que es fiable.

Atomicidad:Significa que el sistema permite operaciones atmicas. Una operacin atmica es aquella que si est formada por operaciones ms pequeas, se consideran como un paquete indivisible. Deben ejecutarsetodascorrectamente, o en el caso de que alguna de ellas no pueda hacerlo, el efecto de las que ya se han ejecutado no debe hacerse notar, debe deshacerse, como si el conjunto de las operaciones no se hubieran realizado. La atomicidad est ntimamente ligada al concepto detransaccinde los sistemas gestores de bases de datos. En un SGBD, cuando se indica que un conjunto de operaciones forman una transaccin, o se ejecutan todas correctamente, o el SGBD deshar los cambios, como si la transaccin nunca se hubiera iniciado. No obstante, atomicidad y transaccin no son sinnimos. Mientrasatomicidades una propiedad, latransaccines el mecanismo que utilizan los SGBD para lograr laatomicidad.

Consistencia:Integridad. Esta propiedad asegura que slo se empieza aquello que se puede acabar. Por lo tanto se ejecutan aquellas operaciones que no van a romper las reglas y directrices de integridad de la base de datos. Sostiene que cualquier transaccin llevar a la base de datos desde un estado vlido a otro tambin vlido.Aislamiento:Propiedad que asegura que una operacin no puede afectar a otras. Esto asegura que la realizacin de dos transacciones sobre la misma informacin sean independientes y no generen ningn tipo de error.Durabilidad:Propiedad que asegura que una vez realizada la operacin, sta persistir y no se podr deshacer aunque falle el sistema.Cumpliendo estos 4 requisitos un sistema gestor de bases de datos puede ser consideradoACID Compliant.

VISTAS EN SQL

Muchas bases de datos relacionales que se utilizan en aplicaciones del mundo real tienen esquemas complejos y formados por muchas tablas. En ocasiones, es conveniente que algunos grupos o perfiles de usuarios tengan una vista parcial de ese esquema, o que tengan una visin de la misma con una estructura diferente a la del esquema que realmente est almacenado. Precisamente para estos casos, el lenguaje SQL permite definir vistas.

Una vista es esencialmente una consulta almacenada que devuelve un conjunto de resultados y a la que se le pone un nombre. Una vista es una tabla virtual, aparece como una tabla ms del esquema, aunque realmente no lo es.

SintaxisLa sintaxis general para crear una vista es la siguiente:

CREATE VIEW view_name [(column_list)]AS sentencia_selectLa idea es muy simple, solamente le damos nombre (view_name) a una consulta. Opcionalmente, los atributos de la relacin resultante de la sentencia_select pueden renombrarse mediante etiquetas en column_list.Un ejemplo

Tomemos como ejemplo una aplicacin muy simple de gestin de pedidos en un supermercado virtual. El esquema relacional sera el siguiente.Figura 1Figura 1 (graphics1.png)

En ese esquema, la informacin aparece descompuesta en tablas. Sin embargo, para un usuario en un departamento de marketing, podra ser que le fuese ms til tener la informacin de las ventas de los productos acumuladas, simplemente.

CREATE VIEW resumenproductos AS

select p.id, p.nombre, sum(cantidad) AS total

from producto as p, lineas_pedido as l

where (l.producto = p.id)

group by l.producto order by total desc

Despus de definir la vista, podremos utilizar resumenproductos como si fuese una tabla ms. Por ejemplo la sentencia:

select * from resumenproductos

Nos devolver el resultado de la consulta que define la vista.

Como segundo ejemplo, puede que una persona en Contabilidad solamente necesite el resumen econmico de los pedidos. En ese caso, podremos definir una vista como la siguiente utilizando una subconsulta correlacionada:

CREATE VIEW resumenpedidos (usuario, nombre, pedido, fecha, total) ASSELECT c.usuario, c.nombre, p.numpedido, p.fecha, (SELECT SUM(precio*cantidad) FROM LINEAS_PEDIDO as x WHERE (x.cliente = p.cliente) and (x.pedido=p.numpedido))FROM CLIENTES as C, PEDIDOS as PWHERE p.cliente = c.usuario

El resultado sera como el siguiente:Tabla 1 usuario nombre pedido fecha totalagarcia Ana Garcia 1 2008-11-05 40jlopez Juan Lopez 1 2008-02-10 65jlopez Juan Lopez 2 2008-02-11 null

Ntese que cuando un pedido no tiene lneas asociadas, aparecer un nulo en la subconsulta. La consulta puede hacerse tambin mediante agrupamiento con la siguiente consulta:

SELECT c.usuario, c.nombre, p.numpedido, p.fecha, sum(cantidad*precio)

FROM clientes as c, pedidos as p, lineas_pedido as l

WHERE (c.usuario = p.cliente) and (p.cliente = l.cliente) and (p.numpedido=l.pedido)

GROUP BY p.cliente, p.numpedido

En este caso se evita la aparicin de nulos, ya que la clusula GROUP BY no crear un subgrupo en el caso de que no haya lneas de pedido.

Lgicamente, los beneficios de las vistas se obtienen al combinar su definicin con el sistema de permisos del gestor de base de datos. Siguiendo el ejemplo, daramos permiso a los usuarios en Marketing sobre la vista resumenproductos, y permisos a los usuarios de Contabilidad sobre resumenpedidos.La representacin de las vistas

Dado que las vistas aparecen como tablas, pueden aparecer en otras consultas. Es importante tener esto en cuenta cuando se estn diseando consultas, dado que puede afectar al rendimiento. Para ello, algunos gestores de bases de datos tienen sintaxis extendidas para controlar cmo se representan internamente las vistas.

Por ejemplo, MySQL tiene una clusula ALGORITHM que puede acompaarse de tres valores: MERGE,TEMPTABLE o UNDEFINED, con el siguiente significado:

Con MERGE, el texto de las sentencias que hagan referencia a una vista se fusiona con el texto de la definicin de la vista, de modo que las partes de la definicin de la vista reemplazan a las partes correspondientes de la sentencia. Con TEMPTABLE, los resultados de la vista se recuperan en una tabla temporal, que se usa despus para ejecutar la consulta.

El uso de TEMPTABLE consume un espacio temporal adicional, pero puede tener un mejor rendimiento ya que despus de hacer la copia de los datos en la tabla temporal, se usa sta y se libera la tabla o tablas originales.

SINTAXIS DE JOIN MySQL soporta las siguientes sintaxis de JOIN para la parte table_references de comandos SELECT y DELETE y UPDATE de mltiples tablas: table_reference, table_referencetable_reference [INNER | CROSS] JOIN table_reference [join_condition]table_reference STRAIGHT_JOIN table_referencetable_reference LEFT [OUTER] JOIN table_reference join_conditiontable_reference NATURAL [LEFT [OUTER]] JOIN table_reference{ ON table_reference LEFT OUTER JOIN table_referenceON conditional_expr }table_reference RIGHT [OUTER] JOIN table_reference join_conditiontable_reference NATURAL [RIGHT [OUTER]] JOIN table_referencetable_reference se define como: tbl_name [[AS] alias] [[USE INDEX (key_list)] | [IGNORE INDEX (key_list)] | [FORCE INDEX (key_list)]]join_condition se define como: ON conditional_expr | USING (column_list)Generalmente no debera tener ninguna condicin en la parte ON que se usa para restringir qu registros desea en el conjunto de resultados, pero en su lugar especificar esas condiciones en la clusula WHERE . Hay excepciones a esta regla. La sintaxis { OJ ... LEFT OUTER JOIN ...} mostrada en la lista precedente existe slo por compatibilidad con ODBC. Puede poner un alias en una referencia de tabla usando tbl_name AS alias_name o tbl_name alias_name: mysql> SELECT t1.name, t2.salary FROM employee AS t1, info AS t2 -> WHERE t1.name = t2.name; mysql> SELECT t1.name, t2.salary FROM employee t1, info t2 -> WHERE t1.name = t2.name; El condicional ON es cualquier expresin condicional de la forma que puede usarse en una clusula WHERE . Si no hay ningn registro coincidiente para la tabla de la derecha en la parte ON o USING en un LEFT JOIN, se usa un registro con todos las columnas a NULL para la tabla de la derecha. Puede usar este hecho para encontrar registros en una tabla que no tengan contraparte en otra tabla: mysql> SELECT table1.* FROM table1 -> LEFT JOIN table2 ON table1.id=table2.id -> WHERE table2.id IS NULL;Este ejemplo encuentra todos los registros en table1 con un valor id no presente en table2 (esto es, todos los registros en table1 sin registro correspondiente en table2). Esto asume que table2.id se declara NOT NULL. La clusula USING (column_list) muestra una lista de columnas que deben existir en ambas tablas. Las siguientes dos clusulas son semnticamente idnticas: a LEFT JOIN b USING (c1,c2,c3) a LEFT JOIN b ON a.c1=b.c1 AND a.c2=b.c2 AND a.c3=b.c3 El NATURAL [LEFT] JOIN de dos tablas se define semnticamente equivalente a un INNER JOIN o LEFT JOIN con una clusula USING que nombra todas las columnas que existen en ambas tablas. INNER JOIN y , (coma) son semnticamente equivalentes en la ausencia de una condicicn de join: ambos producen un producto Cartesiano entre las tablas especificadas (esto es, cada registro en la primera tabla se junta con cada registro en la segunda tabla). RIGHT JOIN funciona anlogamente a LEFT JOIN. Para mantener el cdigo portable entre bases de datos, se recomienda que use LEFT JOIN en lugar de RIGHT JOIN. STRAIGHT_JOIN es idntico a JOIN, excepto que la tabla de la izquierda se lee siempre antes que la de la derecha. Esto puede usarse para aqullos casos (escasos) en que el optimizador de join pone las tablas en orden incorrecto. Puede proporcionar pistas de qu ndice debe usar MySQL cuando recibe informacin de una tabla. Especificando USE INDEX (key_list), puede decirle a MySQL que use slo uno de los posibles ndices para encontrar registros en la tabla. La sintaxis alternativa IGNORE INDEX (key_list) puede usarse para decir a MySQL que no use algn ndice particular. Estos trucos son tiles si EXPLAIN muestra que MySQL est usando el ndice incorrecto de la lista de posibles ndices. Tambin puede usar FORCE INDEX, que acta como USE INDEX (key_list) pero con la adicin que un escaneo de tabla se asume como operacin muy cara. En otras palabras, un escaneo de tabla se usa slo si no hay forma de usar uno de los ndices dados para encontrar registros en la tabla. USE KEY, IGNORE KEY, y FORCE KEY son sinnimos de USE INDEX, IGNORE INDEX, y FORCE INDEX. Nota: USE INDEX, IGNORE INDEX, y FORCE INDEX slo afecta los ndices usados cuando MySQL decide cmo encontrar registros en la tabla y cmo hacer el join. No afecta si un ndice est en uso cuando se resuelve unORDER BY o GROUP BY.

Algunos ejemplos de join: mysql> SELECT * FROM table1,table2 WHERE table1.id=table2.id;mysql> SELECT * FROM table1 LEFT JOIN table2 ON table1.id=table2.id;mysql> SELECT * FROM table1 LEFT JOIN table2 USING (id);mysql> SELECT * FROM table1 LEFT JOIN table2 ON table1.id=table2.id-> LEFT JOIN table3 ON table2.id=table3.id;mysql> SELECT * FROM table1 USE INDEX (key1,key2)-> WHERE key1=1 AND key2=2 AND key3=3;mysql> SELECT * FROM table1 IGNORE INDEX (key3)-> WHERE key1=1 AND key2=2 AND key3=3;