Está en la página 1de 3

Las relaciones Una relacin o tabla se compone de: EMPLEADOS DNI 40.523.685 33.567.711 55.898.

425 Nombre Juan Marta Carlos Apellido Garca Roca Bondia Despacho 10 11 10

Esquema Extensin La relacin anterior se denota como EMPLEADOS(DNI, Nombre, Apellidos, Despacho) valiendo cualquier otro orden. El dominio es el conjunto de valores atmicos de un atributo (edades aceptadas, DNI's posibles, etc.) El grado es el nmero de atributos o columnas que componen la relacin. Las filas no estn ordenadas, pero no pueden estar repetidas. La clave de una relacin : claves candidatas aquellos subconjuntos de atributos sin tuplas repetidas y con los mnimos atributos posibles. Clave primaria ser la clave candidata que elijamos para identificar las filas de la tabla (tuplas de la relacin. En el ejemplo, el DNI). Las otras candidatas sern las claves alternativas. Claves secundarias o forneas sern aquellas que referencian a una primaria (la columna Despacho del ejemplo, sera secundaria de la primaria n despacho de la tabla DESPACHOS (n despacho, calle, poblacin). Operaciones del modelo relacional Bsicamente actualizacin (insercin, borrado y modificacin) y consulta. Usaremos los leguajes relacionales como el SQL. Reglas de integridad Consisten en evitar que el modelo represente plausiblemente a la realidad, evitando incoherencias (sueldos <0, edades fuera del dominio, etc.). Tambin recogen la unicidad de la clave primaria, su entidad (que no tenga valores nulos), la integridad del dominio ( que no haya valores fuera del dominio) y la integridad referencial (todos los valores que tome la clave secundaria deben existir en la primaria, o ser nulos). Para mantener esta integridad referencial, las polticas a seguir son: la restriccin (impedir modificar o borrar una tupla con clave primaria relacionada con una secundaria), la actualizacin en cascada (permite modificar la tupla, actualizando las relacianadas) y la anulacin (anula en cascada las relacionadas). Podramos por ejemplo, aplicar la restriccin para el borrado, y la actualizacin en cascada para la modificacin. El lgebra relacional UNIN: EMPLEADOS:= EMPLEADOS_ADM U EMPLEADOS_PROD INTERSECCIN: T " S. DIFERENCIA: T - S SELECCIN: DESPACHOS( edificio= Marina y superficie>12) PROYECCIN: Nueva relacin con slo unos atributos escogidos de la relacin original. COMBINACIN: Es una operacin binaria, o sea, a partir de dos relaciones. Consiste en obtener una nueva relacin resultado de concatenar las tuplas de las dos relaciones que cumplan la condicin de combinacin especificada. Un ejeplo sera combinar las tablas EDIFICIOS y DESPACHOS para obtener todos los edificios con superficie superior a la media: R:= EDIFICIS [nomedificio = edificio, supmediadesp < superficie] DESPACHOS. En esta combinacin, podran haber tuplas perdidas, por no tener relaciones entre ellas. Para evitar esto, se usan las combinaciones externas, que conservan en el resultado a todas la tuplas. Pueden ser externas derecha , izquierda y plena, segn las tuplas que conserven de cada relacin. EL LENGUAJE SQL Lenguaje declarativo (se le dice qu se quiere hacer, no cmo) de definicin, control y manipulacin de BD. Algunos ejemplos: CREAR UNA TABLA: CREATE TABLE productos (cod_producto INTEGER, nom_producto CHAR (20), tipo CHAR (20), descripcin CHAR (50), precio REAL, PRIMARY KEY (cod_producto)) INSERTAR un producto en la tabla: INSERT INTO productos Values (1250, `LENA', `Mesa', `Diseo J. Ruz. Ao 1920', 250000 CONSULTAR qu productos son sillas: SELECT cod_producto, nom-producto FROM productos WHERE tipo = `silla' ; (o WHERE precio > 100000, por ejemplo) Sentencias de definicin CREATE: crea BD, tablas, dominios, aserciones y vistas ALTER: modifica tablas y dominios. DROP: borra todo lo anterior. CREATE SCHEMA { [nom_esquema] / [AUTHORIZATION usuario] } [lista_de_elementos_del_esquema] Nomenclatura utilizada: Las maysculas son palabras reservadas del lengyaje, lo que haya entre [...] se puede poner o no, y la notacin {A/.../B} indica que hemos de escoger al menos una opcin. DROP SCHEMA nom_esquema {RESTRICT / CASCADE} RESTRICT borra slo si el esquema est vaco, CASCADE, borra aunque no lo est CREATE DATABASE y DROP DATABASE, tambin son validas en la mayora de BD. Creacin de tablas

CREATE TABLE nom_tabla ( definicin_columna [ , definicin_columna ] [ , restricciones_tabla ]) donde definicin_columna es: nom_columna {tipo_datos /dominio} [def_defecte] [restric_col ] Tipos de datos: CHARACTER ( longitud) NUMERIC (n, m) DECIMAL (n, m) INTEGER REAL DOUBLE PRECISION DATE TIME TIEMSTAMP Restricciones de columna: NOT NULL UNIQUE PRIMARY KEY REFERENCES tabla [(columna)] CHECK (condiciones) Restricciones de tabla: UNIQUE (columna [ , columna...] ) PRIMARY KEY ( columna [, columna...] ) FOREIGN KEY (columna [columna...] ) REFERENCES [(columna2 [columna 2])] CHECK (condiciones) Clave alternativa de la tabla Clave primaria de la tabla `columnas' son una clave secundaria que referencia a `columnas2', clave primaria Condicones a cumplir por la tabla No puede tener valores nulos No puede tener valores repetidos. Es la clave alternativa Ni valores repetidos ni nulos. Es la clave primaria Clave secundaria de la col y tabla especificada Debe cumplir las condiciones especificadas. Cadena de caracters de longitud fija Decimales con n dgitos y m decimales Decimales con n dgitos y m decimales Enteros Nmeros con coma flotante y precisin predefinida Igual, pero con ms precisin que el REAL YEAR, MONTH, DAY (`1978-12-25') HOUR, MINUT, SECOND ('17:15:00.00000') DATE y TIME juntos (`1998-7-8 9:30:05')

Modificacin y borrado de claves primarias con claves secundarias: FOREIGN KEY clave_secundaria REFERENCES tabla [ (clave_primaria) ] [ON DELETE {NO ACTION / CASCADE / SET DEFAULT / SET NULL } ] [ON UPDATE {NO ACTION / CASCADE / SET DEFAULT / SET NULL } ] donde NO ACTION = restriccin (no permitira el borrado o modificacin). Aserciones: son restricciones generales que afectan a una o ms columnas de ms de una tabla. CREATE ASSERTION nom_asercin CHECK (condiciones) DROP ASSERTION nom_ asercin Modificar y borrar tablas: ALTER TABLA nom_tabla {accin_modificar_columna / accin_modif_restriccin_tabla } Donde las accones pueden ser: {ADD/ALTER/DROP [COLUMN ]} Y {ADD restriccin / DROP CONSTRAINT restriccin {RESTRICT / CASCADE } } DROP TABLE nom_tabla { RESTRICT / CASCADE } Consultas en una BD relacional SELECT nom_columna_a_seleccionar [ [ AS ] col_renombrada ] [ , nom_columna_a-seleccionar .[ AS ...] ... ] FROM tabla_a_consultar [ [ AS ] tabla_renombrada] WHERE condiciones Ejemplo: SELECT * FROM clientes (el * es comodn) Para indicar las condiones en WHERE, usaremos los operadores de comparacin (=, <, >, <=, >=, <>) y los lgicos (NOT, AND, OR). Si queremos ver la consulta sin filas repetidas, pondremos SELECT DISTINT en lugar de SELECT. Funciones de agregacin: se aplican a columnas, por lo que van con SELECT ( ej. SELECT COUNT) COUNT (total filas), SUM (suma), MIN, MAX, AVG (media). Subconsultas: son consultas dentro de WHERE. WHERE precio = (SELECT MAX (precio) FROM proyectos) Otros predicados: BETWEEN (entre), [NOT] IN (similar a = [<>]), LIKE, IS [NOT] NULL , ALL/ANY/ SOME, [NOT] EXISTS. Ejemplos: WHERE sueldo BETWEEN 2.0E+6 AND 5.0E+6 WHERE ciudad IN (`Lleida', `Tarragona') (Solo coge los de Lleida y Tarragona) WHERE nom_empleado LIKE `J%' ( _ y % seran los equivalentes a ? y * respectivamente) WHERE num_proyecto IS NULL WHERE precio > ALL/ANY/SOME (subconsulta) WHERE EXISTS (subconsulta) Otras clusulas: ORDER BY columnas: ordena la consulta segn lo especificado aqu

GROUP BY columnas: agrupa las filas segn las col especificadas. HAVING: segn las condiciones indicadas aqu. SELECT columna FROM tabla (tambin se pueden indicar aqu varias tablas) [WHERE condiciones] GROUP BY columnas [HAVING condiciones ] (podemos usar aqu las funciones de agregacin SUM, MAX, etc.) [ORDER BY columna_de_ordenacin [DESC] [ , col_ordenacin [DESC]...] ] Combinaciones.(Join en ingls). Consultas a ms de una tabla. La combinacin consiste en crear una sola tabla a partir de las tablas especificadas en la clusula FROM, haciendo coincidir los valores de las columnas relacionadas de estas tablas. Para indicar la columna de una tabla, se escribe con el formato tabla.columna. Podemos usar alias para referirnos a las tablas, si los especificamos en FROM ( ej. FROM clientes c, proyectos p ) Se puede hacer una combinacin de la manera bsica , o usando la clusula JOIN que nos aporta el SQL92 completo. Comparemos ambas: SELECT p.precio, p.codi_proy, c.nif, p.codi_client, c.codi_cli FROM clients c, proyectos p WHERE c.codi_cli = p.codi_client AND c.codi_cli = 20 SELECT p.precio, p.codi_proy, c.nif, p.codi_client, c.codi_cli FROM clients c JOIN proyectos p ON c.codi_cli = p.codi_client WHERE c.codi_cli = 20 Combinacin natural: la podemos hacer de la misma forma, usan NATURAL JOIN en vez de JOIN.Es una equicombinacin, que combina columnas del mismo nombre y elimina las repetidas. Combinacin interna (INNER JOIN): es la que hace por defecto. Se queda con las filas que tienen valores idnticos en las columnas de las tablas que compara. Esto puede hacer que perdamos alguna fila interesante, si por ejemplo se encuentra un valor nulo en alguna de las tablas al hacer la combinacin. Combinacin externa: nos permite subsanar lo anterior, obteniendo todos los valores de la tabla de la izquierda (LEFT OUTER JOIN), de la derecha (RIGHT OUTER JOIN), o de ambas ( FULL OUTER JOIN). El formato sera: SELECT columnas FROM t1 [NATURAL] { LEFT/RIGHT/FULL } [OUTER] JOIN t2 [ON condiciones] [USING (columna [ , [columna] ) ] Combinaciones con ms de dos tablas: dos posibilidades, segn usemos el SQL92 introductorio o el completo: SELECT * FROM empleados, proyectos, clientes WHERE num_proy = codi_proy AND codi_client = codi_cli (nombres de col. diferentes) SELECT * FROM (empleados JOIN proyectos ON num_proy = codi_proy ) JOIN clientes ON codi_client = codi_clI Unir consultas: usaremos la clusula UNION [ALL] (sin el ALL evitamos las filas repetidas), entre cada sentencia SELECT. Interseccin: Usaremos INTERSECT [ALL] entre cada sentencia SELECT. Otra posibilidad es usar las clusulas IN o EXISTS: SELECT columnas FROM filas WHERE columna IN ( SELECT columna FROM tabla [WHERE condiciones] ) SELECT columnas FROM filas WHERE EXISTS ( SELECT * FROM tabla [WHERE condiciones] ) Diferencia: usaremos EXCEPT [ALL]entre cada consulta SELECT.

También podría gustarte