Está en la página 1de 9

SQL I Lenguaje de definicin de datos

SQL I
Lenguaje de Definicin de Datos

SQL I Lenguaje de definicin de datos

5.1.- Introduccin Los SBD comerciales necesitan un lenguaje de consultas cmodo para el usuario. En este captulo se estudia el lenguaje comercial de mayor influencia, SQL. SQL usa una combinacin de lgebra relacional y construcciones del clculo relacional. Aunque el lenguaje SQL se considere un "lenguaje de consultas", contiene muchas otras capacidades adems de la consulta en BD. Incluye caractersticas para definir la estructura de los datos, para la modificacin de los datos en la BD y para la especificacin de ligaduras de seguridad. Las distintas implementaciones de SQL pueden diferenciarse en detalles, o pueden admitir slo un subconjunto del lenguaje completo. SQL se ha establecido claramente como el lenguaje estndar de BD relaciones. Hay numerosas versiones de SQL. La original se desarroll en IBM como parte del proyecto System R con el nombre Sequel a principios de 1970. Su nombre pas a ser SQL (Structured Query Languaje, Lenguaje estructurado de consultas). Actualmente, numerosos productos son compatibles con el lenguaje SQL. En 1986, ANSI e ISO publicaron una norma SQL, denominada SQL-86. En 1987, IBM public su propia norma: SAA-SQL (Systems Application Architecture Database) En 1989 se public una norma extendida para SQL denominada SQL-89 y actualmente los SBD son normalmente compatibles al menos con las caractersticas de SQL-89. La versin actual de la norma SQL ANSI/ISO es la norma SQL-92 y en trabajo se encuentra la SQL-3 El lenguaje tiene varios componentes:

Lenguaje de definicin de datos (LDD). El LDD de SQL proporciona ordenes para la definicin de esquemas de relacin, borrado de relaciones, creacin de ndices y modificacin de esquemas de relacin. Lenguaje interactivo de manipulacin de datos (LMD). El LMD de SQL incluye un lenguaje de consultas, basado tanto en el lgebra relacional como en el clculo relacional de tuplas. Incluye tambin ordenes para insertar, borrar y modificar tuplas de la BD. LMD incorporado. La forma incorporada de SQL se dise para el uso con lenguajes de programacin de propsito general, tales como PL/I, Cobol, Pascal, Fortran y C Definicin de vistas. El LDD de SQL incluye ordenes para la definicin de vistas. Autorizacin. el LDD de SQL incluye ordenes para la especificacin de los derechos de acceso a relaciones y vistas. Integridad. El LDD de SQL incluye ordenes para la especificacin de las ligaduras de integridad que deben satisfacer los datos almacenados en la BD. Las actualizaciones que violen las ligaduras de integridad se rechazan. Control de transacciones. SQL incluye ordenes para la especificacin de comienzo y final de transacciones. Varias implementaciones permiten tambin bloque explcito de los datos para el control de la concurrencia.

SQL I Lenguaje de definicin de datos

SQL I Lenguaje de definicin de datos

Lenguaje de Definicin de Datos Introduccin Las sentencias SELECT, INSERT y UPDATE se refieren a la manipulacin de datos de un BD. stas sentencias son parte del lenguaje de manipulacin de datos de SQL o DML (Data Manipulation Language). Las sentencias DML pueden modificar los datos almacenados en una BD pero no pueden cambiar su definicin o estructura; ninguna de stas sentencias pueden crear o suprimir tablas. Los cambios de la estructura de una BD se realizan con un conjunto de sentencias SQL denominadas DDL (Data Definition Language). Con dicha sentencia podemos realizar lo siguiente: 1. Definir y crear una nueva tabla. 2. Suprimir una tabla existente. 3. Cambiar o modificar la definicin o estructura de una tabla existente. 4. Definir o crear una tabla virtual o vista (view). 5. Establecer controles de seguridad para una BD. 6. Crear ndices (index) para realizar un acceso ms rpido a una tabla. 7. Tambin se pueden controlar donde se almacenan los datos, pudiendo variar bastante de un SGBD. Las tres sentencias bsicas del DDL son:
1. 2. 3.

CREATE: define y crea un objeto de la BD. DROP: elimina un objeto existente de la BD. ALTER: modifica la estructura de un objeto de la BD.

En un SGBD relacional se puede crear, eliminar o alterar las estructuras de las tablas de una BD, incluso mientras simultneamente proporciona acceso a la BD a sus usuarios. Esto significa que una BD relacional puede crecer y cambiar fcilmente en el tiempo. Aunque el DDL y DML son dos partes distintas del lenguaje SQL, en la mayora de los productos ambos lenguajes se entremezclan en aplicaciones de SQL programado y en sesiones de SQL interactivas. Creacin de una BD En grandes empresas el ABD es el nico responsable de la creacin de nuevas BD. En organizaciones ms pequeas, los usuarios individuales pueden tener permisos para crear sus propias BD personales, aunque lo ms normal es crear las BD centralizadamente y que luego puedan acceder usuarios individuales. En SQL Server una BD se crea de la siguiente forma: CREATE DATABASE <nombre_BD>, y luego nos pedir informacin sobre su tamao, ubicacin de ficheros,... Para borrar una BD se realiza DROP DATABASE <nombre_BD>. Creacin de una tabla Para crear una tabla en una BD se utiliza la sentencia CREATE TABLE <nombre_tabla>. Siempre antes de crear cualquier tabla hemos de decirle en que BD se va a crear. Para ello tenemos la sentencia USE <nombre_BD>. Primero se usa la BD, y luego se crea la tabla. En SQL Server siempre para ejecutar varios simultneos CREATE hemos de indicarlo con GO. La sentencia CREATE TABLE tiene la siguiente sintaxis: CREATE TABLE <nombre_tabla> (col1 tipo1 [NOT NULL] [UNIQUE] [PRIMARY KEY] [DEFAULT <valor>],... <restricciones_de_la_tabla>). Las restricciones se refieren a lo siguiente:

SQL I Lenguaje de definicin de datos

PRIMARY KEY (col1,...) FOREIGN KEY <llave_externa> REFERENCES <nom_tabla> (llave_primaria) Tambin se puede especificar en caso de que se borre o modifique que opciones tomar: [ON DELETE/UPDATE] CASCADE / SET NULL / SET DEFAULT valor / NO ACTION CHECK condicin: impone la condicin que debe cumplir cada tupla de la tabla. La condicin puede ser todo lo compleja que se quiera, incluso se pueden incluir subconsultas. Todas estas restricciones se imponen con la clusula CONSTRAINT. CREATE TABLE tabla_ejemplo (matricula INT NOT NULL, DNI VARCHAR (9) NOT NULL, Estatura DECIMAL (3,1), Activo BIT DEFAULT 1, PLUS AS estatura * 1.20, CONSTRAINT clave_tabla PRIMARY KEY (matricula), CONSTRAINT datos_dni FOREIGN KEY (dni) REFERENCES alumnos (dni), CONSTRAINT no_pasar CHECK estatura > 1.50) Crear en la BD SPJ2 las tablas proveedores2, piezas2, proyectos2 y suministros2. CREATE TABLE proveedores2 (IdS VARCHAR (3) NOT NULL, nombre VARCHAR (30) NOT NULL, status INT, ciudad VARCHAR (15), CONSTRAINT pk_s PRIMARY KEY (IdS)) GO CREATE TABLE piezas2 (IdP VARCHAR (3) NOT NULL, nombre VARCHAR (30) NOT NULL, ciudad VARCHAR (15), CONSTRAINT pk_p PRIMARY KEY (IdS)) GO CREATE TABLE proyectos2 (IdJ VARCHAR (3) NOT NULL, nombre VARCHAR (30) NOT NULL, ciudad VARCHAR (15), CONSTRAINT pk_j PRIMARY KEY (IdJ)) GO CREATE TABLE suministros2 (IdS VARCHAR (3) NOT NULL, IdP VARCHAR (3) NOT NULL, IdJ VARCHAR (3) NOT NULL, Cantidad NUMERIC (4,0), CONSTRAINT pk_spj PRIMARY KEY (IdS,IdP,IdJ) CONSTRAINT fk_s FOREIGN KEY (IdS) REFERENCES proveedores2 (IdS), CONSTRAINT fk_p FOREIGN KEY (IdP) REFERENCES piezas2 (IdP), CONSTRAINT fk_j FOREIGN KEY (IdJ) REFERENCES proyectos2 (IdJ))

SQL I Lenguaje de definicin de datos

Se pueden incluir incluso columnas calculadas. Para borrar una tabla se puede utilizar la sentencia DROP TABLE <tabla>. Creacin de ndices Un ndice (INDEX) es una estructura que proporciona un acceso rpido a las filas de una tabla en base a valores de una o ms columnas. Este realmente se puede conseguir en la creacin de tabla usando la restriccin UNIQUE: CREATE TABLE alumnos (dni VARCHAR (10) NOT NULL PRIMARY KEY, ape VARCHAR (25) NOT NULL, nombre VARHAR (12) NOT NULL, expediente VARCHAR (10) NOT NULL, CONSTRAINT indice_alumnos UNIQUE expediente) Otra forma: CREATE TABLE alumnos (dni VARCHAR (10) NOT NULL PRIMARY KEY, ape VARCHAR (25) NOT NULL, nombre VARHAR (12) NOT NULL, expediente VARCHAR (10) NOT NULL UNIQUE) La creacin de los ndices se debe hacer junto a la creacin de la estructura de las tablas, y as, evitar posibles colisiones al crear ndices y que la tabla tenga datos, pues si creamos un ndice nico por campo, y ste tiene valores no nicos, entonces la generacin del ndice dara un error. Su formato es el siguiente: CREATE [UNIQUE] INDEX <indice> ON <tabla> (columna) El ndice siempre se crea por defecto de menor a mayor y en columnas se pueden especificar ms de una columna separadas por comas. CREATE INDEX indice_nombre ON proveedores (nombre) CREATE INDEX indice_ejemplo ON alumnos (edad DESC, apellidos ASC) Si adems de nico queremos que el ndice no admita valores nulos se pondr lo siguiente: CREATE UNIQUE INDEX <indice> ON <tabla> (columna) WITH IGNORE_DUP_KEY Es una decisin del ABD el establecer los ndices oportunos para que el rendimiento de la BD no se vea afectado, pues el uso de ndices ralentiza la actualizacin de los datos. Depender pues de las consultas a realizar. Para borrar un ndice se pone la sentencia: DROP INDEX <indice>. Modificacin de la estructura de una tabla La sentencia ALTER TABLE permite realizar lo siguiente:

SQL I Lenguaje de definicin de datos

a) Aadir y eliminar una o varias columnas a una tabla. b) Cambiar el valor por defecto de una columna. c) Aadir o eliminar claves primarias, claves externas, restricciones UNIQUE y restricciones CHECK, ... Su formato es el siguiente: ALTER TABLE tabla ADD columna DROP columna ALTER columna ADD clave primaria ADD clave secundaria ADD restriccin UNIQUE ADD restriccin CHECK ALTER TABLE SPJ2 ALTER COLUMN IdS VARCHAR (4) ALTER TABLE SPJ2 ADD hora DATETIME, ADD fecha STR (dia) + / + STR (mes) + / + STR (ao) ALTER TABLE tabla DROP CONSTRAINT <restriccion> ALTER TABLE APJ2 ADD CONSTRAINT clave_nueva PRIMARY KEY (IdS, IdP, IdJ, dia, mes, ao) ALTER TABLE SPJ2 ADD CONSTRAINT no_mas_de_5000 CHECK cantidad <= 5000 Creacin de vistas (VIEW) Una vista es una tabla virtual en la BD cuyo contenido viene de una consulta. Para el usuario de la BD la vista aparece como una tabla real, con un conjunto de columnas y una fila de datos. Pero la realidad es que una vista no existe en la BD como un conjunto de valores almacenados, sino que los datos que vemos a travs de la vista son los resultados producidos por la consulta que define dicha vista. SQL crea la ilusin de la vista dndole a sta un nombre similar al nombre de cualquier tabla, y almacenando la definicin y estructura de la vista en la BD. CREATE VIEW datos_vendedores AS SELECT nombre, ciudad, region, cuota, vendedores.ventas FROM vendedores INNER JOIN oficinas ON oficina_rep = oficina CREATE VIEW piezas_rojas AS SELECT * FROM P WHERE color = rojo A las tablas que usan las vistas se les denomina tablas fuentes de la vista. Nota: una vez creada una vista se puede utilizar en una sentencia SELECT exactamente igual que en una tabla real. SELECT nombre FROM datos_vendedores WHERE ventas > cuota Para las vistas sencillas el SGBD construye cada fila sobre la marcha. Si la vista no es sencilla, entonces el SGBD construye una tabla temporal.

SQL I Lenguaje de definicin de datos

Ventajas de las vistas: Seguridad: cada usuario puede tener acceso a la BD a travs nicamente de un conjunto de vistas con los datos que el usuario est autorizado a ver restringiendo de sta forma el acceso del usuario a las datos almacenados. Simplicidad de consulta: una vista puede extraer datos de distintas tablas y presentarlos como una nica tabla y esto hace que consultas multitabla se puedan formular como consultas simples de una sola tabla con respecto a la vista. Las vistas permiten aislar a los usuarios frente a cambios que se puedan realizar de la estructura de la BD. Integridad de datos: si se introducen datos en la BD a travs de una vista, el SGBD puede comprobar automticamente los datos para asegurarse que satisfacen las restricciones de integridad especificadas. Inconvenientes de las vistas a la hora de utilizar una vista en lugar de una tabla real: Rendimiento: una vista lo que hace es crear la apariencia de una tabla, y por ello el SGBD debe traducir las consultas que se realicen en dicha vista en consultas reales a las tablas fuente, pudiendo ocurrir que se tardase mucho tiempo si la consulta fuese muy compleja. Restricciones de actualizacin: si un usuario quiere actualizar alguna fila de una vista entonces el SGBD tiene que traducir dicha peticin a una actualizacin de las filas de las tablas fuente. Esto slo es posible para vistas sencillas, y para vistas ms complejas es muy probable que no se puedan actualizar (se tratara de vistas de slo lectura). Conclusin: dependiendo de cada caso particular, el ABD decidir si se utiliza o no alguna vista. El diagrama sintctico para crear una vista es el siguiente: CREATE VIEW <vista> AS [nombre_columna,...] consulta sta sentencia asigna un nombre a la vista y especifica la consulta que define dicha vista. Para crear una vista con xito es necesario tener los permisos para acceder a todas las tablas referenciadas en la consulta. La sentencia CREATE VIEW puede asignar opcionalmente un nombre a cada columna en la vista recien creada. Si se hace es obligatorio poner el mismo nmero de elementos o columnas que las que produzca la consulta. Si se omite el nombre de las columnas de la vista cogern los de la consulta. Es obligatorio poner los nombre de las columnas de la vista si la consulta incluye columnas calculadas o si produce dos columnas con igual nombre. Bsicamente hay dos tipos de vistas, horizontales y verticales, aunque lo ms usual es definir una vista algo ms compleja donde intervienen parte horizontal y parte vertical de una o ms tablas, es decir, lo ms usual es definir una vista sobre muchas tablas (basada sobre una consulta multitabla). Vistas horizontales: se muestran ciertas filas o tuplas de una tabla. Crear una vista llamada vendedores 106 con los vendedores del director de cdigo 106. CREATE VIEW vendedores_106 AS SELECT * FROM vendedores WHERE director = 106 Crear la vista vendedores Este con los vendedores de la regin Este. CREATE VIEW vendedores_este SELECT * FROM vendedores WHERE oficina_rep IN (SELECT oficina FROM oficinas WHERE region = Este)

SQL I Lenguaje de definicin de datos

Vistas verticales: el uso de estas vistas es restringir el acceso de un usuario a solo ciertas columnas de una tabla. Crear la vista infor_ven que tenga el nmero de empleado, su nombre y la oficina de cada vendedor. CREATE VIEW infor_vend AS SELECT num_empl, nombre, oficina_rep FROM vendedores

Vistas agrupadas: son aquellas donde se incluye en la consulta una clusula GROUP BY. Las vistas agrupadas agrupan filas relacionadas de datos y producen una fila de resultados para cada grupo, resumiendo los datos de ese grupo. Crear la vista pedidos por vendedor, con los siguientes datos de pedidos sumario: cdigo del vendedor, nmero de pedidos realizados, suma de todos los importes, importe mnimo, importa mximo, media del importe. Adems la vista debe tener los siguientes nombres de columna: quien, cuntos, total, menor, mayor y medio. CREATE VIEW pedidos_por_vendedor (quien, cuantos, total, menor, mayor, medio) AS SELECT rep, COUNT (*), SUM (importe), MIN (importe), MAX (importe), AVG (importe) FROM pedidos GROUP BY rep Como podemos ver en el ejemplo, la definicin de una vista agrupada siempre incluir una una lista de nombres de columna. Una vez definida la vista se puede realizar cualquier consulta como si fuese una tabla real. Sacar el nombre, cantidad de pedidos, el importe total de pedidos, y el pedido medio para cada vendedor. SELECT nombre, cuantos, total, medio FROM pedidos_por_vendedor INNER JOIN vendedores ON quien = num_empl ORDER BY total DESC

Vistas compuestas: el motivo fundamental de utilizar vistas compuestas es simplificar las consultas multitabla en el caso de que se realicen con frecuencia un tipo o cierto tipo de consultas. Supongamos que el vicepresidente de ventas realiza frecuentes consultas sobre la tabla pedidos pero no quiere trabajar con nmero de cliente ni nmero de empleado, sino con los nombres de empleados y nombres de clientes. Quiere tener informacin del nmero de pedido, nombre del cliente, nombre del empleado y el importe. CREATE VIEW infor_pedidos AS SELECT num_pedido, empresa, nombre, importe FROM clientes INNER JOIN (pedidos INNER JOIN vendedores ON rep = num_empl) AS T ON num_clie = T.clie Posteriormente dicho vicepresidente de ventas podr saber la suma de los pedidos totales para cada empresa y para cada vendedor. SELECT vendedor, empresa, SUM (importe) FROM infor_pedidos GROUP BY nombre, empresa

Para borrar una vista usamos la sentencia DROP VIEW <nombre_vista>.

También podría gustarte