Vous êtes sur la page 1sur 258

Manual de Prcticas de la Materia: Taller de Bases de Datos de la Carrera de Ingeniera en Sistemas Computacionales (Plan 2004)

Autor: Carlos Mndez Fernndez

INTRODUCCION Este Manual de Prcticas corresponde a la Materia: Taller de Bases de Datos que forma parte del Programa de la Carrera de Ingeniera en Sistemas Computacionales del Plan 2004.

OBJETIVO GENERAL DEL MANUAL Desarrollar un Manual de Prcticas detallado de cada tema y subtema del contenido de la materia con la finalidad de que los alumnos cuenten con un recurso didctico que les permita un mejor aprendizaje de la misma.

NUMERO, NOMBRE Y OBJETIVOS ESPECIFICOS DE CADA PRACTICA Se van a desarrollar 25 prcticas. El nombre de cada una y su objetivo especfico se indica en la siguiente parte de ste documento. Cabe aclarar que se cubren todos los subtemas del Contenido de la Materia. Y adems, cuando lo amerita, se incluyen dos o ms prcticas para un mismo subtema.

CONTENIDO POR UNIDADES Y SUBTEMAS DE LA MATERIA, INTERCALANDO LAS PRACTICAS CORRESPONDIENTES UNIDAD 1: Introduccin al Sistema Manejador de Base de Datos (DBMS) Subtema 1.1 Conceptos Subtema 1.2 Caractersticas del DBMS Prctica 1: Conocimiento del ambiente de trabajo del DBMS Objetivo Especfico: El alumno conocer y comprender el ambiente de trabajo del Sistema Administrador de Bases de Datos, con la finalidad de que lo pueda utilizar para el desarrollo de todas las Prcticas de la Materia.

UNIDAD 2: Lenguaje de Definicin de Datos (DDL) Subtema 2.1 Creacin de una Base de Datos Prctica 2: Creacin y Administracin de una Base de Datos Objetivo Especfico: El alumno aplicar el SQL para crear y administrar una base de datos en el Sistema Administrador de Bases de Datos. Prctica 3: Identificacin de Tipos de Datos Objetivo Especfico: El alumno conocer, comprender y aplicar los diferentes tipos de datos del Sistema Administrador de Bases de Datos, con la finalidad de que los utilice en Bases de Datos propias.

UNIDAD 2: Lenguaje de Definicin de Datos (DDL) Subtema 2.2 Creacin de tablas Prctica 4: Creacin y Administracin de tablas Objetivo Especfico: El alumno crear y administrar tablas de datos con la finalidad de que los utilice para la creacin de sus propios esquemas de bases de datos.

UNIDAD 2: Lenguaje de Definicin de Datos (DDL) Subtema 2.3 Creacin de ndices Prctica 5: Arquitectura de ndices

Objetivo Especfico: El alumno conocer y comprender la arquitectura de la construccin de los archivos de ndices en el Sistema Administrador de Bases de Datos. Prctica 6: Creacin de ndices y administracin Objetivo Especfico: El alumno crear y administrar ndices de tablas de datos, con la finalidad de que los utilice en sus propias bases de datos. Prctica 7: Implementacin de restricciones de integridad Objetivo Especfico: El alumno conocer, comprender y aplicar la sintaxis de SQL que le permitir implementar restricciones de dominio en sus propias bases de datos.

UNIDAD 3: Consultas y Lenguaje de Manipulacin de Datos (DML) Subtema 3.1 Instrucciones INSERT, UPDATE, DELETE Prctica 8: Acceso y modificacin de datos Objetivo Especfico: El alumno conocer, comprender y aplicar la sintaxis bsica de la clusula select y la utilizar para acceder a sus bases de datos, adems, conocer, comprender y aplicar la sintaxis de las clusulas SQL: insert, update y delete; que le permitirn modificar sus bases de datos.

UNIDAD 3: Consultas y Lenguaje de Manipulacin de Datos (DML) Subtema 3.2 Consultas Bsicas SELECT, WHERE y funciones a nivel de registro Prctica 9: Consultas bsicas

Objetivo Especfico: El alumno conocer, comprender y aplicar la sintaxis completa de la clusula select y la utilizar para acceder a sus bases de datos e implementar consultas.

UNIDAD 3: Consultas y Lenguaje de Manipulacin de Datos (DML) Subtema 3.3 Consultas sobre mltiples tablas Prctica 10: Uso de tcnicas de consultas avanzadas para el acceso a datos Objetivo Especfico: El alumno conocer, comprender y aplicar la sintaxis de SQL para hacer consultas complejas que involucren varias tablas.

UNIDAD 3: Consultas y Lenguaje de Manipulacin de Datos (DML) Subtema 3.4 Agregacin GROUP BY, HAVING Prctica 11: Agrupamientos de datos Objetivo Especfico: El alumno agrupar datos de una base de datos y utilizar las herramientas de SQL para su implementacin.

UNIDAD 3: Consultas y Lenguaje de Manipulacin de Datos (DML) Subtema 3.5 Funciones de conjunto de registros:COUNT,SUM,AVG,MAX,MIN Prctica 12: Funciones agregadas en consultas simples y en agrupamientos Objetivo Especfico: El alumno aplicar las funciones agregadas para hacer consultas complejas en sus bases de datos.

UNIDAD 4: Control de Transacciones Subtema 4.1 Propiedades de una transaccin Subtema 4.2 Grados de consistencia Prctica 13: Arquitectura de transacciones y bloqueos Objetivo Especfico: El alumno conocer y comprender las herramientas de SQL para implementar transacciones, adems, conocer y comprender los conceptos de concurrencia en bases de datos.

UNIDAD 4: Control de Transacciones Subtema 4.3 Niveles de aislamiento Prctica 14: Administracin de transacciones Objetivo Especfico: El alumno aplicar las herramientas de SQL para implementar transacciones, y, administrar su procesamiento

UNIDAD 4: Control de Transacciones Subtema 4.4 Instrucciones COMMIT y ROLLBACK Prctica 15: Administracin de bloqueos Objetivo Especfico: El alumno conocer, comprender y aplicar los conceptos de bloqueos (concurrencia) en sus propias bases de datos.

UNIDAD 5: Vistas Subtema 5.1 Definicin y objetivos de las vistas

Prctica 16: Vistas: Creacin, modificacin y eliminacin Objetivo Especfico: El alumno conocer, comprender y aplicar los estatutos SQL para crear, modificar y eliminar vistas.

UNIDAD 5: Vistas Subtema 5.2 Instrucciones para la admn.. de vistas Prctica 17: Acceso a datos a travs de vistas Objetivo Especfico: El alumno conocer, comprender y aplicar los estatutos SQL para implementar conceptos de vistas complejas.

UNIDAD 6: Seguridad Subtema 6.1 Esquemas de autorizacin Prctica 18: Diseo de un Plan de Seguridad para una Base de Datos Objetivo Especfico: El alumno conocer y comprender los conceptos bsicos de seguridad en bases de datos.

UNIDAD 6: Seguridad Subtema 6.2 Instrucciones GRANT y REVOKE Prctica 19: Implementacin de la Seguridad de una base de datos y su administracin Objetivo Especfico: El alumno conocer, comprender y aplicar los estatutos

SQL para implementar y administrar la seguridad en una base de datos.

UNIDAD 7: Introduccin al SQL Procedural Subtema 7.1 Procedimientos almacenados Prctica 20: Introduccin a los procedimientos almacenados Objetivo Especfico: El alumno conocer y comprender los elementos bsicos de SQL para implementar procedimientos almacenados. Prctica 21: Procedimientos almacenados: creacin, ejecucin, modificacin y eliminacin Objetivo Especfico: El alumno conocer, comprender y aplicar los estatutos SQL necesarios para crear, ejecutar, modificar y eliminar procedimientos almacenados. Prctica 22: Programacin de procedimientos almacenados Objetivo Especfico: El alumno disear y programar procedimientos almacenados para sus propias bases de datos.

UNIDAD 7: Introduccin al SQL Procedural Subtema 7.2 Disparadores (triggers) Prctica 23: Introduccin a los disparadores Objetivo Especfico: El alumno conocer y comprender el funcionamiento de los disparadores (triggers) del SQL. Prctica 24: Disparadores: creacin y administracin

Objetivo Especfico: El alumno crear y administrar disparadores en una base de datos dada. Prctica 25: Programacin de disparadores Objetivo Especfico: El alumno aplicar los estatutos SQL necesarios para programar disparadores en una base de datos dada.

INFORMACION ACERCA DE LAS PRACTICAS El Sistema Administrador de Bases de Datos que se utiliz para realizar las Prcticas es el Microsoft SQL-Server 2000. Se utilizar una versin beta de este software con la finalidad de no adquirir licencias del mismo. Todas las Prcticas se desarrollarn utilizando la base de datos: ventas. Las reglas de negocios de la misma, y su modelo relacional se muestra mas adelante.

FORMATO DE LAS PRACTICAS Todas y cada una de las Prcticas tendrn el siguiente formato (que es el que fue definido por la DGIT): 1.- Nmero de la Prctica 2.- Nombre 3.- Objetivo 4.- Introduccin 5.- Especificar la correlacin con el o los subtemas del programa de estudio vigente 6.- Material y equipo necesario 7.- Metodologa 8.- Sugerencias didcticas 9.- Reporte del alumno (resultados) 10.- Bibliografa preliminar

INFORMACION GENERAL DE LA BASE DE DATOS Con la finalidad de que todas las Prcticas se refieran a una misma base de datos y concentrar mas la atencin en los objetivos de cada una de ellas, se opt por definir una base de datos adecuada a nuestro medio ambiente, fcil de comprender, y con reglas de negocios que son actuales y comunes a las Empresas del entorno.
10

La base de datos: ventas, es una base de datos que tiene las siguientes reglas de negocios: 1.- Se considera que se va a desarrollar un Sistema de Informacin de Facturacin en una Empresa dada que comercializa ciertos productos que vende a clientes. 2.- Se generan facturas cada una de las cuales registra: cliente, fecha y monto de la misma. En cada factura se puede aplicar un impuesto correspondiente al IVA y obteniendo as el monto neto de la misma. 3.- Cada factura puede tener varios renglones en donde se registran: nmero de factura, rengln, clave del producto vendido, unidades que se venden, costo al momento de la venta y precio de la venta. 4.- Se guarda informacin de los clientes con los datos: nombre, direccin, colonia, ciudad, estado y cdigo postal. 5.- Se guarda informacin de los productos que se van a vender, con los datos: clave del producto, descripcin del mismo, unidades en existencia, costo del producto y precio de venta. En todo caso, este es el archivo bsico de un Sistema de Inventarios. 6.- La clave del producto consta de las partes: grupo del producto (1 carcter), subgrupo del producto (1 carcter), y, tres dgitos en donde se indica el nmero del producto. En total la clave se implementa con 5 caracteres alfanumricos.

El Modelo Relacional de sta base de datos se muestra a continuacin.

11

12

CLIENTES clave_cliente (llave primaria) nombre direccion colonia ciudad estado cod_pos

FACTURAS no_factura (llave primaria) fecha_fac clave_cliente (llave fornea) monto observaciones

REN_FACTURAS no_factura (llave primaria comp.) no_renglon (llave primaria comp.) clave costo precio (llave fornea) cantidad

PRODUCTOS Clave (llave primaria) descripcion unidades costo precio

13

MODELO RELACIONAL DE LA BASE DE DATOS: ventas

14

GENERACION DE LA BASE DE DATOS: ventas Todas las prcticas hacen referencia a la base de datos: ventas, por lo que, se anexa a este Manual un CD en donde esta el script que la genera. Adems, a continuacin se muestra el mismo.

------------------------------------------------------------------------SCRIPT PARA GENERAR LA BASE DE DATOS ventas ------------------------------------------------------------------------se posiciona en la base de datos master para crear la base de datos use master --creacion de la base de datos create database ventas ------------------------------------------------------------------------se selecciona la base de datos use ventas --crea tabla de clientes create table clientes (clave_cliente nombre colonia ciudad estado cod_pos int primary key, --clave del cliente, es llave primaria --nombre del cliente --direccin --colonia --ciudad --estado --codigo postal char(40) not null, char(30), char(20), char(20), int)

direccion char(30),

--crea tabla de productos create table productos (clave char(5) primary key,

15

--clave del producto, son 5 caracteres: ---descripcion unidades costo precio

XXDDD

-- X representa un caracter, D representa un digito de 0 a 9 el primer caracter X es un tipo de producto el segundo caracter X es una subclasificacion del tipo los caracteres 3, 4 y 5 son dgitos char(25) not null, int not null, money not null, money) --descripcin del producto --cantidad en existencia --costo del producto --precio de venta del --producto

--creacion de tabla de encabezados de facturas create table facturas (no_factura fecha_fac int primary key, --numero de factura, es llave primaria datetime not null, --fecha de la factura -- clave del cliente, es llave fornea monto money not null, --monto de la factura sin iva --notas generales de la factura observaciones char(30))

clave_cliente int references clientes(clave_cliente),

--creacin de la tabla de renglones de facturas create table ren_facturas (no_factura int no_renglon clave references facturas(no_factura), -- numero de factura, es llave primaria compuesta smallint, --renglon de factura, es llave primaria compuesta char(5) references productos(clave), --clave del producto, son 5 caracteres: ---cantidad costo precio XXDDD -- X representa un caracter, D representa un digito de 0 a 9 el primer caracter X es un tipo de producto el segundo caracter X es una subclasificacion del tipo los caracteres 3, 4 y 5 son dgitos int not null, --es la cantidad en unidades que se venden money not null, --es el costo del producto money, --es el precio de venta unit. del producto sin iva

constraint restriccion1 primary key (no_factura,no_renglon)

16

--se crea la llave primaria compuesta ) ----------------------------------------------------------------------------------------------------------inserta datos en tabla clientes insert into clientes values(10,'Distribuidora de Materiales,S.A. de C.V.','Av. Juarez 110','Centro','Leon','Gto.',37200) insert into clientes values(20,'Fabrica de Mesas,S.A. de C.V.','Blvd. Morelos 1234','Loma Alta','Monterrey','N.L.',38000) insert insert insert insert insert insert insert into into into into into into into clientes clientes clientes clientes clientes clientes values(30,'Materiales Rodriguez del Centro,S.A. de C.V.','Av. Hidalgo 235','Jardines','Celaya','Gto.',39000) values(40,'Juan Gomez','Av. El Carranza de 110','Centro','Leon','Gto.',37200) values(50,'Constructora values(60,'Roberto Perez Aguila,S.A. C.V.','Av. Hidalgo 310','Laureles','Celaya','Gto.',39000) Macias','Av. La de El Juarez de 239','Campestre','Guadalajara','Jal.',40000) values(70,'Constructora values(80,'El Ancla,S.A. Arboleda,S.A. C.V.','Av. C.V.','Blvd. Lopez Mateos 234','Renacimiento','Queretaro','Qro.',41000) Madero de 387','Campestre','Leon','Gto.',37200) clientes values(90,'Electrica Faro,S.A. C.V.','Av.Javier Mina 675','Deportiva','Guadalajara','Jal.',40000) insert into clientes values(100,'Fabrica de Tabiques,S.A. de C.V.','Av. Corregidora 456','Centro','Leon','Gto.',37200) --select * from clientes --inserta datos en tabla productos insert into productos values('MM100','Mesa',200,350.00,600.00) insert into productos values('HP200','Martillo',150,35.00,60.00) insert into productos values('MM300','Silla',250,45.00,70.00) insert into productos values('CM400','Costal de cemento',300,35.00,56.00) insert into productos values('CM500','Costal de cal',200,38.00,60.00) insert into productos values('HP600','Serrucho',205,80.00,120.00)

17

insert into productos values('CP700','Varilla de 20',210,25.00,35.00) insert into productos values('CP800','Varilla de 30',235,35.00,65.00) insert into productos values('EM900','Enchufe electrico',20,20.00,30.00) insert into productos values('EM950','Cable de 2',290,8.00,16.00) insert into productos values('MM110','Cuadro',260,50.00,90.00) insert into productos values('CL120','Lazo de 2 m',340,3.00,6.00) insert into productos values('CM120','Lazo de 10 m',340,400.00,700.00) insert into productos values('CL130','Lazo de 3 m',390,3.50,7.45) insert into productos values('CP140','Bomba',70,25.00,45.00) insert into productos values('MH150','Caja de clavos',870,55.00,76.00) insert into productos values('MH160','Caja de tornillos',467,35.00,60.00) insert into productos values('MH170','Pegamento',360,75.00,100.00) insert into productos values('MH180','Aceite',190,23.00,38.00) insert into productos values('HP190','Escalera',45,350.00,460.00) insert into productos values('MM200','Banco',248,28.00,42.00) --select * from productos --inserta datos en table facturas insert insert insert insert insert insert insert insert insert into into into into into into into into into facturas facturas facturas facturas facturas facturas facturas facturas facturas values(1001,'2006-05-25', values(1002,'2006-05-28', values(1003,'2006-06-15', values(1004,'2006-06-20', values(1005,'2006-09-10', values(1006,'2006-10-10', values(1007,'2006-11-10', values(1008,'2006-11-20', values(1009,'2006-12-15', 50,6728.00,'Pago 40,1588.00,'Pago 30,58.35,'Pago 50,4848.00,'Pago 80,3380.00,'Pago 30,3468.00,'Pago 60,192.85,'Pago 100,1632.00,'Pago 50,6480.00,'Pago de a a a de de a a a contado') credito') credito') credito') contado') contado') credito') credito')

18

credito') insert into facturas values(1010,'2006-12-15', 30,170.50,'Pago de contado') --select * from facturas --inserta datos en table renglones de facturas insert into ren_facturas values(1001,1,'MM100',10,350.00,600.00) insert into ren_facturas values(1001,2,'MM300',8,45.00,70.00) insert into ren_facturas values(1001,3,'MM200',4,28.00,42.00) insert into ren_facturas values(1002,1,'MH150',8,55.00,76.00) insert into ren_facturas values(1002,2,'MH170',6,75.00,100.00) insert into ren_facturas values(1002,3,'MH180',10,23.00,38.00) insert into ren_facturas values(1003,1,'CL130',3,3.50,7.45) insert into ren_facturas values(1003,2,'CL120',6,3.00,6.00) insert into ren_facturas values(1004,1,'MM100',5,350.00,600.00) insert into ren_facturas values(1004,2,'MM300',18,45.00,70.00) insert into ren_facturas values(1004,3,'MM200',14,28.00,42.00) insert into ren_facturas values(1005,1,'HP190',5,350.00,460.00) insert into ren_facturas values(1005,2,'HP600',9,80.00,120.00) insert into ren_facturas values(1006,1,'MM100',2,350.00,600.00) insert into ren_facturas values(1006,2,'MM300',18,45.00,70.00) insert into ren_facturas values(1006,3,'MM200',24,28.00,42.00) insert into ren_facturas values(1007,1,'CL130',13,3.50,7.45) insert into ren_facturas values(1007,2,'CL120',16,3.00,6.00) insert into ren_facturas values(1008,1,'MH150',7,55.00,76.00) insert into ren_facturas values(1008,2,'MH170',11,75.00,100.00) insert into ren_facturas values(1009,1,'MM100',8,350.00,600.00) insert into ren_facturas values(1009,2,'MM300',12,45.00,70.00) insert into ren_facturas values(1009,3,'MM200',20,28.00,42.00) insert into ren_facturas values(1010,1,'CL130',10,3.50,7.45) insert into ren_facturas values(1010,2,'CL120',16,3.00,6.00) --select * from ren_facturas

19

INFORMACION QUE SE INCLUYE EN EL CD QUE ACOMPAA ESTE MANUAL Con la finalidad de que los alumnos cuenten con todas las herramientas necesarias para realizar los ejercicios includos en todas y cada una de las Prcticas de ste Manual, a continuacin se enlista los contenidos del CD que acompaa al mismo. 1.- Script SQL para implementar la base de datos ventas. 2.- Versin electrnica de ste Manual 3.- Versin electrnica de la Referencia Bibliogrfica MCSE Microsoft SQL-Server 2000 Database Design and Implementation Training Kit Microsoft Press 4.- Versin electrnica de la Referencia Bibliogrfica The Practical SQL Handbook Using SQL Variants Fourth Edition Judith S. Bowman, Sandra L. Emerson, Marcy Darnovsky Addison Wesley 5.- Versin electrnica de la Referencia Bibliogrfica MCSE Microsoft SQL-Server 2000 System Administration Training Kit Microsoft Press

20

Nmero de Prctica: 1 Nombre de la Prctica: Conocimiento del ambiente de trabajo del DBMS

Objetivo Especfico: El alumno conocer y comprender el ambiente de trabajo del Sistema Administrador de Bases de Datos (DBMS), con la finalidad de que lo pueda utilizar para el desarrollo de todas las Prcticas de la Materia.

Introduccin: En general, los actuales Sistemas Administradores de Bases de Datos son una solucin de bases de datos y de anlisis completa, soportan comercio electrnico, negocios y aplicaciones de bodegas de datos. Soportan escalabilidad, XML, desempeo y disponibilidad, administracin avanzada y caractersticas de un lenguaje de programacin. Adems, tienen herramientas para automatizacin de tareas. Estas caractersticas son comunes a Sistemas existentes bajo distintas plataformas: Unix, Linux, Windows, MacOs, etc. Los Sistemas Administradores de Bases de Datos lderes en la actualidad son: Oracle y Microsoft SQL-Server. Hay otras marcas en el mercado como: Sybase, y DB2. Por el lado de Software libre existen: Postgress, PointBase, MySql, etc.

Correlacin con el /los subtemas del Programa de Estudio Vigente: Esta prctica va dirigida a tratar los subtemas relacionados con la UNIDAD 1: Introduccin al Sistema Manejador de Base de Datos (DBMS)

21

Los subtemas tratados son: Subtema 1.1 Conceptos Subtema 1.2 Caractersticas del DBMS www.cenam.gob.mx Material y Equipo Necesario: Para realizar la Prctica es necesario contar con el siguiente hardware y software: Computadora Personal Sistema Operativo XP Sistema Administrador de Bases de Datos: Microsoft SQL-Server 2000 CD que acompaa a este Manual

Metodologa: Ejercicio: Conocimiento del Ambiente de Trabajo 1.- El Maestro explicar los conceptos: bases de datos, bases de datos relacionales, SQL, XML, escalabilidad, bodegas de datos, 2.- El Maestro explicar el proceso de instalacin del SQL-Server (se sugiere instalarlo en alguna computadora y que los alumnos sigan el proceso). 3.- El Maestro explicar las caractersticas de las diferentes versiones del SQLServer. 4.- El Maestro explicar el Analizador de Consultas SQL (SQL Query Analyzer), describiendo todos y cada uno de los elementos que lo constituyen

22

5.- El alumno investigar el concepto de motor de bases de datos, utilizando la bibliografa anexa (referencia A, captulo 1, lecciones 1,2 y 3). 6.- El alumno investigar el concepto de replicacin de bases de datos, utilizando la bibliografa anexa (referencia A, captulo 1, lecciones 1,2 y 3). 7.- El alumno investigar el concepto de Servicios de Transformacin de Datos (DTS), utilizando la bibliografa anexa (referencia A, captulo 1, lecciones 1,2 y 3). 8.- El alumno investigar el concepto de Servicios de Anlisis (Anlisis Services), utilizando la bibliografa anexa (referencia A, captulo 1, lecciones 1,2 y 3). 9.- El alumno investigar el concepto de Administrador Empresarial de SQLServer (SQL Enterprise Manager), utilizando la bibliografa anexa (referencia A, captulo 1, lecciones 1,2 y 3). 10.- El alumno investigar el concepto de Agente de Servidor SQL (SQL Server Agent), utilizando la bibliografa anexa (referencia A, captulo 1, lecciones 1,2 y 3). 11.- El alumno investigar el concepto de Utilidad de Red del Cliente SQLServer, utilizando la bibliografa anexa (referencia A, captulo 1, lecciones 1,2 y 3). 12.- El alumno investigar el concepto de Utilidad de Red SQL-Server, utilizando la bibliografa anexa (referencia A, captulo 1, lecciones 1,2 y 3). 13.- El alumno investigar el concepto de Administrador de Servicios SQLServer (SQL-Server Service Manager), utilizando la bibliografa anexa (referencia A, captulo 1, lecciones 1,2 y 3). 14.- El alumno investigar el concepto de Analizador de Consultas de SQL (SQL Query Analyzer), utilizando la bibliografa anexa (referencia A, captulo 1,

23

lecciones 1,2 y 3).

Sugerencias Didcticas: Se sugiere que el Maestro realice las acciones: 1.- Verificacin de la instalacin en cada Computadora del Sistema Administrador de Bases de Datos y la versin electrnica de ste Manual. 2.- Se sugiere que cada alumno cuente con su propia computadora personal con la finalidad de que realice todos los ejercicios personalmente. 3.- Se sugiere que el Maestro haga una induccin sobre el tema de la Prctica indicando los objetivos de aprendizaje que se obtendrn al realizarla. 4.- Se sugiere que los alumnos abran el Sistema Administrador de Bases de Datos, y, este Manual (de preferencia en forma electrnica); con la finalidad de que vayan conociendo los elementos que lo integran. 5.- Se sugiere que el Maestro asesore a sus Alumnos durante el proceso de realizacin de la Prctica, logrando as una atencin personalizada. 6.- Se sugiere que el Maestro indique a los alumnos que para evaluar la Prctica enven a su correo electrnico (o le entreguen de manera impresa), la parte del Reporte del Alumno (resultados). Indicando el nmero de la Prctica y el nombre del alumno. 7.- Se sugiere que el Maestro evale los resultados obtenidos en la Prctica y registre una calificacin de la misma, tomndola en cuenta en el proceso de evaluacin que haya definido. Reporte del alumno (resultados): En sta parte el alumno registrar los resultados de cada uno de los ejercicios

24

de la Prctica, indicando a qu parte de la Prctica corresponde. El alumno escribir en esta seccin los resultados de los puntos 5 a 14, especificados en la parte Metodologa, indicando el nmero de cada punto que se est reportando.

Bibliografa preliminar: REFERENCIA A MCSE Microsoft SQL-Server 2000 Database Design and Implementation Training Kit Microsoft Press

REFERENCIA B The Practical SQL Handbook Using SQL Variants Fourth Edtion Judith S. Bowman, Sandra L. Emerson, Marcy Darnovsky Addison Wesley

25

Nmero de Prctica: 2 Nombre de la Prctica: Creacin y Administracin de una Base de Datos Objetivo Especfico: El alumno aplicar el SQL para crear y administrar una base de datos en el Sistema Administrador de Bases de Datos. Introduccin: Lo primero que hay que hacer es crear el objeto base de datos. Fundamentndose en el modelo relacional obtenido en el diseo de la base de datos, podemos crearlo y definir sus caractersticas. Estas se pueden modificar despus de haber sido creada la base de datos. Se debe determinar el nombre de la base de datos, su tamao, y los archivos y grupos de archivos que se utilizarn para almacenarla. Hay 3 tipos de archivos que se deben crear: archivo primario (que contiene la informacin inicial de la base de datos), archivos secundarios (que guardan la informacin que no cabe en el archivo primario), y, el archivo de transacciones (que contiene la informacin de transacciones que se puede usar para el proceso de recuperacin de la base de datos). Cada base de datos tiene al menos dos archivos: el primario y el de transacciones (log). Consulte la Referencia A, captulo 4, leccin 1

Correlacin con el /los subtemas del Programa de Estudio Vigente: Esta prctica va dirigida a tratar los subtemas relacionados con la UNIDAD 2: Lenguaje de Definicin de Datos (DDL)

26

Los subtemas tratados son: Subtema 2.1 Creacin de una Base de Datos

Material y Equipo Necesario: Para realizar la Prctica es necesario contar con el siguiente hardware y software: Computadora Personal Sistema Operativo XP Sistema Administrador de Bases de Datos: Microsoft SQL-Server 2000 CD que acompaa a este Manual

Metodologa: Ejercicio 1: Creacin de una base de datos con valores de default Se utiliza el estatuto create database para crear la base de datos 1.- Abra el Query Analyzer y conctese a su servidor de datos 2.- Posicinese en la base de datos master (seleccionndola en la parte superior central de la pantalla) 3.- Inserte el cdigo y ejectelo
create database prueba1

4.- Este estatuto crea la base de datos prueba1 dndole al archivo de datos y al de transaccin los valores de tamao de default.

27

Ejercicio 2: Creacin de una base de datos con detalle Se utiliza el estatuto create database para crear la base de datos 1.- Abra el Query Analyzer y conctese a su servidor de datos 2.- Si la ventana Object Browser est abierta, hay que cerrarla 3.- Inserte el siguiente cdigo (todava no lo ejecute)
use master create database prueba2

Nota: Todas las bases de datos se deben crear desde la base de datos master (que administra a todas). El estatuto use sirve para posicionarse en la base de datos indicada. 4.- Abajo del cdigo anterior, inserte el siguiente (todava no lo ejecute):
on primary ( name = prueba2_dat, filename = 'C:\prueba2.mdf', size = 6, maxsize = 8, filegrowth = 2 )

Nota: Aqu se define el archivo primario con los datos de nombre (name), ruta en donde se crear (filename,puede ser cambiada), el tamao inicial en Mb. (size), el tamao mximo al que llegar (maxsize), y, la razn de crecimiento del mismo (filegrowth). Esto es, que cuando el tamao del archivo se rebasa, se incrementa automticamente en un tamao que corresponde al indicado.

28

5.- Abajo del cdigo anterior, inserte el siguiente (todava no lo ejecute):


log on ( name = prueba2_log, filename = 'C:\prueba2.ldf', size = 3, maxsize = 4, filegrowth = 1 )

Nota: Este cdigo define el archivo de transacciones log con los datos de nombre (name), ruta en donde se crear (filename, puede ser cambiada), el tamao inicial en Mb. (size), el tamao mximo al que llegar (maxsize), y, la razn de crecimiento del mismo (filegrowth), que indica que cuando el tamao del archivo se rebasa, se incrementa en el tamao indicado. En ste ejemplo se crea la base de datos en la ruta c:\, con la finalidad de que en cualquier computadora se pueda generar. Usualmente, no se crea ah sino en la ruta:
'C:\Program Files\Microsoft SQL Server\MSSQL\Data

o en su equivalente en Sistemas operativos en espaol. 6.- Ejecute todo el script como si fuera un estatuto (iluminando todo el texto y ejecutndolo) Se usa el comando drop database para eliminar una base de datos 7.- Lo primero que hay que hacer es asegurarse que est posicionado en la base de datos master, despus ejecute el siguiente cdigo:
drop database prueba2

29

Nota: Este estatuto elimina la base de datos completa (es decir, se eliminan los archivos que la conforman) 8.- Cierre el Query Analyzer

Sugerencias Didcticas: Se sugiere que el Maestro realice las acciones: 1.- Verificacin de la instalacin en cada Computadora del Sistema Administrador de Bases de Datos y la versin electrnica de ste Manual. 2.- Se sugiere que cada alumno cuente con su propia computadora personal con la finalidad de que realice todos los ejercicios personalmente. 3.- Se sugiere que el Maestro haga una induccin sobre el tema de la Prctica indicando los objetivos de aprendizaje que se obtendrn al realizarla. 4.- Se sugiere que los alumnos abran el Sistema Administrador de Bases de Datos, y, este Manual (de preferencia en forma electrnica); con la finalidad de que vayan realizando los ejercicios copiando y pegando los scripts SQL, ejecutndolos y copiando y pegando los resultados de cada uno en la parte de Reporte del Alumno. 5.- Se sugiere que el Maestro asesore a sus Alumnos durante el proceso de realizacin de la Prctica, logrando as una atencin personalizada. 6.- Se sugiere que el Maestro indique a los alumnos que para evaluar la Prctica enven a su correo electrnico (o le entreguen de manera impresa), la parte del Reporte del Alumno (resultados). Indicando el nmero de la Prctica y el nombre del alumno. 7.- Se sugiere que el Maestro evale los resultados obtenidos en la Prctica y

30

registre una calificacin de la misma, tomndola en cuenta en el proceso de evaluacin que haya definido. 8.- Se sugiere que el Maestro indique a los alumnos cmo se debe editar un comando SQL y como ejecutarlo. Asimismo, como copiar y pegar los resultados en la parte de Reporte del Alumno (resultados), todo esto con la finalidad de que los alumnos entiendan el proceso de ejecucin y resultados que deben realizar en todas las prcticas de ste Manual

Reporte del alumno (resultados): En sta parte el alumno registrar los resultados de cada uno de los ejercicios de la Prctica, indicando a qu parte de la Prctica corresponde. El alumno escribir en esta seccin los resultados del Ejercicio 1 puntos 1 a 4, y, del Ejercicio 2 puntos 1 a 8, especificados en la parte Metodologa, indicando el nmero de cada punto que se est reportando.

Bibliografa preliminar: REFERENCIA A MCSE Microsoft SQL-Server 2000 Database Design and Implementation Training Kit Microsoft Press

REFERENCIA B The Practical SQL Handbook Using SQL Variants

31

Fourth Edtion Judith S. Bowman, Sandra L. Emerson, Marcy Darnovsky Addison Wesley

32

Nmero de Prctica: 3 Nombre de la Prctica: Identificacin de Tipos de Datos Objetivo Especfico: El alumno conocer, comprender y aplicar los diferentes tipos de datos del Sistema Administrador de Bases de Datos, con la finalidad de que los utilice en Bases de Datos propias. Introduccin: Ya que ha sido creada la base de datos, se pueden crear las tablas de la misma, para hacerlo, se deben identificar los tipos de datos de cada una de las columnas de las mismas. Un tipo de datos es un atributo que especifica qu tipo de datos se puede almacenar en una columna de una tabla, un parmetro de un procedimiento o funcin, o, una variable. SQL proporciona un conjunto de tipo de datos, y adems, el usuario puede crear los propios. Esto es, es factible crear tipos definidos por el usuario. Los siguientes objetos tienen tipos de datos: Columnas en tablas Columnas en vistas Procedimientos almacenados que tienen parmetros con cierto tipo Variables Funciones que reciben parmetros de un tipo dado y que devuelven uno o mas valores de un tipo dado Procedimientos almacenados que devuelven un valor que siempre es de tipo entero.

Correlacin con el /los subtemas del Programa de Estudio Vigente:

33

Esta prctica va dirigida a tratar los subtemas relacionados con la UNIDAD 2: Lenguaje de Definicin de Datos (DDL) Los subtemas tratados son: Subtema 2.1 Creacin de una Base de Datos

Material y Equipo Necesario: Para realizar la Prctica es necesario contar con el siguiente hardware y software: Computadora Personal Sistema Operativo XP Sistema Administrador de Bases de Datos: Microsoft SQL-Server 2000 CD que acompaa a este Manual

Metodologa: Ejercicio 1: Estudio de los tipos de datos 1.- El alumno consultar la bibliografa indicada como Referencia A, especficamente en la leccin 2 del captulo 4. Analizar y estudiar la tabla con fondo gris en donde se especifican los tipos de datos y sus caractersticas. Ejercicio 2: Tipos de datos en tablas 1.- Abra SQL Enterprise Manager 2.- Expanda el rbol de la consola hasta que se visualice la lista de objetos en la base de datos ventas.

34

3.- Haga clic en el nodo Tables listado bajo el nodo Ventas. Aparece una lista de tablas. 4.- Haga clic derecho en la tabla Facturas, y, despus haga clic en Properties, y, aparece la caja de dilogo titulada Table Properties-Facturas. 5.- Revise las columnas y sus tipos de datos, note que el tamao de cada columna se enlista a la derecha del tipo de datos. 6.- Cierre la caja de dilogo titulada Table Properties-Facturas. 7.- Repita el proceso anterior para las tablas: clientes, ren_facturas y productos.

Sugerencias Didcticas: Se sugiere que el Maestro realice las acciones: 1.- Verificacin de la instalacin en cada Computadora del Sistema Administrador de Bases de Datos y la versin electrnica de ste Manual. 2.- Se sugiere que cada alumno cuente con su propia computadora personal con la finalidad de que realice todos los ejercicios personalmente. 3.- Se sugiere que el Maestro haga una induccin sobre el tema de la Prctica indicando los objetivos de aprendizaje que se obtendrn al realizarla. 4.- Se sugiere que los alumnos abran el Sistema Administrador de Bases de Datos, y, este Manual (de preferencia en forma electrnica); con la finalidad de que vayan realizando los ejercicios copiando y pegando los scripts SQL, ejecutndolos y copiando y pegando los resultados de cada uno en la parte de Reporte del Alumno. 5.- Se sugiere que el Maestro asesore a sus Alumnos durante el proceso de realizacin de la Prctica, logrando as una atencin personalizada.

35

6.- Se sugiere que el Maestro indique a los alumnos que para evaluar la Prctica enven a su correo electrnico (o le entreguen de manera impresa), la parte del Reporte del Alumno (resultados). Indicando el nmero de la Prctica y el nombre del alumno. 7.- Se sugiere que el Maestro evale los resultados obtenidos en la Prctica y registre una calificacin de la misma, tomndola en cuenta en el proceso de evaluacin que haya definido. 8.- Se sugiere que el Maestro indique a los alumnos cmo se debe editar un comando SQL y como ejecutarlo. Asimismo, como copiar y pegar los resultados en la parte de Reporte del Alumno (resultados), todo esto con la finalidad de que los alumnos entiendan el proceso de ejecucin y resultados que deben realizar en todas las prcticas de ste Manual

Reporte del alumno (resultados): En sta parte el alumno registrar los resultados de cada uno de los ejercicios de la Prctica, indicando a qu parte de la Prctica corresponde. El alumno escribir en esta seccin los resultados del ejercicio 1 punto 1, y, del ejercicio 2 puntos 1 a 7, especificados en la parte Metodologa, indicando el nmero de cada punto que se est reportando.

Bibliografa preliminar: REFERENCIA A MCSE Microsoft SQL-Server 2000 Database Design and Implementation

36

Training Kit Microsoft Press

REFERENCIA B The Practical SQL Handbook Using SQL Variants Fourth Edtion Judith S. Bowman, Sandra L. Emerson, Marcy Darnovsky Addison Wesley

37

Nmero de Prctica: 4 Nombre de la Prctica: Creacin y Administracin de tablas Objetivo Especfico: El alumno crear y administrar tablas de datos con la finalidad de que los utilice para la creacin de sus propios esquemas de bases de datos. Introduccin: Una vez que se ha creado la base de datos y que se tienen definidos los tipos de datos, ya se pueden crear las tablas que almacenarn los datos. Cuando se crea una tabla hay que especificar: nombre de la tabla, nombre de las columnas, tipos de datos de las mismas, y, restricciones de dominio (si hay). Estos elementos pueden ser actualizados una vez que ya ha sido creada la base de datos. Valores Nulos Esta es una propiedad que afecta a una columna, determina si las filas en la tabla pueden contener o no un valor nulo. Un valor nulo no es lo mismo que cero o blanco, o, cadena de longitud cero. Un nulo indica que no se ha capturado nada, y en todo caso, es un valor desconocido o indefinido. En general, hay que evitar valores nulos debido a que provocan que las consultas/actualizaciones sean ms complejas. Las columnas definidas como llaves primarias o que tengan la propiedad identity no pueden contener nulos. Se puede definir si una columna soporta o no valores nulos calificando a la columna despus de su definicin, con las palabras null o not null. Autonumeracin y columnas identificadoras Una tabla puede tener solo una columna con la propiedad identity que permite que se incremente su valor en cierto incremento cada vez que se inserta una fila en la tabla. Ejemplo: clave integer identity (100,5), indica que la columna llamada clave va a ser entera y su valor inicial sera de 100, y, cada vez que se inserte una fila se incrementar en 5, esto es, la segunda fila tendr el valor 105, y asi sucesivamente. Por lo anterior la columna no puede tener valores duplicados en cada fila.

38

Identificador nico y global La propiedad identity garantiza valores nicos en la misma tabla. Pero, si se desea tener identificadores nicos y globales, use la propiedad rowguidcol, el tipo de datos uniqueidentifier, o, la funcin newid. Ejemplo: clave uniqueidentifier default newid() not null, crea una columna con un valor nico y global que por default genera un nmero distinto con dichas caractersticas. Ver leccin 3, capitulo 4 de la referencia A. Una tabla se puede crear de 3 maneras: con el estatuto create table de SQL, con el SQL Enterprise Manager, y, con el Diseador de bases de datos (que se accede a travs del anterior). Ver leccin 3, captulo 4 de la referencia A. Administracin de tablas Una vez que se ha creado una tabla, se puede ver la informacin de la tabla, modificar las caractersticas de la tabla, o, eliminar la tabla de la base de datos. Para renombrar una tabla use el procedimiento almacenado de biblioteca sp_rename, para cambiar el nombre del propietario de una tabla use el procedimiento almacenado sp_changeobjectowner, para modificar las propiedades de una columna use el estatuto alter table, y, para renombrar una columna de una tabla use el procedimiento almacenado sp_rename. Ver leccin 3, captulo 4 de la referencia A..

Correlacin con el /los subtemas del Programa de Estudio Vigente: Esta prctica va dirigida a tratar los subtemas relacionados con la UNIDAD 2: Lenguaje de Definicin de Datos (DDL) Los subtemas tratados son: Subtema 2.2 Creacin de tablas

39

Material y Equipo Necesario: Para realizar la Prctica es necesario contar con el siguiente hardware y software: Computadora Personal Sistema Operativo XP Sistema Administrador de Bases de Datos: Microsoft SQL-Server 2000 CD que acompaa a este Manual

Metodologa: Ejercicio 1: Creacin y administracin de tablas 1.- Abra el Query Analyzer y conctese a su servidor de datos 2.- Edite el siguiente script
use ventas create table autores ( claveID smallint identity(1001,1) primary key not null, nombre varchar(25) not null default 'no capturado', apellido varchar(30) not null, anno_nacimiento char(4) not null default ' NO ', anno_deceso char(4) not null default ' NO ', descripcion varchar(100) not null default 'NO HAY' )

Observe que la palabra reservada default asigna los valores estableciodos en caso de que no se capture algo en la columna correspondiente.

40

3.- Ejecute el script anterior 4.- Abra el SQL Enterprise Manager y expanda el rbol de la consola de tal manera que se vean los objetos de la base de datos ventas. 5.- Haga clic en el nodo Tables y note que la tabla autores aparece en la lista 6.- Haga clic derecho en la tabla autores y luego clic en properties, La caja de dilogo Table Properties-autores aparece. 7.- Visualice las propiedades de la tabla autores. Note los nombres de columnas, tipos de datos, tamaos y valores de default. 8.- Posicinese en el SQL Enterprise Manager. 9.- Haga clic en el botn refresh de la barra de herramientas. Con esto aparecer la tabla nueva que acaba de crear. 10.- Abra las propiedades de otras tablas y observe los nombres de columnas, tipos de datos, tamaos y valores de default. 11.- Cierre las propiedades. 12.- Estando en Query Analyzer puede guardar el script con el que cre la tabla. Esto le puede servir en el futuro. Nota: se sugiere que el alumno repita las operaciones anteriores creando nuevas tablas. 13.- Cierre el Query Analyzer y el SQL Enterprise Manager.

Sugerencias Didcticas: Se sugiere que el Maestro realice las acciones:

41

1.- Verificacin de la instalacin en cada Computadora del Sistema Administrador de Bases de Datos y la versin electrnica de ste Manual. 2.- Se sugiere que cada alumno cuente con su propia computadora personal con la finalidad de que realice todos los ejercicios personalmente. 3.- Se sugiere que el Maestro haga una induccin sobre el tema de la Prctica indicando los objetivos de aprendizaje que se obtendrn al realizarla. 4.- Se sugiere que los alumnos abran el Sistema Administrador de Bases de Datos, y, este Manual (de preferencia en forma electrnica); con la finalidad de que vayan realizando los ejercicios copiando y pegando los scripts SQL, ejecutndolos y copiando y pegando los resultados de cada uno en la parte de Reporte del Alumno. 5.- Se sugiere que el Maestro asesore a sus Alumnos durante el proceso de realizacin de la Prctica, logrando as una atencin personalizada. 6.- Se sugiere que el Maestro indique a los alumnos que para evaluar la Prctica enven a su correo electrnico (o le entreguen de manera impresa), la parte del Reporte del Alumno (resultados). Indicando el nmero de la Prctica y el nombre del alumno. 7.- Se sugiere que el Maestro evale los resultados obtenidos en la Prctica y registre una calificacin de la misma, tomndola en cuenta en el proceso de evaluacin que haya definido. 8.- Se sugiere que el Maestro indique a los alumnos cmo se debe editar un comando SQL y como ejecutarlo. Asimismo, como copiar y pegar los resultados en la parte de Reporte del Alumno (resultados), todo esto con la finalidad de que los alumnos entiendan el proceso de ejecucin y resultados que deben realizar en todas las prcticas de ste Manual

42

Reporte del alumno (resultados): En sta parte el alumno registrar los resultados de cada uno de los ejercicios de la Prctica, indicando a qu parte de la Prctica corresponde. El alumno escribir en esta seccin los resultados del ejercicio 1, puntos 1 a 13, especificados en la parte Metodologa, indicando el nmero de cada punto que se est reportando.

Bibliografa preliminar: REFERENCIA A MCSE Microsoft SQL-Server 2000 Database Design and Implementation Training Kit Microsoft Press

REFERENCIA B The Practical SQL Handbook Using SQL Variants Fourth Edtion Judith S. Bowman, Sandra L. Emerson, Marcy Darnovsky Addison Wesley

43

Nmero de Prctica: 5 Nombre de la Prctica: Arquitectura de ndices Objetivo Especfico: El alumno conocer y comprender la arquitectura de la construccin de los archivos de ndices en el Sistema Administrador de Bases de Datos.

Introduccin: De acuerdo con la teora de Estructuras de Datos, en una tabla dada, se puede crear un ndice con la finalidad de facilitar el rpido retorno de resultados de consultas que se hagan sobre la misma. Hay 2 tipos de ndices que se pueden crear: clustered y nonclustered. Los ndices se puede crear en una o ms columnas en una tabla o en una vista. Las caractersticas de un ndice incide en el uso de los recursos del sistema y en el desempeo de las bsquedas. Los ndices clustered y los nonclustered se estructuran como rboles B+. Un ndice clustered contiene registros de tablas en el nivel de hojas del rbol B+, un ndice nonclustered contiene un apuntador a los registros de tabla en el nivel de la hoja. Si existe un ndice clustered en una tabla, el ndice nonclustered lo utiliza para facilitar la bsqueda de datos. Por lo general, hay que crear un ndice clustered en una tabla antes de crear uno nonclustered. Indice clustered.- Solamente puede haber uno por tabla, esto se debe a que la clave de este ndice fsicamente ordena la tabla o vista, Es eficiente para consultas, debido a que los registros de datos se almacenan en el nivel de hoja del rbol B+. El ordenamiento y la localizacin del almacenaje en ste ndice es anlogo a un diccionario en el cual las palabras del diccionario estn ordenadas alfabticamente y las definiciones aparecen junto a las palabras. Cuando se crea una llave primaria en una tabla que no contiene un ndice clustered, SQL-Server utilizar la columna llave para la llave del ndice clustered. Si un ndice clustered ya existe en una tabla, se crea uno nonclustered en la columna definida como llave primaria. Una columna definida como unique, automticamente crea un

44

ndice nonclustered. Indice nonclustered.- Es anlogo a un ndice en la parte de atrs de un libro, se puede usar para localizar pginas que uno desea. La base de datos usa ndices nonclustered para localizar registros. Caractersticas de un ndice.- Un ndice puede ser: nico (valores duplicados no se permiten), compuesto de varias columnas, con un factor de llenado (fill factor, las pginas del ndice crecen cuando sea necesario), con un ndice pad (para cambiar el espacio permitido a niveles intermedios del rbol B+), con un ordenamiento que puede ser ascendente o descendente. Consulte la referencia A, captulo 11, leccin 1

Correlacin con el /los subtemas del Programa de Estudio Vigente: Esta prctica va dirigida a tratar los subtemas relacionados con la UNIDAD 2: Lenguaje de Definicin de Datos (DDL) Los subtemas tratados son: Subtema 2.3 Creacin de ndices

Material y Equipo Necesario: Para realizar la Prctica es necesario contar con el siguiente hardware y software: Computadora Personal Sistema Operativo XP Sistema Administrador de Bases de Datos: Microsoft SQL-Server 2000

45

CD que acompaa a este Manual

Metodologa: Ejercicio 1: Conceptos Generales 1.- El alumno investigar el propsito y la estructura de ndices utilizando la referencia A, en el captulo 11 leccin 1, y, la referencia C. 2.- El alumno investigar los tipos de ndices clustered y nonclustered, utilizando la referencia A, en el captulo 11 leccin 1, , y, la referencia C. 3.- El alumno investigar los caractersticas de ndices, utilizando la referencia A, en el captulo 11 leccin 1, , y, la referencia C. 4.- El alumno investigar cmo consultar la informacin de ndices, utilizando la referencia A, en el captulo 11 leccin 1, , y, la referencia C. Ejercicio 2: Visualizacin de propiedades y uso de ndices. 1.- Abra el Query Analyzer y conctese a su servidor de datos. 2.- Use el editor, teclee y ejecute el script
use ventas sp_helpindex ren_facturas

3.- Hay un ndice compuesto? Si es as explquelo. 4.- Estando en el Query Analyzer, haga clic en Query y clic en Show Execution Plan (Muestre el Plan de ejecucin). El Optimizador del Sistema Administrador de Bases de Datos busca la mejor manera de ejecutar una consulta dada en base a los metadatos de que dispone.

46

5.- En el Editor escriba el siguiente script:


use ventas select * from clientes

Aparece un conjunto resultado en la pestaa Grids de la ventana Results, note que el resultado est ordenado por la columna clave_cliente, esto se debe a que hay un ndice creado en esta columna (es la llave primaria) 6.- Haga clic en la pestaa Execution Plan Aparece el Plan de Ejecucin de la consulta que determino el Optimizador de Consultas. Ejercicio 3: Creacin de ndice compuesto 1.- Estando desplegado en pantalla el Plan de Ejecucin del punto 6 del Ejercicio anterior, haga un clic derecha al icono: clientes.PK_cl, y, haga clic en Manage Indexes. Ah aparecen todos los ndices creados en la tabla clientes, en este caso solamente uno. 2.- Haga clic en botn New. Aparece la caja de dilogo Create New Index. En el cuadro de texto Index Name, ponga el nombre del ndice que se va a crear en este ejemplo ponga: direccion_completa. 3.- En la columna que aparece abajo del cuadro de texto, haga clics en los cuadros de: direccin, colonia, ciudad y estado. 4.- Seleccione la columna ciudad y presione el boton UP hasta que la ciudad sea el primer rengln seleccionado 5.- Presione el botn OK. Y observe que en la lista ya aparece el ndice direccion_completa 6.- Haga clic en el botn close

47

7.- Ejecute la siguiente consulta:


select direccion,colonia,ciudad,estado,clave_cliente from clientes order by ciudad

al analizar los resultados observe que el conjunto resultado est ahora ordenado por la columna ciudad. 8.- Haga clic en la pestaa Execution Plan El plan indica que el optimizador de consultas utiliz el ndice nonclustered llamado direccion_completa. Note que el ordenamiento no requiere procesamiento debido a que el ndice compuesto est ordenado primero por la columna ciudad. 9.- Ejecute la siguiente consulta:
select direccion,colonia,ciudad,estado,clave_cliente from clientes order by estado

al analizar los resultados observe que el conjunto resultado est ahora ordenado por la columna estado. 10.- Haga clic en la pestaa Execution Plan El plan indica que el optimizador de consultas utiliz el ndice llamado clientes.PK_cl. Note que el ordenamiento requiere procesamiento extra debido a que el ndice compuesto est ordenado primero por la columna ciudad.

Sugerencias Didcticas: Se sugiere que el Maestro realice las acciones: 1.- Verificacin de la instalacin en cada Computadora del Sistema

48

Administrador de Bases de Datos y la versin electrnica de ste Manual. 2.- Se sugiere que cada alumno cuente con su propia computadora personal con la finalidad de que realice todos los ejercicios personalmente. 3.- Se sugiere que el Maestro haga una induccin sobre el tema de la Prctica indicando los objetivos de aprendizaje que se obtendrn al realizarla. 4.- Se sugiere que los alumnos abran el Sistema Administrador de Bases de Datos, y, este Manual (de preferencia en forma electrnica); con la finalidad de que vayan realizando los ejercicios copiando y pegando los scripts SQL, ejecutndolos y copiando y pegando los resultados de cada uno en la parte de Reporte del Alumno. 5.- Se sugiere que el Maestro asesore a sus Alumnos durante el proceso de realizacin de la Prctica, logrando as una atencin personalizada. 6.- Se sugiere que el Maestro indique a los alumnos que para evaluar la Prctica enven a su correo electrnico (o le entreguen de manera impresa), la parte del Reporte del Alumno (resultados). Indicando el nmero de la Prctica y el nombre del alumno. 7.- Se sugiere que el Maestro evale los resultados obtenidos en la Prctica y registre una calificacin de la misma, tomndola en cuenta en el proceso de evaluacin que haya definido. 8.- Se sugiere que el Maestro indique a los alumnos cmo se debe editar un comando SQL y como ejecutarlo. Asimismo, como copiar y pegar los resultados en la parte de Reporte del Alumno (resultados), todo esto con la finalidad de que los alumnos entiendan el proceso de ejecucin y resultados que deben realizar en todas las prcticas de ste Manual Reporte del alumno (resultados): En sta parte el alumno registrar los resultados de cada uno de los ejercicios

49

de la Prctica, indicando a qu parte de la Prctica corresponde. El alumno escribir en esta seccin los resultados del ejercicio 1 puntos 1 a 5, ejercicio 2 puntos 1 a 6, y, ejercicio 3 puntos 1 a 10; especificados en la parte Metodologa, indicando el nmero de cada punto que se est reportando.

Bibliografa preliminar: REFERENCIA A MCSE Microsoft SQL-Server 2000 Database Design and Implementation Training Kit Microsoft Press

REFERENCIA B The Practical SQL Handbook Using SQL Variants Fourth Edtion Judith S. Bowman, Sandra L. Emerson, Marcy Darnovsky Addison Wesley REFERENCIA C Fundamentos de Bases de Datos Cuarta Edicion Korth/Sudarshan/Silberchatz McGraw-Hill

50

Nmero de Prctica: 6 Nombre de la Prctica: Creacin de ndices y administracin Objetivo Especfico: El alumno crear y administrar ndices de tablas de datos, con la finalidad de que los utilice en sus propias bases de datos Introduccin: En sta Prctica se muestra como crear, reconstruir, renombrar y eliminar un ndice. Se deben crear ndices que sirvan para la mayora de las consultas que el usuario ejecuta. La manera en la cual la base de datos es usada dicta que tan liberal podemos ser al crear ndices. Hay importantes caractersticas de optimizacin de desempeo en los Sistemas Administradores de Bases de Datos que determinan qu ndices crear o eliminar y tambien para ayudar al usuario a mantener ndices existentes. Creacin de ndices.- Hay varias maneras para crear ndices, una de ellas es usando estatutos SQL (create table, alter table,create index), otra manera es usar la opcin Manage Indexes que se describi en la Prctica anterior, otra es invocar a sta misma opcin desde Enterprise Manager, finalmente, otra opcin es usar el wizard desde Enterprise Manager. Creacin/administracin de ndices utiizando estatutos SQL.Los estatutos SQL involucrados son: create index, create table, y, alter table. Cuando se usa create index se debe especificar el nombre del ndice, la tabla o vista, y las columnas sobre las cuales se crear el ndice. Opcionalmente, se puede especificar si el ndice deber contener valores nicos, el tipo de ndice (clustered o nonclustered), el tipo de ordenamiento por cada columna, propiedades del ndice, y, la localizacin del grupo de archivos para el ndice. La configuracin de default de un ndice es: a) Se crea un ndice nonclustered b) El orden de las columnas es ascendente y usa la base de datos actual para el ordenamiento

51

c) Usa las configuraciones globales de SQL-Server para el pad index y el fill factor d) Crea todos los resultados ordenados durante la creacin del ndice en el grupo de archivos de default e) Actualiza las estadsticas del ndice f) Realiza un roll back (recuperacin) de un lote de mltiples inserciones si un ndice nico es violado por cualquiera de los registros que se estn insertando g) Evita que un ndice existente sea sobrescrito Las clusulas principales del estatuto create index es:
CREATE [UNIQUE] [CLUSTERED | NONCLUSTERED] INDEX nombre_indice ON [nombre_tabla | nombre_vista](nombre_columna [,...n]) [WITH [propiedad_indice [,...n] ] [ON grupo_archivo]

Ejemplo 1:
CREATE INDEX indice100 ON tabla100(columna1)

Un ndice index100 se crea en la tabla table100, la llave ndice para la tabla es columna1, el ndice es nonclustered y es no nico. Todas las propiedades del ndice concuerdan con las propiedades de default Ejemplo 2:
CREATE UNIQUE CLUSTERED INDEX indice200 ON tabla100(columna1, columna3 DESC) WITH FILLFACTOR = 60, IGNORE_DUP_KEY, DROP_EXISTING, SORT_IN_TEMPDB

Un ndice lllamado index200 reemplaza al ndice existente del mismo nombre en la tabla table100 (por la clusula drop_existing). Es un ndice compuesto por las

52

columnas: columna1 y columna3. Observe que el ordenamiento de la columna3 es descendente. Fillfactor configura al ndice para que las pginas del ndice al nivel de hoja estn 40% llenas, dejando el 60% del espacio para que contenga entradas clave al ndice adicionales. Las clusulas clustered y unique causan que el ndice sea clustered y nico. La tabla se ordena fsicamente por el ndice y no se permiten llaves duplicadas. La clusula ignore_dup_key habilita que un lote con muchas clusulas insert sea existosa ignorando aquellos insert que violen el requerimiento de unicidad del ndice. La llave sort_in_tempdb instruye al ndice que ejecute inmediatamente el ordenamiento para mejorar la velocidad en la cual un ndice grane es reconstruido y para decrementar la fragmentacin del ndice. Puesto que no hay una segunda clusula on, el ndice se crea en el grupo de archivos de default de la base de datos. La creacin de una restriccin primary key o de una unique automticamente crea un ndice. Los estatutos create table y alter table pueden incluir configuraciones de ndices para que el usuario los defina. Las principales clsulas en un create table relacionadas con ndices son:

CREATE TABLE nombre_tabla (nombre_columna tipo_de_datos CONSTRAINT nombre_restriccion [PRIMARY KEY | UNIQUE] [CLUSTERED | NONCLUSTERED] [WITH FILLFACTOR = factor_de_llenado ] [ON gupo_archivo] )

Administracin de ndices.Las tareas de mantenimiento de ndices incluyen: reconstruccin, eliminacin y renombrado. Elimine un ndice si ya no se necesita o si esta corrompido. Reconstruya un ndice para mantener un fill factor dado o para reorganizar el almacenaje de los datos del ndice, de tal manera que sea contiguo. Renombre un ndice si las convenciones de nombrado cambian.

53

Ejemplo de eliminacin de dos ndices:


DROP INDEX table01.index01, view01.index02

Si un ndice clustered existe en una tabla dada, los dems ndices nonclustered en la misma tabla lo utilizan como su llave de indexacin. Si se elimina el ndice clustered, los dems se reconstruyen usando un apuntador en lugar de la llave ndice. Si el ndice clustered es vuelto a crear, los dems se reconstruyen para tomar la llave ndice como su llave de indexacin. El estatuto DBCC DBREINDEX reconstruye los ndices de una tabla usando un solo comando.
DBCC DBREINDEX (table01, pk_column01, 60)

Este estatuto SQL reconstruye el ndice pk_column01 (llave primaria) de la tabla table01, con un fill factor de 60 porciento. Se puede renombrar un ndice eliminndolo y volvindolo a crear. Otra manera es usando el procedimiento almacenado sp_rename.
sp_rename @objname = 'table01.index01', @newname = 'index02', @objtype = 'INDEX'

Este estatuto renombra un ndice llamado index01 a index02 Consulte la referencia A, captulo 11, leccin 2

Correlacin con el /los subtemas del Programa de Estudio Vigente: Esta prctica va dirigida a tratar los subtemas relacionados con la UNIDAD 2: Lenguaje de Definicin de Datos (DDL) Los subtemas tratados son:

54

Subtema 2.3 Creacin de ndices

Material y Equipo Necesario: Para realizar la Prctica es necesario contar con el siguiente hardware y software: Computadora Personal Sistema Operativo XP Sistema Administrador de Bases de Datos: Microsoft SQL-Server 2000 CD que acompaa a este Manual

Metodologa: Ejercicio 1: Creacin y prueba de un ndice nonclustered 1.- Abra Query Analyzer y conctese a su servidor de datos 2.- Estando posicionado en la base de datos ventas, ejecute el estatuto
sp_helpindex productos

Observe que el ndice se llama PK__productos__78B3EFCA (puede tener otro nombre), es tipo clustered, es nico y es llave primaria. 3.- Escriba y ejecute el siguiente cdigo:
CREATE NONCLUSTERED INDEX otro_indice ON productos(descripcion, unidades)

Este estatuto crea un ndice nonclustered, no nico, llamado otro_indice en la tabla productos, es compuesto por los atributos: descripcin y unidades.

55

4.- Si la pestaa de Execution Plan no est habilitada en la venta de resultados del Query Analyzer, haga clic en Query y clic en Show Execution Plan. 5.- Para probar que el optimizador del SQL-Server utiliza el ndice recin creado llamado otro_indice, ejecute el siguiente cdigo:
select clave, descripcion,unidades from productos

Los resultados aparecen, descripcin,unidades

observe

el

ordenamiento

por

los

atributos

6.- Haga clic en la pestaa Execution Plan y ponga el apuntador del mouse sobre el cono productos.otro_indice, Una caja aparece mostrando las estadsticas de bsquedas del ndice otro_indice. Note que en la parte baja aparece el nombre completo del mismo. 7.- Por qu el optimizador de consultas no utiliz el ndice que gener la llave primaria? Ejercicio 2: Preparacin de una tabla para configuracin de un nuevo ndice 1.- Posicinese en la base de datos ventas y ejecute el siguiente script:
create table ordenes (ordenID int primary key, clienteID char(10), empleadoID int, fecha_orden datetime, fecha_requerida datetime, fecha_embarcada datetime, via_embarque int) insert into ordenes values(10248,'VINET',5,'1996-07-04','1996-08-01','1996-07-16',3)

56

insert into ordenes values(10249,'TOMSP',6,'1996-07-05','1996-08-16','1996-07-10',1) insert into ordenes values(10250,'HANAR',4,'1996-07-08','1996-08-05','1996-07-12',2) insert into ordenes values(10251,'VICTE',3,'1996-07-08','1996-08-05','1996-07-15',1) insert into ordenes values(10252,'SUPRD',4,'1996-07-09','1996-08-06','1996-07-11',2) insert into ordenes values(10253,'HANAR',3,'1996-07-10','1996-07-24','1996-07-16',2) insert into ordenes values(10254,'CHOPS',5,'1996-07-11','1996-08-08','1996-07-23',2) insert into ordenes values(10255,'RICSU',9,'1996-07-12','1996-08-09','1996-07-15',3) insert into ordenes values(10256,'WELLI',3,'1996-07-15','1996-08-12','1996-07-17',2) create nonclustered index indice1 on ordenes(clienteID) create nonclustered index indice2 on ordenes(empleadoID) create nonclustered index indice3 on ordenes(fecha_orden) create nonclustered index indice4 on ordenes(fecha_embarcada)

Este script crea una tabla ordenes, le inserta varias tuplas y le crea los ndices descritos. 2.- En la ventana del Query Analyzer, ejecute
sp_helpindex ordenes

El resultado muestra que la llave primaria que se genero en el atributo ordenID, genera un ndice llamado PK__ordenes__4316F928 que es nico y clustered. Se desea crear otro ndice, que sea clustered y que componga de los atributos ordenID y empleadoID. Para hacer esto, se debe cambiar el ndice PK__ordenes__4316F928 de clustered a nonclustered. 3.- En la ventana del Query, ejecute
CREATE UNIQUE NONCLUSTERED INDEX ordenes_pk ON ordenes(ordenID) WITH DROP_EXISTING

57

Este estatuto genera un error que indica que no se puede convertir un ndice clustered auno nonclustered con la clusula with drop_existing. Para hacerlo se debe eliminar el ndice y volverlo a crear como se desea. Si el ndice que se va a eliminar es una llave fornea en otra tabla, se deber eliminar primero esa restriccin antes de poderlo eliminar. 4.- Para eliminar la restriccin de llave primaria, se debe ejecutar
ALTER TABLE ordenes DROP CONSTRAINT PK__ordenes__4316F928

Ejercicio 3: Creacin de un ndice clustered 1.- En la ventana del Query, ejecute


CREATE UNIQUE CLUSTERED INDEX ordenes_PK ON ordenes(clienteID, ordenID) WITH FILLFACTOR = 70

Lo que crea un ndice compuesto de los atributos: clienteID y ordenID, que es nico y clustered. Para una mejor eficiencia, es mejor crear el ndice clustered primero que el nonclustered, debido a que el ndice nonclustered se construye una vez utilizando la llave ndice del clustered. Enseguida, se puede crear nuevamente la llave primaria, y en su caso, las llaves forneas que hayan sido eliminadas. 2.- En la ventana del Query, ejecute sp_helpindex ordenes y, verifique lo que se hizo

58

3.- En la ventana del Query, ejecute


ALTER TABLE ordenes ADD CONSTRAINT ordenes_llave PRIMARY KEY NONCLUSTERED (ordenID)

La llave primaria se vuelve a crear en la tabla ordenes, el ndice de la misma es nonclustered, 4.- En la ventana del Query, ejecute sp_helpindex ordenes y, verifique lo que se hizo

Sugerencias Didcticas: Se sugiere que el Maestro realice las acciones: 1.- Verificacin de la instalacin en cada Computadora del Sistema Administrador de Bases de Datos y la versin electrnica de ste Manual. 2.- Se sugiere que cada alumno cuente con su propia computadora personal con la finalidad de que realice todos los ejercicios personalmente. 3.- Se sugiere que el Maestro haga una induccin sobre el tema de la Prctica indicando los objetivos de aprendizaje que se obtendrn al realizarla. 4.- Se sugiere que los alumnos abran el Sistema Administrador de Bases de Datos, y, este Manual (de preferencia en forma electrnica); con la finalidad de que vayan realizando los ejercicios copiando y pegando los scripts SQL, ejecutndolos y copiando y pegando los resultados de cada uno en la parte de Reporte del Alumno.

59

5.- Se sugiere que el Maestro asesore a sus Alumnos durante el proceso de realizacin de la Prctica, logrando as una atencin personalizada. 6.- Se sugiere que el Maestro indique a los alumnos que para evaluar la Prctica enven a su correo electrnico (o le entreguen de manera impresa), la parte del Reporte del Alumno (resultados). Indicando el nmero de la Prctica y el nombre del alumno. 7.- Se sugiere que el Maestro evale los resultados obtenidos en la Prctica y registre una calificacin de la misma, tomndola en cuenta en el proceso de evaluacin que haya definido. 8.- Se sugiere que el Maestro indique a los alumnos cmo se debe editar un comando SQL y como ejecutarlo. Asimismo, como copiar y pegar los resultados en la parte de Reporte del Alumno (resultados), todo esto con la finalidad de que los alumnos entiendan el proceso de ejecucin y resultados que deben realizar en todas las prcticas de ste Manual

Reporte del alumno (resultados): En sta parte el alumno registrar los resultados de cada uno de los ejercicios de la Prctica, indicando a qu parte de la Prctica corresponde. El alumno escribir en esta seccin los resultados del ejercicio 1 puntos 1 a 7, ejercicio 2 puntos 1 a 4, y, ejercicio 3 puntos 1 a 4; especificados en la parte Metodologa, indicando el nmero de cada punto que se est reportando.

Bibliografa preliminar: REFERENCIA A

60

MCSE Microsoft SQL-Server 2000 Database Design and Implementation Training Kit Microsoft Press

REFERENCIA B The Practical SQL Handbook Using SQL Variants Fourth Edtion Judith S. Bowman, Sandra L. Emerson, Marcy Darnovsky Addison Wesley

61

Nmero de Prctica: 7 Nombre de la Prctica: Implementacin de restricciones de integridad Objetivo Especfico: El alumno conocer, comprender y aplicar la sintaxis de SQL que le permitir implementar restricciones de dominio en sus propias bases de datos. Introduccin: Las tablas en una base de datos pueden incluir un nmero de diferentes tipos de propiedades que aseguran la integridad de los datos. Estas propiedades incluyen tipos de datos, definiciones not null, definiciones default, propiedades identity, constraints (restricciones), rules (reglas), triggers (disparadores) e ndices. Tambien se tratan otros tipos de integridad de datos: integridad de entidades, integridad de dominios, integridad referencial, y, integridad definida por el usuario. Tipos de datos.- Es un atributo que especifica el tipo de datos que puede ser almacenado en una columna, parmetro o variable. Hay tipos de datos del sistema y tipos de datos del usuario (basados en tipos de datos del sistema). Los tipos de datos son herramientas que reforzan la integridad de datos debido a que el dato capturado o cambiado debe ser compatible al tipo especificado para el objeto. Definiciones not null.- El hecho de que una columna permita nulos determina si los renglones en la tabla pueden contener un valor nulo para la misma. Un nulo no es lo mismo que un cero, espacio en blanco o un cadena de caracteres de longitud cero. Null significa que no se ha insertado algo, la presencia de un nulo implica que el valor es desconocido o indefinido. Cuando se define una columna al crear la tabla a la pertenece se determina si va a aceptar o no valores nulos. Definiciones default.- Los defaults especifican qu valores se usan en una columna si no se especifica un valor para la misma cuando se le inserta un

62

rengln. Se definen cuando se crea la tabla en las columnas en que se desean o pueden ser aadidas a una tabla existente. Cada columna de una tabla solo puede contener una definicin default. Propiedad identity.- Para cada tabla, un identificador de columna simple puede crearse para que contenga un valor secuencial generado por el sistema que identifican de manera nica a cada rengln dentro de la tabla. Constraints (restricciones).- Con el uso de ellas el usuario refuerza automticamente la integridad de la base de datos. Definen reglas que tienen que ver con los valores permitidos en columnas y son un mecanismo estndar para reforzar la integridad. Se prefiere usar constraints a usar disparadores, reglas o defaults. Rules (reglas).- Son caractersticas que desempean algunas de las funciones que realizan los constraints check, stos ltimos son los preferidos para restringir los valores en una columna porque son mas concisos. Solamente puede haber una regla aplicada a una columna, pero pueden haber muchos check. Los check se especifican como parte de un estatuto create table , mientras que las reglas son creada como objetos separados y se aplican a la columna. Se usa el estatuto create rule para crear la regla, y despus, se usa el procedimiento almacenado sp_bindrule para ligar la regla a la columna o al tipo definido por el usuario. Triggers (disparadores).- Son una clase especial de procedimiento almacenado y se definen para que se ejecuten automticamente cuando un estatuto update, insert o delete se realiza en una tabla o vista. Son una herramienta poderosa para reforzar las reglas de negocios automticamente cuando un dato se modifica. Indices.- Es una estructura que ordena los valores de una o mas columnas en una tabla de una base de datos. Provee apuntadores a los valores de datos almacenados en columnas especificadas de la tabla y los ordena de acuerdo a lo que el usuario especifique.

63

Tipos de integridad de datos.- SQL-Server soporta cuatro tipos de integridad de datos: integridad de entidades, integridad de dominios, integridad referencial y integridad definida por el usuario. Integridad de entidad.- Define un rengln como una instancia nica de una entidad para una tabla particular. Apoya la integridad de la columna identificador o de la llave primaria de una tabla. Integridad de dominio.- Es la validacin de entradas para una columna dada. Se implementa restringiendo el tipo, el formato o el rango de valores posibles. Integridad referencial.- Preserva las relaciones definidas entre tablas cuando se insertan o eliminan renglones. Se basa en relaciones entre llaves forneas y primarias o entre llaves forneas y llaves nicas. Asegura que los valores llave sean consistentes en las diferentes tablas. Requiere que no haya referencias a valores no existentes y que si un valor llave cambia, todas las referencias a ella cambien consistentemente en la base de datos. Con su uso se evita: a)Aadir registros a una tabla relacionada si no hay un registro asociado en la tabla primaria b)Cambiar valores en una tabla primaria que resulte en registros hurfanos en una tabla relacionada c)Elimina registros desde la tabla primaria si hay registros relacionados en la tabla fornea Integridad definida por el usuario.- Habilita al usuario a definir reglas de negocios especficas que no caen en una de las otras categoras de integridad. Consulte la referencia A, captulo 5, lecciones 1 y 2

Correlacin con el /los subtemas del Programa de Estudio Vigente:

64

Esta prctica va dirigida a tratar los subtemas relacionados con la UNIDAD 2: Lenguaje de Definicin de Datos (DDL) Los subtemas tratados son: Subtema 2.3 Creacin de ndices Nota: Adems de los temas relacionados con ndices, se ven otras restricciones de integridad que afectan a otros atributos de las tablas.

Material y Equipo Necesario: Para realizar la Prctica es necesario contar con el siguiente hardware y software: Computadora Personal Sistema Operativo XP Sistema Administrador de Bases de Datos: Microsoft SQL-Server 2000 CD que acompaa a este Manual

Metodologa: Ejercicio 1: Identificacin de las propiedades usadas para asegurar la integridad de datos 1.- Abra el Query Analyzer y conctese a la base de datos ventas 2.- Escriba y ejecute el siguiente cdigo sp_help clientes

65

con el uso de este procedimiento almacenado se visualiza la informacin de metadatos de la tabla clientes de la base de datos ventas. 3.- Revise el resultado anterior e identifique: tipos de datos valores nulos, definiciones de default, propiedad identity, ndices y constraints (restricciones). 4.- Para analizar el funcionamiento de la propieda identity, escriba y ejecute
create table clientes2 (clave int identity(100,5), nombre char(20), direccion char(20)) insert into clientes2 values ('juan perez', 'hidalgo 200') insert into clientes2 values ('rafael gomez', 'juarez 222') insert into clientes2 values ('guadalupe escobedo', 'morelos 300') insert into clientes2 values ('pedro molina', 'lopez mateos 400') insert into clientes2 values ('juan perez', 'zaragoza 456')

5.- Escriba y ejecute select * from clientes2 Observe que cada tupla tiene un valor en la columna clave, que empez en 100 y se fue incrementando de 5 en 5. 6.- Escriba y ejecute sp_help clientes2 con el uso de este procedimiento almacenado se visualiza la informacin de metadatos de la tabla clientes2 de la base de datos ventas. 7.- Revise el resultado anterior e identifique: tipos de datos valores nulos, definiciones de default, propiedad identity, ndices y constraints (restricciones).

66

8.- Escriba y ejecute sp_help ren_facturas con el uso de este procedimiento almacenado se visualiza la informacin de metadatos de la tabla ren_facturas de la base de datos ventas. 9.- Revise el resultado anterior e identifique: tipos de datos valores nulos, definiciones de default, propiedad identity, ndices y constraints (restricciones). 10.- Cierre el Query Analyzer Ejercicio 2: Uso de constraints (restricciones) 1.- Posicinese en base de datos ventas 2.- Escriba y ejecute
create table autores (clave_autor int not null, nombre char(30), direccion char(30), ao_nacimiento char(4)) insert into autores values (100,'william shakespeare', 'blvd. hidalgo 300',null) insert into autores values (200,'perez galdos', 'blvd. morelos 400',null) insert into autores values (300,'garcia marquez', 'blvd. carranza 500',null) insert into autores values (400,'conan doyle', 'blvd. escobedo 700',null) insert into autores values (500,'jose luis cuevas', 'blvd. zapata 800',null)

Estos estatutos crean y cargan con datos a la tabla autores. Observe que la columna clave_autor no permite nulo con la finalidad de que cuando se le cree una llave primaria lo permita. En la columna ao_nacimiento no se le insertan datos, se les pone nulo.

67

3.- Escriba y ejecute


alter table autores add constraint autores_pk primary key (clave_autor)

Este estatuto crea una llave primaria llamada autores_pk en la tabla autores, en la columna clave_autor. 4.- Escriba y ejecute
create table libros (clave_libro int not null, titulo char(30), autor int, tipo char(20) ) insert into libros values(1000,'hamlet',100,'drama') insert into libros values(2000,'libro de cuentos',200,'infantil') insert into libros values(3000,'cien aos de soledad',300,'novela') insert into libros values(4000,'estudio en escarlata',400,'policiaca') insert into libros values(5000,'mexico 68',500,'drama') insert into libros values(6000,'el teniente',300,'drama') insert into libros values(7000,'sherlock holmes',400,'policiaca')

Observe que entre la tabla autores y libros, hay una relacin de uno a muchos, en donde la llave primaria de la tabla autores (clave_autor) ser llave fornea en la tabla libros (autor), aunque, todava la llave fornea no se ha definido.

5.- Escriba y ejecute


alter table libros add constraint libros_pk primary key (clave_libro)

68

Este estatuto crea una llave primaria llamada libros_pk en la tabla libros, en la columna clave_libro. 6.- Escriba y ejecute
alter table libros add constraint libros_fk foreign key (autor) references autores(clave_autor)

Este estatuto crea una la relacin llave fornea llave primaria, entre las tablas autores y libros. Con esto se implementa la integridad refencial entre ellas. Ejercicio 3: Definicin de constraints (restricciones) check 1.- Posicinese en la base de datos ventas 2.- Escriba y ejecute
ALTER TABLE clientes ADD CONSTRAINT checknombre_ck CHECK (nombre NOT LIKE 'DESCONOCIDO')

Este estatuto crea una restriccin de dominio checknombre_ch que no permite que cuando se inserte un renglon en el archivo clientes, se ponga como nombre la cadena DESCONOCIDO 3.- Escriba y ejecute
insert into clientes values(111,'DESCONOCIDO','Av. Juarez 110','Centro','Leon','Gto.',37200)

La base de datos no permite que se inserte el rengln debido a que se est violando la restriccin de dominio establecida debido a que se pretendi insertar un rengln con el nombre=DESCONOCIDO. El sistema envia el siguiente error:
INSERT statement conflicted with COLUMN CHECK constraint 'checknombre_ck'. The conflict occurred in database 'ventas', table 'clientes', column 'nombre'.

69

The statement has been terminated.

4.- Escriba y ejecute sp_help productos Observe que se muestran todos los metadatos de dicha tabla, note los atributos y tipos de datos de la tabla, en particular el campo clave que se defini:
clave char(5) primary key

Esta llave primaria deber cumplir con las siguientes reglas de negocio:
--clave del producto, son 5 caracteres: XXDDD -- X representa un caracter, D representa un digito de 0 a 9 ---el primer caracter X es un tipo de producto el segundo caracter X es una subclasificacion del tipo los caracteres 3, 4 y 5 son dgitos

Con la finalidad de implementar sta regla de negocio, se crea la siguiente restriccin: 5.- Escriba y ejecute
ALTER TABLE productos ADD CONSTRAINT productos_ck CHECK ( clave LIKE ('[A-Z][A-Z][0-9][0-9][0-9]') )

Este estatuto genera la restriccin definida en el punto 4. 6.- Escriba y ejecute el siguiente estatuto
insert into productos values('C9120','Lazo de 10 m',340,33.00,76.00)

70

Observe que no se permite la insercin debido a que se est violando la restriccin de dominio en el valor C9120, el segundo carcter debe se una letra entre A y Z. El sistema enva el siguiente error:
INSERT statement conflicted with COLUMN CHECK constraint 'prod_ck'. The conflict occurred in database 'ventas', table 'productos', column 'clave'. The statement has been terminated.

Para lograr la insercin, modifique el segundo nmero y ponga una letra como sigue:
insert into productos values('CM120','Lazo de 10 m',340,33.00,76.00)

Verifique la insercin con el estatuto


select * from productos

7.- Escriba y ejecute


ALTER TABLE clientes ADD CONSTRAINT clientes_ck CHECK ( ciudad NOT LIKE ('MOR%') )

Este estatuto genera la restriccin: en la tabla clientes no debe aceptar valores que empiecen con la cadena MOR, y, despus que hayan otros caracteres.

8.- Escriba y ejecute el siguiente estatuto


insert into clientes values (110,'Construcciones,S.A.','Av. Dominguez 123', 'Bosques',

'Morelia','Mich.',38546)

Observe que no se permite la insercin debido a que se est violando la restriccin de dominio en el valor de ciudad que se quiere insertar: Morelia, por ello el sistema enva el error

71

INSERT statement conflicted with COLUMN CHECK constraint 'clientes_ck'. The conflict occurred in database 'ventas', table 'clientes', column 'ciudad'. The statement has been terminated..

Para lograr la insercin, modifique el valor de ciudad, y como prueba ejecute:


insert into clientes values (110,'Construcciones,S.A.','Av. Dominguez 123', 'Bosques',

'Uruapan','Mich.',38546)

Verifique la insercin con el estatuto


select * from clientes

9.- Defina una restriccin de dominio que utilice la expresin regular para que no permita capturar en la tabla clientes en la columna nombre, un registro en donde la primera letra sea E, la segunda l, la tercera un espacio en blanco, la cuarta una letra en el rango de la m a la w, y, despus que sean uno o varios caracteres mas. 10.- Para verificar que los constraints (restricciones) han sido aadido a la tabla adecuada, utilice sp_helpconstraint clientes Verifique las restricciones que tiene definidas esta tabla

Sugerencias Didcticas: Se sugiere que el Maestro realice las acciones: 1.- Verificacin de la instalacin en cada Computadora del Sistema Administrador de Bases de Datos y la versin electrnica de ste Manual.

72

2.- Se sugiere que cada alumno cuente con su propia computadora personal con la finalidad de que realice todos los ejercicios personalmente. 3.- Se sugiere que el Maestro haga una induccin sobre el tema de la Prctica indicando los objetivos de aprendizaje que se obtendrn al realizarla. 4.- Se sugiere que los alumnos abran el Sistema Administrador de Bases de Datos, y, este Manual (de preferencia en forma electrnica); con la finalidad de que vayan realizando los ejercicios copiando y pegando los scripts SQL, ejecutndolos y copiando y pegando los resultados de cada uno en la parte de Reporte del Alumno. 5.- Se sugiere que el Maestro asesore a sus Alumnos durante el proceso de realizacin de la Prctica, logrando as una atencin personalizada. 6.- Se sugiere que el Maestro indique a los alumnos que para evaluar la Prctica enven a su correo electrnico (o le entreguen de manera impresa), la parte del Reporte del Alumno (resultados). Indicando el nmero de la Prctica y el nombre del alumno. 7.- Se sugiere que el Maestro evale los resultados obtenidos en la Prctica y registre una calificacin de la misma, tomndola en cuenta en el proceso de evaluacin que haya definido. 8.- Se sugiere que el Maestro indique a los alumnos cmo se debe editar un comando SQL y como ejecutarlo. Asimismo, como copiar y pegar los resultados en la parte de Reporte del Alumno (resultados), todo esto con la finalidad de que los alumnos entiendan el proceso de ejecucin y resultados que deben realizar en todas las prcticas de ste Manual Reporte del alumno (resultados): En sta parte el alumno registrar los resultados de cada uno de los ejercicios de la Prctica, indicando a qu parte de la Prctica corresponde.

73

El alumno escribir en esta seccin los resultados del ejercicio 1 puntos 1 a 10, ejercicio 2 puntos 1 a 6, y, ejercicio 3 puntos 1 a 10; especificados en la parte Metodologa, indicando el nmero de cada punto que se est reportando.

Bibliografa preliminar: REFERENCIA A MCSE Microsoft SQL-Server 2000 Database Design and Implementation Training Kit Microsoft Press

REFERENCIA B The Practical SQL Handbook Using SQL Variants Fourth Edtion Judith S. Bowman, Sandra L. Emerson, Marcy Darnovsky Addison Wesley

74

Nmero de Prctica: 8 Nombre de la Prctica: Acceso y modificacin de datos Objetivo Especfico: El alumno conocer, comprender y aplicar la sintaxis bsica de la clusula select y la utilizar para acceder a sus bases de datos, adems, conocer, comprender y aplicar la sintaxis de las clusulas SQL: insert, update y delete; que le permitirn modificar sus bases de datos.

Introduccin: Se puede utilizar la clusula select para recuperar datos de una base de datos y presentarla al usuario en forma de un conjunto resultado, sta clusula est descrita as: a) Las columnas a ser incluidas en el conjunto resultado b) Las tablas desde las cuales el conjunto resultado es recuperado c) Las condiciones que los renglones en la tabla fuente deben cumplir para que califiquen para el conjunto resultado d) La secuencia de ordenamiento de los renglones en el conjunto resultado Ejemplos:
select * from clientes select clave_cliente,nombre,ciudad from clientes where estado='Gto.'

Por otra parte, un componente esencial en un sistema administrador de bases de datos es la capacidad que tenga para modificar los datos almacenados.

75

El formato bsico de la clusula insert, para insertar renglones en la base de datos es:
INSERT [INTO] tabla_o_vista [(lista_columnas)] valores_de_datos

Un estatuto insert no especifica valores para los siguientes tipos de columnas, debido a que SQL-Server automticamente los genera: Propiedad identity, definicin default que usa la funcion newid(), y, columnas calculadas. El estatuto update sirve para actualizar datos en una base de datos dada, puede cambiar valores de datos en un solo rengln, en grupos de renglones, o, en todos los renglones de una tabla o vista. Una actualizacin es exitosa solamente si el nuevo valor es compatible con el tipo de dato del la columna objetivo y cumple con todos los constraints (restricciones) que aplican a la columna. El estatuto delete elimina uno o mas renglones en una tabla o vista. Una sintaxis simplificada es:
DELETE tabla_o_vista FROM tabla_fuente WHERE condicion_de_busqueda

Consulte la referencia A, captulo 6, lecciones 1 y 3

Correlacin con el /los subtemas del Programa de Estudio Vigente: Esta prctica va dirigida a tratar los subtemas relacionados con la UNIDAD 3: Consultas y Lenguaje de Manipulacin de Datos (DML) Los subtemas tratados son: Subtema 3.1 Instrucciones INSERT, UPDATE, DELETE

76

Material y Equipo Necesario: Para realizar la Prctica es necesario contar con el siguiente hardware y software: Computadora Personal Sistema Operativo XP Sistema Administrador de Bases de Datos: Microsoft SQL-Server 2000 CD que acompaa a este Manual

Metodologa: Ejercicio: Modificacin de datos en una base de datos 1.- Abra el Query Analyzer y conctese a la base de datos ventas 2.- Escriba y ejecute el siguiente cdigo
CREATE TABLE prueba1 ( renglonID INT IDENTITY(1,1) NOT NULL, Titulo VARCHAR(80) NOT NULL, Tipo CHAR(12) NOT NULL DEFAULT ('Desconocido'), Ciudad VARCHAR(50) NULL, Costo MONEY NULL )

Con lo que se crea la tabla prueba1, que contiene 5 columnas. 3.- Escriba y ejecute
INSERT INTO prueba1 (Titulo, Tipo, Costo) VALUES ('Titulo de prueba', 'business', 27.00)

77

Observe que se insert un rengln en la tabla prueba1, los valores insertados corresponden a los tipos de las columnas indicadas. Adems, no se incluy valor para la columna renglonID debido a que se inserta automticamente empezando desde el valor 1 en incrementos de 1 en 1. El valor de ciudad es nulo debido a que no se defini un valor para esa columna. 4.- Escriba y ejecute
select * from prueba1

y compruebe lo observado 5.- Escriba y ejecute


insert into prueba1 (titulo,tipo,costo) select title, type, price from pubs.dbo.titles

En este estatuto se estn tomando datos de la tabla titles de la base de datos pubs (que est en ste mismo servidor de datos), y, los inserta en la tabla prueba1. 6.- Escriba y ejecute
select * from prueba1

Con ste estatuto se despliega el contenido de la tabla. Note que los valores para la columna renglonID se han generado automticamente y de que cada rengln en la columna ciudad tiene un valor nulo. Observe que hay varios libros con la palabara business en la columna tipo y cheque el precio de los mismos. 7.- Escriba y ejecute

78

update prueba1 set costo=costo*2 where tipo='business'

Con ste estatuto se increment el valor de la columna costo en dos veces la cantidad original para los renglones en donde el valor de la columna tipo es business 8.- Escriba y ejecute
select * from prueba1

y confirme las actualizaciones 9.- Escriba y ejecute


delete prueba1 where titulo='Titulo de prueba'

Con ste estatuto se eliminan de la tabla los renglones que cumplen la condicin de que la columna ttulo tenga como valor 'Titulo de prueba'. 10.- Escriba y ejecute
select * from prueba1

y confirme las eliminaciones 11.- Escriba y ejecute


delete prueba1

Con ste estatuto se eliminan todos los renglones de la tabla prueba1, observe que no hay clusula where. 12- Escriba y ejecute
select * from prueba1

79

y confirme las eliminaciones 13.- Escriba y ejecute


drop table prueba1

Con ste estatuto se elimina de la base de datos la tabla prueba1. 14.- Cierre el Query Analyzer

Sugerencias Didcticas: Se sugiere que el Maestro realice las acciones: 1.- Verificacin de la instalacin en cada Computadora del Sistema Administrador de Bases de Datos y la versin electrnica de ste Manual. 2.- Se sugiere que cada alumno cuente con su propia computadora personal con la finalidad de que realice todos los ejercicios personalmente. 3.- Se sugiere que el Maestro haga una induccin sobre el tema de la Prctica indicando los objetivos de aprendizaje que se obtendrn al realizarla. 4.- Se sugiere que los alumnos abran el Sistema Administrador de Bases de Datos, y, este Manual (de preferencia en forma electrnica); con la finalidad de que vayan realizando los ejercicios copiando y pegando los scripts SQL, ejecutndolos y copiando y pegando los resultados de cada uno en la parte de Reporte del Alumno. 5.- Se sugiere que el Maestro asesore a sus Alumnos durante el proceso de realizacin de la Prctica, logrando as una atencin personalizada.

80

6.- Se sugiere que el Maestro indique a los alumnos que para evaluar la Prctica enven a su correo electrnico (o le entreguen de manera impresa), la parte del Reporte del Alumno (resultados). Indicando el nmero de la Prctica y el nombre del alumno. 7.- Se sugiere que el Maestro evale los resultados obtenidos en la Prctica y registre una calificacin de la misma, tomndola en cuenta en el proceso de evaluacin que haya definido. 8.- Se sugiere que el Maestro indique a los alumnos cmo se debe editar un comando SQL y como ejecutarlo. Asimismo, como copiar y pegar los resultados en la parte de Reporte del Alumno (resultados), todo esto con la finalidad de que los alumnos entiendan el proceso de ejecucin y resultados que deben realizar en todas las prcticas de ste Manual

Reporte del alumno (resultados): En sta parte el alumno registrar los resultados de cada uno de los ejercicios de la Prctica, indicando a qu parte de la Prctica corresponde. El alumno escribir en esta seccin los resultados del ejercicio, puntos 1 a 14, especificados en la parte Metodologa, indicando el nmero de cada punto que se est reportando.

Bibliografa preliminar: REFERENCIA A MCSE Microsoft SQL-Server 2000 Database Design and Implementation Training Kit

81

Microsoft Press

REFERENCIA B The Practical SQL Handbook Using SQL Variants Fourth Edtion Judith S. Bowman, Sandra L. Emerson, Marcy Darnovsky Addison Wesley

82

Nmero de Prctica: 9 Nombre de la Prctica: Consultas bsicas Objetivo Especfico: El alumno conocer, comprender y aplicar la sintaxis completa de la clusula select y la utilizar para acceder a sus bases de datos e implementar consultas.

Introduccin: La sintxis bsica de la clusula select es:


SELECT lista_de_seleccion [INTO nueva_nombre_tabla] FROM lista_tablas [WHERE condiciones_de_busqueda] [GROUP BY lista_de_agrupamiento] [HAVING condiciones_de_busqueda] [ORDER BY lista_de ordenamiento [ASC | DESC] ]

La clusula select enlista las columnas que se desean proyectar. La clusula from enlista las tablas involucradas en la consulta. La clusula into instruye a que el conjunto resultado se guarde en el archivo indicado La clusula where se usa para filtrar los renglones que resultan de las operaciones especificadas en la clusula from. La clusula group by se usa para agrupar la salida de la clusula where. La clusula having se usa para filtrar renglones del resultado agrupado. La clusula order by indica el tipo de ordenamiento que se desea. Esta prctica va dirigida a realizar consultas bsicas sobre la base de datos, se mostrarn ejemplos usando: distinct, top, as, into, concatenacin, alias, operaciones aritmticas, funciones de biblioteca, etc.

83

Hay un conjunto de funciones de biblioteca que contiene el Sistema Administrador de Bases de Datos SQL-Server. Los grupos principales de ellas son: Funciones de configuracin Funciones del cursor Funciones de tiempo y hora Funciones matemticas Funciones agregadas Funciones de metadatos Funciones de seguridad Funciones de cadenas Funciones del sistema Funciones estadsticas del sistema Funciones de imgenes y texto

Consulte la referencia A, captulo 6, lecciones 1 y 2 Para funciones del sistema consulte la ayuda que viene en SQL-Server

Correlacin con el /los subtemas del Programa de Estudio Vigente: Esta prctica va dirigida a tratar los subtemas relacionados con la UNIDAD 3: Consultas y Lenguaje de Manipulacin de Datos (DML) Los subtemas tratados son: Subtema 3.2 Consultas Bsicas SELECT, WHERE y funciones a nivel de registro Material y Equipo Necesario:

84

Para realizar la Prctica es necesario contar con el siguiente hardware y software: Computadora Personal Sistema Operativo XP Sistema Administrador de Bases de Datos: Microsoft SQL-Server 2000 CD que acompaa a este Manual

Metodologa: Ejercicio 1: Otras clusulas del select 1.- Posicinese en la base de datos ventas 2.- Escriba y ejecute
select type, royalty from pubs.dbo.titles

Observe que el resultado despliega 18 renglones, y, hay algunas tuplas duplicadas. 3.- Para eliminar las tuplas duplicadas en el conjunto resultado, escriba y ejecute
select distinct type, royalty from pubs.dbo.titles

Observe que con el uso de la clusula distinct, solamente aparecen las tuplas nicas (12 tuplas) , es decir, no aparecen las tuplas duplicadas, en este caso, de la combinacin de las columnas type y royalty. Esto no afecta a la base de datos, solamente en el conjunto resultado del estatuto select. 4.- Escriba y ejecute
select no_factura,no_renglon,clave,cantidad,precio from ren_facturas order by clave

85

Observe que el conjunto resultado tiene 25 tuplas 5.- Para que en el conjunto resultado aparezcan solamente las primeras 10 tuplas, escriba y ejecute
select top 10 no_factura,no_renglon,clave,cantidad,precio from ren_facturas order by clave

Observe que se despliegan solamente las tuplas deseadas 6.- Escriba y ejecute
select clave_cliente, nombre, direccion from clientes

Observe que se despliega el conjunto resultado 7.- Escriba y ejecute


select clientes.clave_cliente, clientes.nombre, clientes.direccion from clientes

Observe que se despliega el mismo conjunto resultado del punto anterior 6. En sta sintaxis se muestra una manera alterna de referirse a una columna que pertenece a una tabla dada. 8.- Escriba y ejecute
select A.clave_cliente, A.nombre, A.direccion from clientes as A

Observe que el resultado es igual al del punto anterior, aqu se esta haciendo uso de la clusula as, que permite implementar alias a una tabla y con esto se puede usar ese nuevo nombre en la consulta en cuestin. 9.- Escriba y ejecute
select clave,nombre,direccion from clientes2

86

Observe que se despliega la informacion de la tabla clientes2 que fue creada en prctica anterior. La columna clave tiene la restriccin identity(100,5), que genera un numero entero que inicia en 100 y se incrementa de 5 en 5 con cada tupla insertada. 10.- Escriba y ejecute
select 'Nombre: ' + nombre + 'Direccion: ' + direccion as 'DATOS GENERALES', identitycol as 'CLAVE DE LA TUPLA' from clientes2

En sta consulta se muestra como poner letreros concatenados con cada valor de columna, y, concatenadas columnas entre s. Adems, se usan alias en la columna concatenada. Finalmente, con la palabra identitycol se extrae el numero automtico que se asigna a cada rengln con el use de la clusula identity. Compare ste resultado con el del punto anterior y observe que son equivalentes en el caso de la columna clave. 11.- Escriba y ejecute
select clave_cliente, nombre into prueba2 from clientes

Esta consulta no despliega el conjunto resultado en pantalla sino que crea una nueva tabla del usuario llamada prueba2 y ah guarda el resultado. 12.- Escriba y ejecute
select * from prueba2

Observe que se despliega el contenido de la tabla que se cre en la consulta anterior. Ejercicio 2: Funciones

87

Como se mencion en la introduccin, hay diferentes tipos de funciones. Con la finalidad de saber cuales estn implementadas y como conocer su sintaxis, se expone el siguiente procedimiento. 1.- Estando en la pantalla de Query Analyzer y si no est elegida la pantalla titulada Object Browser (se est habilitada cirrela, presionando la cruz que tiene en la parte superior derecha), del men principal elija la opcin tools, ponga el sealador del mouse en Object Browser y una vez que est elegida sta opcin, haga clic en Show/hide. Con esto debe aparecer la ventana Object Browser. 2.- Analice el rbol de sta ventana e identifique la carpeta identificada como Common Objects, como subcarpetas de la misma aparecen varias tituladas con las funciones de biblioteca que se tienen implementadas en el SQL-Server. 3.- Por ejemplo, haga clic en el signo + de la carpeta Mathematical Functions. Observe que aparece un listado de las funciones que tiene implementadas. Con ste mtodo puede saber las implementadas en cada grupo de funciones. 4.- Para saber la sintaxis completa de una funcin dada, haga lo siguiente. 5.- En el men principal del Query Analyzer, elija la opcin help, haciendo clic en ella, y posteriormente, elija la opcin Contents and Index. 6.- Aparece la ventana de ayudas, del lado izquierdo aparecen 4 pestaas, elija la titulada search, haciendo clic en ella. 7.- En el espacio en blanco, escriba el nombre de la funcin que desea, por ejemplo teclee cos (para saber lo relacionado con la funcion coseno), y presione el botn titulado: List topics. 8.- Despus de unos momentos, aparece una lista de todos los temas en donde se trata de alguna manera la funcin cos. 9.- En ese lugar puede elegir el tema que le interese relacionado con la funcin buscada, en ste caso uno de los temas tiene COS, haga doble clic en l, y

88

aparece la informacin detallada de la funcin coseno (en ste caso), con la sintaxis completa y con ejemplos. Ejercicio 3: Ejemplos de algunas funciones 1.- Estando en Query Analyzer, elija la base de datos ventas 2.- Escriba y ejecute
select clave, unidades from productos

Se despliega el conjunto resultado con las columnas clave y unidades de la tabla productos. 3.- Escriba y ejecute
select clave, unidades, sqrt(unidades) raiz_cuadrada, cos(unidades) coseno from productos

Esta consulta despliega la clave, las unidades, la raiz cuadrada de las unidades y el coseno de las unidades (las considera como radianes). Observe que ste ejemplo va dirigido a mostrar cmo se aplican las funciones en una consulta, aunque quiz no tenga sentido lo desplegado. 4.- Escriba y ejecute
select no_factura,fecha_fac,dateadd(day,10, fecha_fac),dateadd(month,1,fecha_fac) from facturas

Esta consulta muestra las fechas de cada factura, una columna con la misma fecha pero sumndole 10 das, y, otra sumndole 1 mes. 5.- Escriba y ejecute
select clave_cliente,nombre,substring(nombre,3,5) from clientes

Esta consulta muestra la clave del cliente, el nombre del mismo, y, una

89

subcadena del nombre comenzando desde el carcter en la posicin 3 y de extensin 5 caracteres.

Sugerencias Didcticas: Se sugiere que el Maestro realice las acciones: 1.- Verificacin de la instalacin en cada Computadora del Sistema Administrador de Bases de Datos y la versin electrnica de ste Manual. 2.- Se sugiere que cada alumno cuente con su propia computadora personal con la finalidad de que realice todos los ejercicios personalmente. 3.- Se sugiere que el Maestro haga una induccin sobre el tema de la Prctica indicando los objetivos de aprendizaje que se obtendrn al realizarla. 4.- Se sugiere que los alumnos abran el Sistema Administrador de Bases de Datos, y, este Manual (de preferencia en forma electrnica); con la finalidad de que vayan realizando los ejercicios copiando y pegando los scripts SQL, ejecutndolos y copiando y pegando los resultados de cada uno en la parte de Reporte del Alumno. 5.- Se sugiere que el Maestro asesore a sus Alumnos durante el proceso de realizacin de la Prctica, logrando as una atencin personalizada. 6.- Se sugiere que el Maestro indique a los alumnos que para evaluar la Prctica enven a su correo electrnico (o le entreguen de manera impresa), la parte del Reporte del Alumno (resultados). Indicando el nmero de la Prctica y el nombre del alumno. 7.- Se sugiere que el Maestro evale los resultados obtenidos en la Prctica y registre una calificacin de la misma, tomndola en cuenta en el proceso de

90

evaluacin que haya definido. 8.- Se sugiere que el Maestro indique a los alumnos cmo se debe editar un comando SQL y como ejecutarlo. Asimismo, como copiar y pegar los resultados en la parte de Reporte del Alumno (resultados), todo esto con la finalidad de que los alumnos entiendan el proceso de ejecucin y resultados que deben realizar en todas las prcticas de ste Manual

Reporte del alumno (resultados): En sta parte el alumno registrar los resultados de cada uno de los ejercicios de la Prctica, indicando a qu parte de la Prctica corresponde. El alumno escribir en esta seccin los resultados del Ejercicio 1 puntos 1 a 12, Ejercicio 2 puntos 1 a 9, y, Ejercicio 3 puntos 1 a 5; especificados en la parte Metodologa, indicando el nmero de cada punto que se est reportando.

Bibliografa preliminar: REFERENCIA A MCSE Microsoft SQL-Server 2000 Database Design and Implementation Training Kit Microsoft Press REFERENCIA B The Practical SQL Handbook Using SQL Variants Fourth Edtion Judith S. Bowman, Sandra L. Emerson, Marcy Darnovsky Addison Wesley

91

Nmero de Prctica: 10 Nombre de la Prctica: Uso de tcnicas de consultas avanzadas para el acceso a datos Objetivo Especfico: El alumno conocer, comprender y aplicar la sintaxis de SQL para hacer consultas complejas que involucren varias tablas.

Introduccin: Una vez que se conocen y se aplican los fundamentos de consultas que se han visto en prcticas pasadas, hay que aplicar otras caractersticas de la clusula select. Una de ellas es la relacionada con la combinacin de 2 o mas tablas en una misma consulta. Otra, es implementar subconsultas, que son estatutos select anidados dentro de otro select, un insert, un update o un delete. Hay dos tipos de subconsultas: las subconsultas simples y las subconsultas correlacionadas. Las subconsultas simples son consultas anidadas en otras, pero con la caracterstica de que cada una de ellas solamente hace referencia a atributos de la/las tabla/s que hay en su clusula from. Las subconsutas correlacionadas son consultas anidadas en otras, pero con la caracterstica de que la consulta mas anidada hace referencia a algn atributo de la consulta mas externa. Esto hace que el funcionamiento en la ejecucin de sta sea semejante al de dos ciclos anidados. Las subconsultas tambien pueden anidarse en otras subconsultas. Consulte la referencia A, captulo 6, leccin 2, y, referencia B captulo 4.

92

Correlacin con el /los subtemas del Programa de Estudio Vigente: Esta prctica va dirigida a tratar los subtemas relacionados con la UNIDAD 3: Consultas y Lenguaje de Manipulacin de Datos (DML) Los subtemas tratados son: Subtema 3.3 Consultas sobre mltiples tablas Material y Equipo Necesario: Para realizar la Prctica es necesario contar con el siguiente hardware y software: Computadora Personal Sistema Operativo XP Sistema Administrador de Bases de Datos: Microsoft SQL-Server 2000 CD que acompaa a este Manual

Metodologa: Ejercicio 1: Consulta en mltiples tablas 1.- Ejecute el Query Analyzer y seleccione la base de datos ventas 2.- Se desea implementar en SQL, la consulta: Encuentre el nombre del cliente, la fecha en que compr y los nombres de los productos que compr. 3.- Apoyndose en el modelo relacional de la base de datos ventas, se observa que las columnas que se desean mostrar son: de la tabla clientes el nombre del cliente, de la tabla facturas la fecha de la factura, y, de la tabla productos la descripcin del producto. La consulta es:

93

select A.nombre, B.fecha_fac, D.descripcion from clientes A, facturas B, ren_facturas C, productos D where A.clave_cliente=B.clave_cliente and B.no_factura=C.no_factura and C.clave=D.clave order by B.fecha_fac

Observe que en la clusula from se indican las tablas involucradas. Si bien de la tabla ren_facturas no se va a proyectar ninguna columna, es indispensable incluirla para poder implementar los productos naturales necesarios. Para evitar escribir los nombres de las tablas donde se requieran se utilizan los renombramientos de las tablas indicados de la A a la D, en la clusula from. Puesto que son 4 tablas las indicadas, se requieren 3 productos naturales, que se indican en la clusula where: de la tabla A a la B con los atributos clave_cliente, de la tabla B a la C con los atributos no_factura, y, de la tabla C a la D con el atributo clave. 4.- En este punto se muestra otra sintaxis para implementar la misma consulta anterior. Escriba y ejecute
select A.nombre, B.fecha_fac, D.descripcion from (((clientes A inner join facturas B on A.clave_cliente=B.clave_cliente) inner join ren_facturas C on B.no_factura=C.no_factura) inner join productos D on C.clave=D.clave) order by B.fecha_fac

Observe que se muestran los mismos resultados. En sta consulta se muestra la sintaxis con inner join y con on para implementar los productos naturales. Cabe hacer notar que hay anidamientos de productos naturales indicados con parntesis. Ejercicio 2: Clusulas inner join, left join, right join y full join 1.- Ejecute el Query Analyzer y seleccione la base de datos ventas

94

2.- Para mostrar el uso de stas clusulas se crearn las 2 tablas siguientes, que debe escribir y ejecutar.
create table tabla1 (campo1 campo2 campo3 integer, integer, integer)

insert into tabla1 values(10,100,1000) insert into tabla1 values(20,200,2000) insert into tabla1 values(30,300,3000) insert into tabla1 values(40,300,4000) insert into tabla1 values(50,400,5000)

Esto crea la tabla tabla1 y le inserta algunas tuplas


create table tabla2 (campo10 campo20 integer, integer)

insert into tabla2 values(20,111) insert into tabla2 values(25,222) insert into tabla2 values(30,333) insert into tabla2 values(40,444) insert into tabla2 values(60,555)

Esto crea la tabla tabla2 y le inserta algunas tuplas 3.- Escriba y ejecute
select campo1, campo2, campo3, campo10, campo20 from tabla1 inner join tabla2 on tabla1.campo1=tabla2.campo10

95

Este estatuto mostrar las tuplas que estn en la interseccin de las tablas tabla1 y tabla2, tomando como atributos para implementar el producto natural al campo1 de tabla1, y, a campo10 de tabla2. Como se muestra:
campo1 campo2 campo3 campo10 campo20

20 30 40

200 300 300

2000 3000 4000

20 30 40

111 333 444

Observe que solo muestra las tuplas en donde coinciden los valores de las columnas: campo1 y campo10. No aparecen tuplas con valores nulos. 4.- Escriba y ejecute
select campo1, campo2, campo3, campo10, campo20 from tabla1 left join tabla2 on tabla1.campo1=tabla2.campo10

Este estatuto mostrar las tuplas que estn en la interseccin de las tablas tabla1 y tabla2 (tuplas con valores en todas las columnas) , tomando como atributos para implementar el producto natural al campo1 de tabla1, y, a campo10 de tabla2. Y, las tuplas que pertenecen a tabla1 y que no estn en tabla2 (tuplas que aparecen con valores nulos), como se muestra:
campo1 campo2 campo3 campo10 campo20

10 20 30 40 50

100 200 300 300 400

1000 2000 3000 4000 5000

NULL 20 30 40 NULL

NULL 111 333 444 NULL

5.- Escriba y ejecute


select campo1, campo2, campo3, campo10, campo20 from tabla1 right join tabla2

96

on tabla1.campo1=tabla2.campo10

Este estatuto mostrar las tuplas que estn en la interseccin de las tablas tabla1 y tabla2 (tuplas con valores en todas las columnas) , tomando como atributos para implementar el producto natural al campo1 de tabla1, y, a campo10 de tabla2. Y, las tuplas que pertenecen a tabla2 y que no estn en tabla1 (tuplas que aparecen con valores nulos), como se muestra:
campo1 campo2 campo3 campo10 campo20

20 NULL 30 40 NULL

200 NULL 300 300 NULL

2000 NULL 3000 4000 NULL

20 25 30 40 60

111 222 333 444 555

6.- Escriba y ejecute


select campo1, campo2, campo3, campo10, campo20 from tabla1 full join tabla2 on tabla1.campo1=tabla2.campo10

Este estatuto mostrar las tuplas que estn en la interseccin de las tablas tabla1 y tabla2 (tuplas con valores en todas las columnas) , tomando como atributos para implementar el producto natural al campo1 de tabla1, y, a campo10 de tabla2. Tambien las tuplas que pertenecen a tabla1 y que no estn en tabla1 (tuplas que aparecen con valores nulos en campo10 y campo20). Y tambien, las tuplas que pertenecen a tabla2 y que no estn en tabla1 (tuplas que aparecen con valores nulos en campo1, campo2 y campo3). Como se muestra:
campo1 campo2 campo3 campo10 campo20

10 20 30 40 50

100 200 300 300 400

1000 2000 3000 4000 5000

NULL 20 30 40 NULL

NULL 111 333 444 NULL

97

NULL NULL

NULL NULL

NULL NULL

60 25

555 222

Ejercicio 3: Subconsultas con operadores de comparacin 1.- Ejecute el Query Analyzer y posicinese en la base de datos ventas 2.- Escriba y ejecute
select clave,descripcion,precio from productos where precio = ( select precio from productos where descripcion='Caja de tornillos')

Observe que un estatuto select se encuentra anidado en otro estatuto select, el estatuto mas interno puede ejecutarse independientemente, marque solamente el estatuto select que est entre parntesis y ejectelo, y observe el resultado que es el precio del producto Caja de tornillos. Este precio sustituye al select y se compara (con el operador =) con el operando del where del estatuto select mas externo, el cual despliega informacin de los productos que tienen el mismo precio que el producto Caja de tornillos. 3.- Escriba y ejecute
select clave,descripcion,precio from productos where precio >= ( select precio from productos where descripcion='Caja de tornillos')

Observe que es la misma consulta del punto anterior excepto que el operador de comparacin es ahora mayor o igual que. En ste caso, despliega todos los libros cuyo precio es mayor o igual al del precio del producto 'Caja de tornillos'. De manera similar, se pueden usar subconsultas que comparen con los operadores

98

conocidos. Ejercicio 4: Subconsultas con clusulas in y not in 1.- Ejecute el Query Analyzer y posicinese en la base de datos ventas 2.- Escriba y ejecute
select clave, descripcio from productos where clave in ( select clave from ren_facturas )

Observe que la consulta muestra la consulta encuentre las claves y descripciones de los productos que se han vendido. Esto es, en la consulta mas interna saca una lista de todas las claves de productos que se han vendido y que aparecen en la tabla ren_facturas, esta lista sustituye a la consulta mas interna y la consulta mas externa la recibe con la clusula in, por ello, la consulta mas externa despliega las claves existentes en el archivo productos que existen ah y que se han vendido. 3.- Escriba y ejecute
select clave, descripcion from productos where clave not in ( select clave from ren_facturas )

Observe que la consulta muestra la consulta encuentre las claves y descripciones de los productos que no se han vendido. Esto es, en la consulta mas interna saca una lista de todas las claves de productos que se han vendido y que aparecen en la tabla ren_facturas, esta lista sustituye a la consulta mas interna y la consulta mas externa la recibe con la clusula in, por ello, la consulta mas externa despliega las claves existentes en el archivo productos que existen ah y que no se han vendido.

99

Ejercicio 5: Subconsultas con clusulas any y all 1.- Ejecute el Query Analyzer y posicinese en la base de datos ventas 2.- Escriba y ejecute
select * from ren_facturas order by clave

Observe que de la clave CL120 hay 3 tuplas en donde hubo ventas, la menor venta fue de 6 unidades. 3.- Se desean identificar a todas las facturas en donde la venta en unidades del producto CL120 sea mayor a la menor de las ventas en unidades. Para ello, escriba y ejecute
select no_factura, cantidad from ren_facturas where clave='CL120' and cantidad > any (select cantidad from ren_facturas where clave='CL120')

Observe que la consulta mas interna despliega las cantidades vendidas del producto CL120 de todos los renglones de facturas, la consulta mas externa muestra los nmeros de factura y la cantidad vendida de todos aquellos renglones de facturas de la clave CL120 y con cantidad mayor a cualquiera de la lista recibida de la consulta mas interna, esto se obtiene con >any. 4.- Escriba y ejecute
select * from productos where precio > all (select precio from ren_facturas)

Observe que la consulta mas interna saca una lista de los precios de los

100

productos que se han vendido y que aparecen en la tabla ren_facturas, la consulta mas externa recibe esa lista y despliega la informacin de todos los productos cuyo precio sea mayor a todos los productos que devolvi la consulta mas interna. Ejercicio 6: Subconsultas con clusulas exists y not exists 1.- Ejecute el Query Analyzer y posicinese en la base de datos ventas 2.- Escriba y ejecute
select clave_cliente, nombre from clientes where clave_cliente=50 and exists ( select * from facturas where clave_cliente=50 )

La clusula exists prueba la existencia de tuplas de la subconsulta involucrada. Marque y ejecute la subconsulta que est entre parntesis. Esta despliega las facturas que tiene el cliente 50. La consulta mas externa despliega la clave del cliente y el nombre del cliente 50 y del cual al menos exista una tupla devuelta por la consulta mas interna. 3.- Escriba y ejecute
select clave_cliente, nombre from clientes where clave_cliente=10 and not exists ( select * from facturas where clave_cliente=10 )

La clusula not exists determina el complemento de la clusula exists. Para este ejemplo marque y ejecute la subconsulta que est entre parntesis. Esta intenta sacar las tuplas de facturas del cliente 10, pero no hay, por lo que se concluye que este cliente aun no ha comprado productos. La subconsulta entonces no

101

manda tuplas a la consulta mas externa, esta a su vez, despliega la clave y el nombre del cliente 10 debido a que al no haber tuplas el not exists se convierte en verdadero. Ejercicio 7: Subconsultas correlacionadas 1.- Ejecute el Query Analyzer y posicinese en la base de datos ventas 2.- Esta subconsulta correlacionada va dirigida a implementar una usando la clusula exists. Escriba y ejecute
select nombre from clientes where exists ( select * from facturas where facturas.clave_cliente = clientes.clave_cliente )

Esta subconsulta despliega los nombres de los clientes que tienen al menos una factura. Se hace notar que en la subconsulta mas interna se hace referencia al atributo clientes.clave_cliente que pertenece a la tabla de la consulta mas externa. Observe el funcionamiento de la consulta correlacionada, se ejecuta como si fueran 2 ciclos anidados. Esto es, toma una tupla de la consulta mas externa y hace la comparacin indicada en el where de la consulta mas interna, para todas y cada una de las tuplas de la misma. Despus, toma la siguiente tupla de la consulta mas externa y repite la operacin de comparacin con todas las tuplas de la consulta mas interna; y as sucesivamente. Obviamente de acuerdo a la comparacin la prueba de existencia con la clusula exists se cumple o no y se despliega o no la informacin indicada en la consulta mas externa. 3.- Esta subconsulta va dirigida a implementar una utilizando la clusula in.

102

Escriba y ejecute
select clave_cliente, nombre from clientes where 6480.00 in ( select monto from facturas where facturas.clave_cliente = clientes.clave_cliente )

Esta consulta despliega la clave de los clientes y el nombre de los mismos que tengan al menos una factura donde el monto sea igual a 6480.00. Observe que es una correlacin porque en la consulta mas interna se hace referencia a un atributo de la tabla de la consulta mas externa. 4.- Esta subconsulta va dirigida a implementar una utilizando la clusula not in. Escriba y ejecute
select clave_cliente, nombre from clientes where 6480.00 not in ( select monto from facturas where facturas.clave_cliente = clientes.clave_cliente )

Observe que en los resultados aparecen los clientes que no tuvieron facturas (10,20,70,90), stos salen por que no estn en la lista. Por otra parte, no sale el 50 debido a que si bien tiene 3 ventas, una cumple con la condicin de que es de monto 6480.00 5.- Esta ejemplo va dirigido a implementar una subconsulta correlacionada en donde se hace referencia en las 2 consultas a la misma tabla. Escriba y ejecute
select clave_cliente,nombre,ciudad from clientes order by ciudad

103

En el resultado desplegado se muestra que hay 2 clientes que viven en Celaya, 2 en Guadalajara y 4 en Len, 1 en Quertaro y 1 en Monterrey. La siguiente consulta despliega las ciudades en donde viven 2 o mas clientes:
select distinct A.ciudad from clientes A where A.ciudad in ( select B.ciudad from clientes B where B.clave_cliente <> A.clave_cliente )

En el resultado se observa que aparecen solamente: Celaya, Guadalajara y Len lo cual concuerda con lo anterior. Observe que en la clusula where de la consulta mas interna el operador de comparacin es diferente que lo cual evita que aparezcan las tuplas de la comparacin de un cliente de la consulta mas externa con el mismo cliente de la mas interna. 6.- La siguiente subconsulta correlacionada muestra un agrupamiento y una comparacin de grupos. Escriba y ejecute

select A.clave_cliente, max(A.monto) from facturas A group by A.clave_cliente having max(monto) > ( select avg(B.monto) from facturas B where B.clave_cliente=A.clave_cliente )

Esta subconsulta determina las claves de cliente y el monto mas alto de todas sus facturas y las agrupa por cliente y compara que el maximo monto de todas las facturas de cada cliente sea mayor al promedio de todas sus facturas. 7.- La siguiente subconsulta correlacionada muestra una comparacin en donde uno de los operandos es una subconsulta. Escriba y ejecute

104

select clave_cliente, nombre from clientes where ( select count(*) from facturas where facturas.clave_cliente=clientes.clave_cliente ) > 1

Esta subconsulta despliega la informacin de clientes en donde tienen mas de una factura capturada. Los clientes que no tienen facturas capturadas o que tienen una, no salen en la consulta. Ejercicio 8: Subconsultas anidadas en clusulas insert, update y delete 1.- Ejecute el Query Analyzer y posicinese en la base de datos ventas 2.- Escriba y ejecute
update productos set precio = precio * 0.8 where clave in (select clave from productos where unidades<100)

Esta consulta anidada extrae la lista de claves de productos que tienen en existencia menos de 100 unidades, y, la devuelve al estatuto mas externo que actualiza los precios de esa lista haciendo un descuento del 20%. 3.- Escriba y ejecute:
update productos set productos.precio=productos.precio * 0.8 from productos, productos B where productos.clave=B.clave and B.unidades < 100

105

Observe que hace lo mismo que el estatuto anterior, pero utilizando producto natural en lugar de subconsulta. 4.- Escriba y ejecute
insert into clientes select 200, descripcion,'Av. Mariano Escobedo 200','Centro','Len','Gto.',38800 from productos where clave='MM100'

La subconsulta devuelve al insert una tupla que inserta en la tabla clientes. Observe que los datos son hipotticos. Funcionara de la misma manera si la subconsulta devolviera varias tuplas. 5.- Escriba y ejecute
delete from clientes where clave_cliente in ( select clave_cliente from clientes where nombre like 'Mesa' )

Observe que la subconsulta mas interna devuelve una tupla con la clave del cliente de nombre Mesa, el delete borra todas las tuplas de la tabla clientes en donde la clave del cliente est en la lista devuelta por la subconsulta mas interna.

Ejercicio 9: Subconsultas con mltiples niveles de anidamiento 1.- Ejecute el Query Analyzer y posicinese en la base de datos ventas 2.- Esta consulta va dirigida a mostrar varios niveles de anidamientos de subconsultas. Escriba y ejecute
select *

106

from facturas where no_factura in ( select no_factura from ren_facturas where clave in (select clave from productos ))

Observe que se despliega la informacin de todas y cada una de las facturas. La consulta mas interna saca la calve de productos en una lista que recibe la consulta inmediata superior, que a su vez saca una lista de nmeros de facturas, que recibe la consulta mas externa y que a su vez despliega la informacin de facturas. La siguiente consulta realiza exactamente la misma accin:
select distinct facturas.* from facturas, ren_facturas, productos where facturas.no_factura=ren_facturas.no_factura and ren_facturas.clave=productos.clave

Sugerencias Didcticas: Se sugiere que el Maestro realice las acciones: 1.- Verificacin de la instalacin en cada Computadora del Sistema Administrador de Bases de Datos y la versin electrnica de ste Manual. 2.- Se sugiere que cada alumno cuente con su propia computadora personal con la finalidad de que realice todos los ejercicios personalmente. 3.- Se sugiere que el Maestro haga una induccin sobre el tema de la Prctica indicando los objetivos de aprendizaje que se obtendrn al realizarla. 4.- Se sugiere que los alumnos abran el Sistema Administrador de Bases de Datos, y, este Manual (de preferencia en forma electrnica); con la finalidad de

107

que vayan realizando los ejercicios copiando y pegando los scripts SQL, ejecutndolos y copiando y pegando los resultados de cada uno en la parte de Reporte del Alumno. 5.- Se sugiere que el Maestro asesore a sus Alumnos durante el proceso de realizacin de la Prctica, logrando as una atencin personalizada. 6.- Se sugiere que el Maestro indique a los alumnos que para evaluar la Prctica enven a su correo electrnico (o le entreguen de manera impresa), la parte del Reporte del Alumno (resultados). Indicando el nmero de la Prctica y el nombre del alumno. 7.- Se sugiere que el Maestro evale los resultados obtenidos en la Prctica y registre una calificacin de la misma, tomndola en cuenta en el proceso de evaluacin que haya definido. 8.- Se sugiere que el Maestro indique a los alumnos cmo se debe editar un comando SQL y como ejecutarlo. Asimismo, como copiar y pegar los resultados en la parte de Reporte del Alumno (resultados), todo esto con la finalidad de que los alumnos entiendan el proceso de ejecucin y resultados que deben realizar en todas las prcticas de ste Manual

Reporte del alumno (resultados): En sta parte el alumno registrar los resultados de cada uno de los ejercicios de la Prctica, indicando a qu parte de la Prctica corresponde. El alumno escribir en esta seccin los resultados del ejercicio 1 puntos 1 a 14, Ejercicio 2 puntos 1 a 6, Ejercicio 3 puntos 1 a 3, y, Ejercicio 4 puntos 1 a 3, Ejercicio 5 puntos 1 a 4, Ejercicio 6 puntos 1 a 3, Ejercicio 7 puntos 1 a 7, Ejercicio 8 puntos 1 a 5, Ejercicio 9 puntos 1 a 2; especificados en la parte Metodologa, indicando el nmero de cada punto que se est reportando.

108

Bibliografa preliminar: REFERENCIA A MCSE Microsoft SQL-Server 2000 Database Design and Implementation Training Kit Microsoft Press

REFERENCIA B The Practical SQL Handbook Using SQL Variants Fourth Edtion Judith S. Bowman, Sandra L. Emerson, Marcy Darnovsky Addison Wesley

109

Nmero de Prctica: 11 Nombre de la Prctica: Agrupamientos de datos. Objetivo Especfico: El alumno agrupar datos de una base de datos y utilizar las herramientas de SQL para su implementacin.

Introduccin: La clusula group by se usa para producir valores agregados para cada rengln en el conjunto resultado. Cuando se usan funciones agregadas sin un group by, reporta solamente un valor agregado para un estatuto select. Despus de las palabras group by se pone una lista de columnas que son las columnas de agrupamiento. El group by restringe los renglones del conjunto resultado. Hay solamente un rengln para cada valor distinto en la/s columna/s agrupada/s. Cada rengln del conjunto resultado contiene datos sumarizados relacionados al valor especfico de su/s columna/s agrupada/s. La clusula having es para el group by como la clusula where es para el from, esto es, la clusula having especifica condiciones para grupos. Esto es, la clusula where se usa para filtrar renglones que resultan de las operaciones especificadas en una clusula where; la clusula group by se usa para agrupar la salida de una clusula where, y, la clusula having se usa para filtrar los renglones de un conjunto agrupado. En una clusula group by, se deben especificar el nombre de una columna de una tabla o vista, no el nombre de una columna resultado asignada con una clusula as. Se pueden enlistar mas de una columna en el group by para anidar grupos, esto es, se puede agrupar una tabla por cualquiera combinacin de columnas. Si es necesario aplicar en la consulta alguna filtro o restriccin sobre los datos,

110

se recomienda usar una clusula where (antes de agrupar) con la finalidad de reducir el nmero de renglones que deben agruparse. Las restricciones que se deben especificar en una clsula having deben ser aquellas en las que se deben aplicar despus del agrupamiento. La clusula order by realiza un ordenamiento en el resultado de una consulta dada, hacindolo en una o varias columnas. Puede ser ascendente o descendente (es ascendente por default). Si en el ordenamiento se especifican mas de una columna, los ordenamientos se anidan.

Consulte la referencia A, captulo 6, leccin 1, y, referencia B captulos 5 y 6.

Correlacin con el /los subtemas del Programa de Estudio Vigente: Esta prctica va dirigida a tratar los subtemas relacionados con la UNIDAD 3: Consultas y Lenguaje de Manipulacin de Datos (DML) Los subtemas tratados son: Subtema 3.4 Agregacin GROUP BY, HAVING

Material y Equipo Necesario: Para realizar la Prctica es necesario contar con el siguiente hardware y software: Computadora Personal Sistema Operativo XP Sistema Administrador de Bases de Datos: Microsoft SQL-Server 2000 CD que acompaa a este Manual

111

Metodologa: Ejercicio 1: Ordenamientos 1.- Ejecute el Query Analyzer y seleccione la base de datos ventas 2.- Escriba y ejecute
select clave_cliente, nombre, direccion, colonia, ciudad, estado from clientes order by nombre

Observe que los resultados de sta consulta estn ordenados por nombre de manera ascendente 3.- Escriba y ejecute
select clave_cliente, nombre, direccion, colonia, ciudad, estado from clientes order by nombre asc

La nica diferencia que tiene esta consulta sobre la anterior es el uso de la clusula asc ( o ascendent) que lo que hace es indicar que el orden es ascendente. Por supuesto que en ausencia de la clusula asc, es la condicin que el ordenamiento toma por omisin. 4.- Escriba y ejecute
select clave_cliente, nombre, direccion, colonia, ciudad, estado from clientes order by nombre desc

La nica diferencia que tiene esta consulta sobre la anterior es el uso de la

112

clusula desc ( o descendent) que lo que hace es indicar que el orden es descendente. 5.- Escriba y ejecute
select clave_cliente, nombre, direccion, colonia, ciudad, estado from clientes order by estado, colonia

En sta consulta el ordenamiento primario es por estado ascendente, y, en los valores de estado iguales, el ordenamiento secundario es por colonia ascendente. 6.- Escriba y ejecute
select clave_cliente, nombre, direccion, colonia, ciudad, estado from clientes order by estado, colonia desc

En sta consulta el ordenamiento primario es por estado ascendente, y, en los valores de estado iguales, el ordenamiento secundario es por colonia descendente. Ejercicio 2: Agrupamientos 1.- Ejecute el Query Analyzer y seleccione la base de datos ventas 2.- Escriba y ejecute
select no_factura, count(*),count(precio),avg(precio),min(precio),max(precio),sum(cantidad) from ren_facturas group by no_factura

En sta consulta se est haciendo un agrupamiento por no_factura en la tabla

113

ren_facturas, en sta hay varios renglones para la misma factura. Por cada grupo de no_factura, se determinan cuntos renglones tiene, cuntos precios hay (sin valor nulo), el promedio de los precios de venta, el precio mas pequeo, el mas grande, y, la suma de unidades vendidas por factura. 3.- Escriba y ejecute
select B.observaciones, A.nombre, count(*) from clientes A, facturas B where A.clave_cliente=B.clave_cliente group by B.observaciones,A.nombre order by B.observaciones

Esta consulta determina cuntas facturas hay por cada forma de pago y cliente. En sta hay un agrupamiento por 2 columnas: observaciones y nombre de diferente tabla, y, con la funcin agregada count determina la cantidad de facturas que tiene cada forma de pago y cliente. Observe que el agrupamiento se hace por las 2 columnas mencionadas. El ordenamiento est hecho por la columna observaciones y es opcional. 4.- Escriba y ejecute
select B.observaciones, A.nombre, count(*) from clientes A, facturas B where A.clave_cliente=B.clave_cliente and fecha_fac>'2006-07-26' group by B.observaciones,A.nombre having count(*) > 1 order by B.observaciones

En sta consulta se observa que es igual a la anterior excepto que ahora hay una clusula where que lo que hace es que antes de agrupar selecciona las facturas con fecha mayor a 2006-07-26, despus agrupa y aplica la condicin indicada en el having.

114

Sugerencias Didcticas: Se sugiere que el Maestro realice las acciones: 1.- Verificacin de la instalacin en cada Computadora del Sistema Administrador de Bases de Datos y la versin electrnica de ste Manual. 2.- Se sugiere que cada alumno cuente con su propia computadora personal con la finalidad de que realice todos los ejercicios personalmente. 3.- Se sugiere que el Maestro haga una induccin sobre el tema de la Prctica indicando los objetivos de aprendizaje que se obtendrn al realizarla. 4.- Se sugiere que los alumnos abran el Sistema Administrador de Bases de Datos, y, este Manual (de preferencia en forma electrnica); con la finalidad de que vayan realizando los ejercicios copiando y pegando los scripts SQL, ejecutndolos y copiando y pegando los resultados de cada uno en la parte de Reporte del Alumno. 5.- Se sugiere que el Maestro asesore a sus Alumnos durante el proceso de realizacin de la Prctica, logrando as una atencin personalizada. 6.- Se sugiere que el Maestro indique a los alumnos que para evaluar la Prctica enven a su correo electrnico (o le entreguen de manera impresa), la parte del Reporte del Alumno (resultados). Indicando el nmero de la Prctica y el nombre del alumno. 7.- Se sugiere que el Maestro evale los resultados obtenidos en la Prctica y registre una calificacin de la misma, tomndola en cuenta en el proceso de evaluacin que haya definido. 8.- Se sugiere que el Maestro indique a los alumnos cmo se debe editar un comando SQL y como ejecutarlo. Asimismo, como copiar y pegar los resultados en la parte de Reporte del Alumno (resultados), todo esto con la finalidad de que los alumnos entiendan el proceso de ejecucin y resultados que deben realizar

115

en todas las prcticas de ste Manual

Reporte del alumno (resultados): En sta parte el alumno registrar los resultados de cada uno de los ejercicios de la Prctica, indicando a qu parte de la Prctica corresponde. El alumno escribir en esta seccin los resultados del ejercicio 1 puntos 1 a 6, y, Ejercicio 2 puntos 1 a 4; especificados en la parte Metodologa, indicando el nmero de cada punto que se est reportando.

Bibliografa preliminar: REFERENCIA A MCSE Microsoft SQL-Server 2000 Database Design and Implementation Training Kit Microsoft Press

REFERENCIA B The Practical SQL Handbook Using SQL Variants Fourth Edtion Judith S. Bowman, Sandra L. Emerson, Marcy Darnovsky Addison Wesley

116

Nmero de Prctica: 12 Nombre de la Prctica: : Funciones agregadas en consultas simples y en agrupamientos Objetivo Especfico: El alumno aplicar las funciones agregadas para hacer consultas complejas en sus bases de datos Introduccin: Las funciones agregadas permiten ser usadas para obtener valores sumarizados. Se aplican agregados a conjuntos de renglones: a todos los renglones de una tabla, a algunos renglones especificados por una clusula where, o a grupos de renglones seleccionados con una clusula group by. No importa como se estructuran los conjuntos, se obtiene un valor por cada conjunto de renglones. Tomando en cuenta que lo indicado entre corchetes es opcional, los formatos de las funciones agregadas son: sum ( [distinct] expresin ) Calcula la suma del total de valores [distinct] en la expresin numrica. Calcula el promedio de los valores [distinct] no nulos en la expresin. Calcula el nmero de los valores [distinct] en la expresin numrica. Calcula el nmero de renglones seleccionados Calcula el valor mas grande en la expresin

avg ( [distinct] expresin )

count ( [distinct] expresin )

count ( * )

max ( expresin )

117

min ( expresin )

Calcula el valor mas pequeo en la expresin

Diferencia entre count y count(*).- Count toma una expresin (un nombre de columna simple o una combinacin mas compleja de elementos) como un argumento y descubre todas las ocurrencias no nulas de ese argumento. Count(*) siempre toma un asterisco como el argumento y cuenta todos los renglones aunque alguna columna particular tenga valores nulos. Sumarizacin de datos.- Hay varios elementos que permiten generar reportes que sumaricen informacin. Algunos estatutos SQL que permiten eso son: cube, rollup y compute; los cuales estn asociados con la clusula group by. Cube: Genera un conjunto resultado que es un cubo multidimensional. Un cubo multidimensional es una expansin de datos de hechos, o datos que registran eventos individuales. La expansin se base en columnas que el usuario quiere analizar. A stas columnas se les llama dimensiones. El cubo es un conjunto resultado que contiene una tabulacin en cruz de todas las posibles combinaciones de las dimensiones. Rollup: Es til para generar reportes que contienen subtotales y totales, genera un conjunto resultado que es similar al generado por el operador cube. Las diferencias entre el cube y el rollup son: cube genera un conjunto resultado que muestra agregados para todas las combinaciones de valores en las columnas seleccionadas, y, rollup genera un conjunto resultado que muestra agregados para una jerarqua de valores en las columnas seleccionadas. Compute: Genera totales que aparecen al final de cada conjunto resultado, cuando se usa con by, genera subtotales en el conjunto resultado.

Consulte la referencia A, captulo 6, leccin 1, y, referencia B captulos 5 y 6.

118

Correlacin con el /los subtemas del Programa de Estudio Vigente: Esta prctica va dirigida a tratar los subtemas relacionados con la UNIDAD 3: Consultas y Lenguaje de Manipulacin de Datos (DML) Los subtemas tratados son: Subtema 3.5 Funciones de conjunto de registros:COUNT,SUM,AVG,MAX,MIN

Material y Equipo Necesario: Para realizar la Prctica es necesario contar con el siguiente hardware y software: Computadora Personal Sistema Operativo XP Sistema Administrador de Bases de Datos: Microsoft SQL-Server 2000 CD que acompaa a este Manual

Metodologa: Ejercicio 1: Funciones Agregadas 1.- Ejecute el Query Analyzer y seleccione la base de datos ventas 2.- Escriba y ejecute
select sum(monto) from facturas

Esta consulta calcula la suma total de los valores de la columna monto de la

119

tabla facturas. Si hay valores nulos no los considera en el calculo. 3.- Escriba y ejecute
select avg(monto) from facturas

Esta consulta calcula el promedio de los valores de la columna monto de la tabla facturas. Si hay valores nulos no los considera en el calculo. 4.- Escriba y ejecute
select min(monto) from facturas

Esta consulta calcula el valor mas pequeo de los valores de la columna monto de la tabla facturas. Si hay valores nulos no los considera en el calculo. 5.- Escriba y ejecute
select max(monto) from facturas

Esta consulta calcula el valor mas pequeo de los valores de la columna monto de la tabla facturas. Si hay valores nulos no los considera en el calculo. 6.- Escriba y ejecute
select min(monto) from facturas

Esta consulta calcula el valor mas pequeo de los valores de la columna monto de la tabla facturas. Si hay valores nulos no los considera en el calculo. 7.- Escriba y ejecute

120

insert into productos values ('MM400','prueba',0,0,null)

Se inserta una nueva tupla con un valor nulo en la columna precio. Verifique este valor con una clusula select. 8.- Escriba y ejecute
select count(*) from productos

Calcula la cuenta de tuplas existentes en la tabla productos. 9.- Escriba y ejecute


select count(precio) from productos

Calcula la cuenta de valores existentes de la columna precio en la tabla productos, observe que no cuenta las tuplas en donde hay valores nulos en la columna precio. 10.- Escriba y ejecute
select count(distinct precio) from productos

Calcula la cuenta de valores distintos existentes de la columna precio en la tabla productos, observe que hay tres renglones con precios iguales y uno valor nulo en la columna precio, por lo que la cuenta toma en cuenta esto. Ejercicio 2: Sumarizacin 1.- Ejecute el Query Analyzer y seleccione la base de datos ventas

121

2.- Escriba y ejecute


select no_factura, fecha_fac, observaciones, clave_cliente, monto from facturas

Esta consulta despliega informacin de la tabla de facturas, observe que hay facturas, de clientes repetidos, y, en en la columna observaciones que muestra pagos de contado y a crdito. 3.- Escriba y ejecute
select clave_cliente,observaciones,sum(monto) from facturas group by clave_cliente,observaciones

Esta consulta agrupa la informacin por clave_cliente y observaciones, y, por cada grupo despliega la suma de los montos facturados. 4.- Escriba y ejecute
select clave_cliente,observaciones,sum(monto) from facturas group by clave_cliente,observaciones with cube

Observe que adems de la agrupacin por clave_cliente y observaciones, se muestra un subtotal por cada uno de los grupos de clave_cliente y observaciones, y, otro subtotal por cada clave_cliente. Adems, al final aparece un valor que sumariza el total por todas las tuplas, y, un subtotal por cada grupo de observaciones. 5.- Escriba y ejecute
select clave_cliente,observaciones,sum(monto) from facturas

122

group by clave_cliente,observaciones with rollup

Observe que adems de la agrupacin por clave_cliente y observaciones, se muestra un subtotal por cada uno de los grupos de clave_cliente y observaciones. Adems, al final aparece un valor que sumariza el total por todas las tuplas. Observe las diferencias con la clsula cube. 6.- Escriba y ejecute
select clave_cliente,observaciones,monto from facturas order by clave_cliente,observaciones compute sum(monto) by clave_cliente,observaciones compute sum(monto) by clave_cliente compute sum(monto)

Observe que en sta consulta no hay un agrupamiento, se despliegan todas las tuplas; hay un ordenamiento de todas las tuplas por clave_cliente y observaciones. En los resultados se despliegan subtotales por cada grupo de observaciones, por cada grupo de clave_cliente; y, por todas las tuplas. Una mejor manera de observar los resultados consiste en elegir en el men principal del Query Analizar lo siguiente: Query -> Results in text Pruebe a ejecutar el estatuto sql primero hasta la clusula order by, y despus ir incluyendo en la consulta las clusulas compute by una a una. Observe las diferencias.

Sugerencias Didcticas: Se sugiere que el Maestro realice las acciones:

123

1.- Verificacin de la instalacin en cada Computadora del Sistema Administrador de Bases de Datos y la versin electrnica de ste Manual. 2.- Se sugiere que cada alumno cuente con su propia computadora personal con la finalidad de que realice todos los ejercicios personalmente. 3.- Se sugiere que el Maestro haga una induccin sobre el tema de la Prctica indicando los objetivos de aprendizaje que se obtendrn al realizarla. 4.- Se sugiere que los alumnos abran el Sistema Administrador de Bases de Datos, y, este Manual (de preferencia en forma electrnica); con la finalidad de que vayan realizando los ejercicios copiando y pegando los scripts SQL, ejecutndolos y copiando y pegando los resultados de cada uno en la parte de Reporte del Alumno. 5.- Se sugiere que el Maestro asesore a sus Alumnos durante el proceso de realizacin de la Prctica, logrando as una atencin personalizada. 6.- Se sugiere que el Maestro indique a los alumnos que para evaluar la Prctica enven a su correo electrnico (o le entreguen de manera impresa), la parte del Reporte del Alumno (resultados). Indicando el nmero de la Prctica y el nombre del alumno. 7.- Se sugiere que el Maestro evale los resultados obtenidos en la Prctica y registre una calificacin de la misma, tomndola en cuenta en el proceso de evaluacin que haya definido. 8.- Se sugiere que el Maestro indique a los alumnos cmo se debe editar un comando SQL y como ejecutarlo. Asimismo, como copiar y pegar los resultados en la parte de Reporte del Alumno (resultados), todo esto con la finalidad de que los alumnos entiendan el proceso de ejecucin y resultados que deben realizar en todas las prcticas de ste Manual

124

Reporte del alumno (resultados): En sta parte el alumno registrar los resultados de cada uno de los ejercicios de la Prctica, indicando a qu parte de la Prctica corresponde. El alumno escribir en esta seccin los resultados del ejercicio 1 puntos 1 a 6, y, Ejercicio 2 puntos 1 a 4; especificados en la parte Metodologa, indicando el nmero de cada punto que se est reportando.

Bibliografa preliminar: REFERENCIA A MCSE Microsoft SQL-Server 2000 Database Design and Implementation Training Kit Microsoft Press

REFERENCIA B The Practical SQL Handbook Using SQL Variants Fourth Edtion Judith S. Bowman, Sandra L. Emerson, Marcy Darnovsky Addison Wesley

125

Nmero de Prctica: 13 Nombre de la Prctica: : Arquitectura de transacciones y bloqueos Objetivo Especfico: El alumno conocer y comprender las herramientas de SQL para implementar transacciones, adems, conocer y comprender los conceptos de concurrencia en bases de datos.

Introduccin: El uso de los conceptos relacionados con transacciones y bloqueos garantiza la consistencia y la integridad de las bases de datos, a pesar de errores que pudieran ocurrir en un sistema. Una transaccin es una unidad lgica de trabajo que consiste de una serie de estatutos, tales como select o update. Es un conjunto de estatutos SQL que se tratan como una unidad. Para soportar el procesamiento transaccional, existen una serie de componentes, incluyendo archivos de transacciones, control de concurrencia, bloqueos, y, soporte para consultas distribuidas. Ver Referencia C, captulo 15, secciones 15.1 y 15.2. Los bloqueos previenen conflictos de tal manera que los usuarios no puedan leer o modificar datos que otros usuarios tienen en el proceso de cambio. Las transacciones usan bloqueos para prevenir que los usuarios modifiquen datos afectados por transacciones que no han sido completadas. El registro de las transacciones en su archivo, soporta las operaciones: Recuperacin de transacciones individuales.- Si una aplicacin ejecuta un rollback o si el Sistema Administrador de Bases de Datos detecta un error, los registros en el archivo de transacciones se utilizan para recuperar cualquier modificacin hecha durante una transaccin incompleta.

126

Recuperacin de todas las transacciones incompletas cuando se inicia el Sistema Administrador de Bases de Datos.- Si el servidor de datos falla, las bases de datos podran ser dejadas en un estado donde algunas modificaciones nunca fueron escritas desde el buffer a los archivos de datos, y podran haber algunas modificaciones de transacciones incompletas en los archivos de datos. Cuando un Sistema Administrador de bases de datos se inicia, ejecuta un proceso de recuperacin de cada base de datos. Cada modificacin registrada en el archivo de transacciones que no fue escrita a los archivos de datos se realiza. Cada transaccin incompleta encontrada en el archivo de transacciones es revertida para asegurar que la integridad de la base de datos se preserve.

Ejecucin hacia delante de una base de datos restaurada hacia el punto de la falla.- Despus de la prdida de una base de datos (por alguna causa), se puede restaurar la base de datos al punto de la falla. Primero se restaura el ltimo respaldo de la base de datos y despus la secuencia de respaldos del archivo de transacciones hasta el punto de la falla. Se van re-aplicando todas las modificaciones guardadas en el archivo hasta ejecutar todas las transacciones. Archivo de transacciones write-ahead (escribir en adelanto) El mecanismo implementado en este tipo de archivos, asegura que ninguna modificacin de datos sea escrita en el disco antes del registro de transaccin asociado. El Sistema Administrador de bases de datos mantiene un buffer cache en el cual se leen pginas de datos cuando algunos datos deben recuperarse. Las modificaciones a datos no son hechas directamente al disco sino en su lugar se hacen a una copia de la pgina en el buffer cache. La modificacin no es escrita en el disco hasta que en la base de datos se ponga un punto de chequeo (checkpoint) o hasta que las modificaciones hayan sido escritas al disco de tal manera que el buffer pueda se usado para sostener una pgina nueva. Escribir una pgina de datos modificada desde el buffer cache al disco es un proceso que se llama descargar (flushing) la pgina. Una pgina modificada en el cache pero no aun escrita en disco es llamada una pgina sucia.

127

A la vez que una modificacin es hecha a la pgina en el buffer, un registro de transaccin se construye en el cache del archivo de transaccin y graba la modificacin. Este registro debe ser escrito al disco antes de que la pgina sucia asociada sea descargada desde el buffer cache al disco. Si la pgina sucia fuera descargada antes del registro de transaccin, creara una modificacin el disco a la cual no se le podra hacer rollback si el servidor fallara antes de que el registro de transaccin fuera escrito al disco. El sistema administrador de base de datos previene que una pgina sucia sea descargada antes del registro de transaccin asociado. Debido a que el registro de la transaccin siempre se escribe en adelanto de las pginas de datos asociadas, el registro de transaccin (log) se llama registro de transaccin write-ahead. Arquitectura lgica del registro de transaccin El registro de transaccin opera lgicamente como si fuera una cadena en serie de registros de transacciones. Un nmero de secuencia de transaccin (LSN) identifica a cada registro de transaccin. Cada registro de transaccin nuevo se escribe al final lgico del archivo de transacciones con un LSN mayor que el LSN del registro anterior. Registros de transacciones para modificaciones de datos graban ya sea la operacin lgica ejecutada o graban las imgenes antes y despus de los datos modificados. Una imagen anterior es una copia de los datos antes de que la operacin se ejecutara; una imagen posterior es una copia de los datos despus de que la operacin ha sido ejecutada. Hay varios tipos de operaciones que se graban en el archivo de transacciones: - El inicio y el fin de cada transaccin - Cada modificacin de datos (insert, update o delete) - Cada asignacin (o desasignacin) de espacio de disco - La creacin o eliminacin de una tabla o ndice Los registros de transaccin se almacenan en una secuencia en serie como

128

hayan sido creados. Cada transaccin reserva espacio en el archivo de transaccin para asegurar que haya suficiente espacio de transaccin para soportar un rollback si un error ocurre. Este espacio reservado es liberado cuando la transaccin se completa. La cantidad de espacio reservado depende de las operaciones ejecutadas en la transaccin, pero es generalmente igual a la cantidad de espacio usado para grabar cada operacin. Puntos de verificacin (checkpoints) y la parte activa del archivo de transacciones. Los puntos de verificacin minimizan la parte del archivo de transacciones que deben ser procesados durante la recuperacin total de la base de datos. Durante sta, se deben ejecutar las acciones: El archivo de transacciones contiene los registros de las modificaciones que no fueron descargadas a disco antes de que el sistema se detuviera. Estas modificaciones deben ser revertidas (rollback). Todas las modificaciones asociadas con transacciones incompletas (transacciones donde no hay registros de commit o rollback) deben ser revertidas (rollback). Los puntos de verificacin descarga datos sucios y pginas de transacciones desde el cache del buffer de la base de datos actual, minimizando el nmero de modificaciones que van a ser ejecutadas (rolled forward) durante una recuperacin. Un punto de verificacin escribe en el archivo de transacciones un registro que marca el inicio del punto de verificacin y almacena la informacin grabada para el punto de verificacin en una cadena de registros de transacciones de puntos de verificacin. El punto de verificacin ocurre para los eventos: Cuando un estatuto checkpoint se ejecuta. Cuando un estatuto alter database se usa para cambiar una opcin de base de datos.

129

Cuando una instancia de SQL-Server se detiene ejecutando un estatuto shutdown o cuando se usa el Service Manager (Administrador de Servicios) para detener el servicio. Cuando una instancia de SQL-Server genera peridicamente puntos de verificacin en cada base de datos para reducir la cantidad de tiempo que la instancia tomara para recuperar la base de datos. SQL-Server genera automticamente puntos de verificacin. El intervale entre puntos de verificacin automticos se base en el nmero de registros en el archivo de transacciones, no en la cantidad de tiempo. Ese intervalo puede variar, puede ser grande si se hace pocas modificaciones en la base de datos. Puntos de verificacin automticos ocurren frecuentemente si una considerable cantidad de datos se modifica. Arquitectura Fsica del archivo de transacciones. El archivo de transacciones en una base de datos puede estar distribuido en uno o ms archivos fsicos, es una cadena serial de registros de transacciones. Fsicamente, la secuencia de registros de transacciones deben almacenarse en un conjunto de archivos fsicos que implementan el archivo de transacciones. Reducir el tamao del archivo de transacciones. El tamao fsico del archivo de transacciones se puede reducir ejecutando el estatuto dbcc shrinkdatabase. Arquitectura de la concurrencia. Cuando varios usuarios intentan modificar datos en una base de datos al mismo tiempo, se debe implementar un mecanismo para que las modificaciones hechas por un usuario no afecten adversamente a otro. A este proceso se le llama control de concurrencia.

130

Hay 2 clasificaciones para implementar el control de concurrencia: Control de Concurrencia pesimista.- Es un sistema de bloqueos previene que un usuario modifique datos que afecte a otros. Despus de que un usuario ejecuta una accin que causa que un bloqueo se aplique, otros usuarios no pueden ejecutar acciones que entren en conflicto con el bloqueo hasta que el propietario del mismo lo libere. A este proceso se le llama control pesimista debido a que se usa principalmente en ambientes donde hay alta contencin de datos. Control de Concurrencia optimista.- Los usuarios no bloquean datos cuando ellos los leen. Cuando una actualizacin se realiza, el sistema checa si otro usuario cambio el dato despus de que fue ledo, si es as, un error ocurre. Tpicamente, el usuario que recibe el error hace un rollback a la transaccin y comienza nuevamente. Se llama optimista porque es principalmente usada en ambientes donde hay baja contencin de datos. Arquitectura de bloqueos. Un bloqueo es un objeto que el software utiliza para indicar que un usuario tiene alguna dependencia sobre algun recurso. El software no permite que otros usuarios ejecuten operaciones en el mismo recurso que afectara adversamente las dependencias del usuario quien es propietario del bloqueo. Los bloqueos se administran internamente y son adquiridos y liberados basados en acciones que el usuario toma. El sistema administrador de bases de datos usa bloqueos para implementar el control de concurrencia pesimista entre mltiples usuarios quienes ejecutan modificaciones en la base de datos al mismo tiempo. Adems, los bloqueos se aplican a varios niveles de granularidad en la base de datos, pueden ser implementados en filas, pginas, llaves, rango de llave, ndices, tablas o bases de datos. El sistema administrador de bases de datos determina dinmicamente el nivel apropiado en el cual se pone el bloqueo para cada estatuto SQL. El nivel al cual los bloqueos se adquieren varan para diferentes objetos referenciados pro la misma consulta. El nivel al cual se aplican los bloqueos no es especificado por el usuario y no require configuracin.

131

Hay varios modos de bloqueo: compartido, de actualizacin, exclusivo, de intento y de esquema. El modo de bloqueo indica el nivel de dependencia que la conexin tiene sobre el objeto bloqueado. Los bloqueos se sostienen durante todo el tiempo necesitado para proteger el recurso en el nivel solicitado. Si una conexin intenta adquirir un bloqueo que entre en conflicto con un bloqueo sostenido por otra conexin, la conexin que intenta adquirir el bloqueo es bloqueada hasta que uno de los eventos siguientes ocurre: 1.- El bloqueo que ocasiona el conflicto sea liberado y la conexin adquiere el bloqueo que solicita. 2.- El intervalo de tiempo para la conexin expira Si varias conexiones se bloquean mientras esperan por bloqueos con conflicto sobre un mismo recurso, los bloqueos se conceden sobre la base de el primero en venir, el primero en servir cuando las conexiones precedentes liberan sus bloqueos. El sistema administrador de bases de datos tiene un algoritmo para detectar deadlocks abrazo mortal, que es una condicin en la cual 2 conexiones se han bloqueado una a la otra, si es detectado, se obliga a terminar una de las transacciones permitiendo que la otra continue. El sistema administrador de bases de datos dinmicamente aumenta o disminuye la escala del tipo de bloqueo. Por ejemplo: si una actualizacin obtiene un gran nmero de bloqueos a nivel de rengln, y tiene bloqueado un porcentaje significativo de una tabla, los bloqueos de rengln se escalan al nivel de uno de tabla, y, los bloqueos a nivel de rengln se liberan. Consulte la referencia A, captulo 12, lecciones 1, 2 y 3. Correlacin con el /los subtemas del Programa de Estudio Vigente: Esta prctica va dirigida a tratar los subtemas relacionados con la

132

UNIDAD 4: Control de Transacciones Los subtemas tratados son: Subtema 4.1 Propiedades de una transaccin Subtema 4.2 Grados de consistencia

Material y Equipo Necesario: Para realizar la Prctica es necesario contar con el siguiente hardware y software: Computadora Personal Sistema Operativo XP Sistema Administrador de Bases de Datos: Microsoft SQL-Server 2000 CD que acompaa a este Manual

Metodologa: Ejercicio 1: Visualizacin de propiedades y Modificacin del archivo de transacciones 1.- Abra el Enterprise Manager (Administrador Corporativo) 2.- Expanda el rbol de consola hasta que la base de datos ventas se despliegue 3.- Haga click derecho en el node de la base de datos ventas y elija Propiedades. Aparece la caja de dilogo. 4.- Haga clic en la pestaa Registro de transacciones (transaction log). En la parte titulada Crecimiento de archivo, elija En megabytes, y cambie el 1 por 3

133

5.- Haga click en Aceptar(Ok), ahora al archivo de transacciones se le ha asignado un espacio de 3Mb.

6.- Deje el Administrador Corporativo (SQL Enterprise Manager) abierto, para uso posterior. Procedimiento para disminuir el tamao del archivo de transacciones. 1.- Abra el Analizador de Consultas (query analyzer) y conctese a la base de datos ventas. 2.- Usando el editor inserte el siguiente cdigo:
USE ventas GO DBCC SHRINKFILE (ventas_log, 1) GO

Con ste estatuto se disminuye el tamao del archivo de transacciones de la base de datos ventas de 3 a 1 Mb. 3.- Ejecute las instrucciones, vea los resultados y cierre el Analizador de Consultas. Visualice las propiedades de la base de datos ventas y el archivo de transacciones. 1.- En el Administrador Corporativo, haga click derecho en el nodo de la base de datos ventas y elija Propiedades. La caja de dilogo aparece. 2.- Haga click en la pestaa del Registro de transacciones. Note que el espacio asignado al archivo de transacciones es otra vez de 1 Mb.

134

Sugerencias Didcticas: Se sugiere que el Maestro realice las acciones: 1.- Verificacin de la instalacin en cada Computadora del Sistema Administrador de Bases de Datos y la versin electrnica de ste Manual. 2.- Se sugiere que cada alumno cuente con su propia computadora personal con la finalidad de que realice todos los ejercicios personalmente. 3.- Se sugiere que el Maestro haga una induccin sobre el tema de la Prctica indicando los objetivos de aprendizaje que se obtendrn al realizarla. 4.- Se sugiere que los alumnos abran el Sistema Administrador de Bases de Datos, y, este Manual (de preferencia en forma electrnica); con la finalidad de que vayan realizando los ejercicios copiando y pegando los scripts SQL, ejecutndolos y copiando y pegando los resultados de cada uno en la parte de Reporte del Alumno. 5.- Se sugiere que el Maestro asesore a sus Alumnos durante el proceso de realizacin de la Prctica, logrando as una atencin personalizada. 6.- Se sugiere que el Maestro indique a los alumnos que para evaluar la Prctica enven a su correo electrnico (o le entreguen de manera impresa), la parte del Reporte del Alumno (resultados). Indicando el nmero de la Prctica y el nombre del alumno. 7.- Se sugiere que el Maestro evale los resultados obtenidos en la Prctica y registre una calificacin de la misma, tomndola en cuenta en el proceso de evaluacin que haya definido. 8.- Se sugiere que el Maestro indique a los alumnos cmo se debe editar un comando SQL y como ejecutarlo. Asimismo, como copiar y pegar los resultados en la parte de Reporte del Alumno (resultados), todo esto con la finalidad de que los alumnos entiendan el proceso de ejecucin y resultados que deben realizar

135

en todas las prcticas de ste Manual Reporte del alumno (resultados): En sta parte el alumno registrar los resultados de cada uno de los ejercicios de la Prctica, indicando a qu parte de la Prctica corresponde. El alumno escribir en esta seccin los resultados del ejercicio 1 en todas las subsecciones que tiene; especificados en la parte Metodologa, indicando cada punto que se est reportando.

Bibliografa preliminar: REFERENCIA A MCSE Microsoft SQL-Server 2000 Database Design and Implementation Training Kit Microsoft Press

REFERENCIA B The Practical SQL Handbook Using SQL Variants Fourth Edtion Judith S. Bowman, Sandra L. Emerson, Marcy Darnovsky Addison Wesley REFERENCIA C Fundamentos de Bases de Datos Cuarta Edicin Abraham Silberchatz Henry F. Korth S. Sudarshan

136

McGraw-Hill Nmero de Prctica: 14 Nombre de la Prctica: Administracin de transacciones Objetivo Especfico: El alumno aplicar las herramientas de SQL para implementar transacciones, y, administrar su procesamiento Introduccin: Una transaccin es una secuencia de operaciones ejecutadas como una unidad lgica de trabajo. Para ello, debe cumplir con las propiedades: Atomicidad.- Una transaccin debe ser una unidad atmica de trabajo (o se ejecutan todas las modificaciones de datos, o, ninguna de ellas se ejecuta). Consistencia.- Cuando se completa, una transaccin debe dejar todos los datos en un estado consistente. Todas las estructuras de datos internas deben ser correctas al final de la transaccin. Aislamiento.- Modificaciones hechas por transacciones concurrentes deben ser aisladas de las modificaciones hechas por otras transacciones concurrentes. Una transaccin ve datos en un estado en que estaban antes de que otra transaccin concurrente los modificara, o, los ve despus de que la segunda transaccin ha terminado, pero, no ve un estado intermedio. A esto se le llama seriazibilidad. Durabilidad.- Despus de que una transaccin se completa, sus efectos son permanentes en el sistema. Las modificaciones persisten en el evento de un fallo del sistema. Tipos de transacciones: Se soportan 3 tipos de transacciones: explicit (explcitas), autocommit (autocometidas), y, implicit (implcitas).

137

Transaccin explcita.Es aquella en la cual se definen explcitamente el inicio y el fin de la transaccin. Las clusulas SQL para definirla son: Begin Transaction: Marca el punto inicial de una transaccin explcita para una conexin. Commit Transaction o Commit Work: Se usa para terminar una transaccin exitosamente si ningn error se encontr. Todas las modificaciones hechas en la transaccin se convierten en parte permanente de la base de datos. Los recursos utilizados por la transaccin se liberan. Rollback Transaction o Rollback Work: Se usa para borrar una transaccin en la cual se encontraron errores. Todos los datos modificados por la transaccin se regresan al estado donde estaban antes del inicio de la transaccin. Los recursos utilizados por la transaccin se liberan. Transaccin Autocommit.Es el modo de administracin de una transaccin por default. Cada estatuto SQL se comete o se le hace un rollback cuanto es completado. Si un estatuto se completa con xito, se comete; si se encuentra un error, se le hace un rollback. Una conexin al Sistema Administrador de Bases de Datos opera en este modo cuando este modo no se ha cambiado por una transaccin explcita o implcita. Una conexin SQL opera en este modo hasta que un estatuto begin transaction inicia una transaccin explcita o hasta que el modo de transaccin implcita se pone en on. Cuando una transaccin explcita se comete o se le hace rollback o cuando el modo de transaccin implcita se pone en off, SQL regresa al modo de autocommit. Transaccin implcita.Con ste modo, se inicia automticamente una nueva transaccin despus de que la transaccin actual se comete o se le hace rollback. No se requiere hacer algo para iniciar la transaccin. Este modo genera una cadena continua de transacciones. Cuando se ha puesto el modo de transacciones implcitas a on para una conexin, SQL automticamente comienza una transaccin cuando

138

primero ejecuta alguno de los estatutos: alter table, create, delete, drop, fetch, grant, insert, open, revoke, select, truncate table, update. La transaccin permanece en efecto hasta que se ejecuta un commit o un rollback. Los estatutos SQL usados son: set implicit_transactions on, para iniciar el modo de transaccin implcita. El estatuto set implicit_transactions off sirve para poner el modo en off. Utilice commit transaction, commit work, rollback transaction o rollback work para terminar cada transaccin. Consulte la referencia A, captulo 12, lecciones 1, 2 y 3. Correlacin con el /los subtemas del Programa de Estudio Vigente: Esta prctica va dirigida a tratar los subtemas relacionados con la UNIDAD 4: Control de Transacciones Los subtemas tratados son: Subtema 4.3 Niveles de aislamiento Material y Equipo Necesario: Para realizar la Prctica es necesario contar con el siguiente hardware y software: Computadora Personal Sistema Operativo XP Sistema Administrador de Bases de Datos: Microsoft SQL-Server 2000 CD que acompaa a este Manual

Metodologa:

139

Ejercicio 1: Implementacion de Transacciones Transacciones explcitas 1.- Abra el Analizador de Consultas y conctese a la base de datos ventas 2.- En el editor ejecute el siguiente comando select * from clientes Observe la columna direccion del cliente 30 3.- En el editor, inserte el siguiente cdigo:
BEGIN TRANSACTION GO USE ventas GO UPDATE clientes SET direccion = 'Blvd. Mexico 1200' WHERE clave_cliente = 30 GO COMMIT TRANSACTION GO

En ste script se usa el estatuto begin transaction para iniciar la transaccin. Se hace la actualizacin en la tabla clientes de la base de datos ventas, y, se comete la transaccin usando el estatuto commit transaction. 4.- Ejecute el script 5.- Ejecute el estatuto SQL select * from clientes

140

Observe la columna direccion del cliente 30 y verifique que se haya hecho el cambio indicado en el punto 3. Transacciones autocommit. 1.- En el editor del Analizador de consultas, escriba el cdigo:
USE ventas GO CREATE TABLE tabla_prueba (Columna1 INT PRIMARY KEY, Columna2 CHAR(3)) GO INSERT INTO tabla_prueba VALUES (101, 'ABC') INSERT INTO tabla_prueba VALUES (102, 'DEF') INSERT INTO tabla_prueba VALUSE (103, 'GHI') GO SELECT * FROM tabla_prueba GO

Nota: en el tercer insert hay un error intencional (palabra VALUSE). En este script, se estn definiendo 4 transacciones autocommit. La primera selecciona a la base de datos ventas. En la segunda transaccin, se crea la tabla tabla_prueba. En la tercera, se insertan 3 renglones a la tabla tabla_prueba. En la cuarta transaccin, se ejecuta un comando select. 2.- Ejecute el script 3.- Haga click en la pestaa cuadriculas (grids) para ver los resultados. Note que las columnas se despliegan pero sin valores. Cuando el script se ejecut, la tabla fue creada y el estatuto select fue ejecutado. Sin embargo, debido a que la tercera transaccin tiene un error de sintaxis, no se insertaron renglones en la tabla.

141

4.- Escriba y ejecute el siguiente cdigo: drop table tabla_prueba Observe que aparece un mensaje indicando que se ha eliminado la tabla. 5.- Escriba el cdigo:
USE ventas GO CREATE TABLE tabla_prueba (Columna1 INT PRIMARY KEY, Columna2 CHAR(3)) GO INSERT INTO tabla_prueba VALUES (101, 'ABC') INSERT INTO tabla_prueba VALUES (102, 'DEF') INSERT INTO tabla_prueba VALUES (103, 'GHI') GO SELECT * FROM tabla_prueba GO

Nota: observe que es el mismo script anterior, pero, se corrigi el error de sintaxis. El resultado se despliega correctamente en la pestaa cuadriculas (grids). 6.- Ejecute el estatuto drop table tabla_prueba Transaccin implcita 1.- En el Analizador de consultas escriba el cdigo:
SET IMPLICIT_TRANSACTIONS ON GO USE ventas

142

CREATE TABLE tabla_prueba (Columna1 INT PRIMARY KEY, Columna2 CHAR(3)) GO COMMIT TRANSACTION GO INSERT INTO tabla_prueba VALUES (101, 'ABC') INSERT INTO tabla_prueba VALUES (102, 'DEF') INSERT INTO tabla_prueba VALUES (103, 'GHI') GO COMMIT TRANSACTION GO SELECT * FROM tabla_prueba GO COMMIT TRANSACTION GO SET IMPLICIT_TRANSACTIONS OFF GO

En ste script, se pone el estado de las transacciones implcitas a on. La primera crea la tabla tabla_prueba en la base de datos ventas. La siguiente transaccin inserta 3 renglones en la tabla. Y, la ltima transaccin ejecuta un estatuto select. Cuando las tres transacciones se han ejecutado, el estado de las transacciones implcitas se pone a off. 2.- Ejecute el script El resultado aparece en la pestaa cuadriculas(grids) 3.- En el editor escriba drop table tabla_prueba para eliminar la tabla

Sugerencias Didcticas:

143

Se sugiere que el Maestro realice las acciones: 1.- Verificacin de la instalacin en cada Computadora del Sistema Administrador de Bases de Datos y la versin electrnica de ste Manual. 2.- Se sugiere que cada alumno cuente con su propia computadora personal con la finalidad de que realice todos los ejercicios personalmente. 3.- Se sugiere que el Maestro haga una induccin sobre el tema de la Prctica indicando los objetivos de aprendizaje que se obtendrn al realizarla. 4.- Se sugiere que los alumnos abran el Sistema Administrador de Bases de Datos, y, este Manual (de preferencia en forma electrnica); con la finalidad de que vayan realizando los ejercicios copiando y pegando los scripts SQL, ejecutndolos y copiando y pegando los resultados de cada uno en la parte de Reporte del Alumno. 5.- Se sugiere que el Maestro asesore a sus Alumnos durante el proceso de realizacin de la Prctica, logrando as una atencin personalizada. 6.- Se sugiere que el Maestro indique a los alumnos que para evaluar la Prctica enven a su correo electrnico (o le entreguen de manera impresa), la parte del Reporte del Alumno (resultados). Indicando el nmero de la Prctica y el nombre del alumno. 7.- Se sugiere que el Maestro evale los resultados obtenidos en la Prctica y registre una calificacin de la misma, tomndola en cuenta en el proceso de evaluacin que haya definido. 8.- Se sugiere que el Maestro indique a los alumnos cmo se debe editar un comando SQL y como ejecutarlo. Asimismo, como copiar y pegar los resultados en la parte de Reporte del Alumno (resultados), todo esto con la finalidad de que los alumnos entiendan el proceso de ejecucin y resultados que deben realizar en todas las prcticas de ste Manual

144

Reporte del alumno (resultados): En sta parte el alumno registrar los resultados de cada uno de los ejercicios de la Prctica, indicando a qu parte de la Prctica corresponde. El alumno escribir en esta seccin los resultados del ejercicio 1, en las tres secciones de transacciones indicadas; especificados en la parte Metodologa, indicando el nmero de cada punto que se est reportando.

Bibliografa preliminar: REFERENCIA A MCSE Microsoft SQL-Server 2000 Database Design and Implementation Training Kit Microsoft Press

REFERENCIA B The Practical SQL Handbook Using SQL Variants Fourth Edtion Judith S. Bowman, Sandra L. Emerson, Marcy Darnovsky Addison Wesley

145

Nmero de Prctica: 15 Nombre de la Prctica: Administracin de Bloqueos Objetivo Especfico: El alumno conocer, comprender y aplicar los conceptos de bloqueos (concurrencia) en sus propias bases de datos. Introduccin: Los bloqueos aseguran la integridad transaccional y la consistencia de las bases de datos, previenen que un usuario lea datos que estn siendo cambiados por otros usuarios y previene que muchos usuarios puedan cambiar los mismos datos al mismo tiempo. Los problemas de concurrencia pueden incluir algunas de las situaciones siguientes: prdida de actualizaciones, dependencias no cometidas (lecturas sucias), anlisis inconsistentes y lecturas fantasmas. Actualizaciones perdidas.Estas ocurren cuando dos o mas transacciones seleccionan el mismo rengln y lo actualizan basados en el valor original. Cada transaccin no conoce la existencias de las otras. La ltima actualizacin sobrescribe a las anteriores, lo cual resulta en perdida de datos. Dependencia no cometida.Ocurre cuando una segunda transaccin selecciona un rengln que est siendo con anterioridad actualizado por otra transaccin. La segunda est leyendo el dato que no ha sido cometido aun y podra ser cambiado por la transaccin que la est actualizando. Anlisis inconsistente (lecturas no repetibles).Ocurre cuando una segunda transaccin accede al mismo rengln en distintas ocasiones y lee diferentes valores cada vez, es similar a la anterior en que la otra transaccin esta cambiando los datos que una segunda transaccin est

146

leyendo, sin embargo, el dato leido por la segunda transaccin fue cometido por la transaccin que hizo el cambio.Tambien, el anlisis inconsistente involucralecturas multiples del mismo rengln y cada vez la informacin se cambia por otra transaccin. Por ejemplo, un editor lee un documento 2 veces, pero entre cada leda, el escritor reescribe el documento. Cuando el editor lee el documento la segunda vez, ya cambi. La lectura original no fue repetible. Este problema se evita si el editor lee el documento despus de que el escritor termin de escribirlo. Lecturas fantasmas.Ocurre cuando una insercin o eliminacin se hizo a un rengln que pertenece a un rango de renglones siendo leido por una transaccin. La primera leida de la transaccin del conjunto de renglones muestra un rengln que ya no existe en la segunda lectura como resultado de su eliminacin por otra transaccin. De manera similar, como resultado de una insercin por otra transaccin, la lectura de una segunda transaccin muestra un rengln que no exista en la lectura original. Por ejemplo, un editor hace cambios a un documento que entreg un escritor, pero cuando los cambios se incorporan a la copia maestra del documento, encuentran que hay material nuevo que ha sido aadido al documento por el autor. Este problema pude evitarse si nadie puede aadir nuevo material al documento hasta que el editor termina de trabajar con el documento original. Concurrencia pesimista y optimista.Concurrencia optimista.El control de este tipo de concurrencia trabaja sobre la base de que los conflictos de recursos entre varios usuarios no suceden y habilitan a las transacciones para que se ejecuten sin bloqueos en los recursos. Solamente cuando se intentan cambiar datos los recursos se checan para determinar si hay algun conflicto. Si lo hay, la aplicacin debe leer el dato e intentar el cambio otra vez.

147

Concurrencia pesimista.Cuando un bloqueo se utiliza como un mecanismo de control de concurrencia, resuelven los problemas. Esta caracterstica habilita a todas las transacciones para que se ejecuten en completo aislamiento de otra, aunque puede haber mas de una transaccin ejecutndose al mismo tiempo. La serializabilidad se obtiene ejecutando un conjunto de transacciones concurrentes equivalentes al estado de la base de datos que se obtendra si el conjunto de transacciones se ejecutaran serialmente. Niveles de aislamiento.El nivel de aislamiento es el grado en el cual una transaccin debe ser aislada de otras. Un nivel bajo incrementa la concurrencia, pero a expensas de exactitud en los datos. Un nivel alto asegura que el datos es correcto pero puede afectar negativamente a la concurrencia. El nivel de aislamiento requerido por una aplicacin determina el comportamiento del bloqueo que se utiliza. A continuacin se mencionan dichos niveles: Lectura no cometida.- Es el nivel mas bajo, en el cual las transacciones son aisladas solo lo suficiente para asegurar que datos fsicamente corruptos no sean ledos. Lectura cometida.- Es el nivel de default. Lectura repetible Serializable.- Es el nivel mas alto, en el cual las transacciones estn completamente aisladas de otra. Si alguna transaccin se ejecuta en el nivel de serializable, cualquier transaccin que se traslape y que sea concurrente, se garantiza que sea serializable. Los siguientes niveles de aislamiento habilitan diferentes tipos de

148

comportamiento:

Nivel de aislamiento Lectura no cometida Lectura cometida Lectura repetible Serializable

Lectura sucia s no no no

Lectura no repetible Lectura fantasma s s s s no s no no

Ver referencia A, captulo 12, leccin 3 Bloqueos a gusto del usuario.El sistema administrador de bases de datos implementa los bloqueos automticamente, pero, es posible configurar esta caracterstica en las aplicaciones ejecutando las tareas: 1.- Manipulacin de deadlocks y seleccin de prioridad en los mismos. 2.- Manipulacin de tiempo de duracin de espera y configuracin de la duracin del mismo. 3.- Seleccin del nivel de aislamiento de la transaccin. 4.- Uso del bloqueo a nivel de tabla, con los estatutos select, insert, update y delete. 5.- Configuracin de la granularidad de bloqueo para un ndice. Administracin de abrazos mortales (deadlocks).Un deadlock ocurre cuando una transaccin esta esperando un recurso que una segunda transaccin tiene bloqueado, y esta a su vez est esperando un recurso que la primera transaccin tiene bloqueado. Ambas transacciones no pueden liberar los recursos que poseen hasta que sean cometidas o revertidas, y no pueden liberarse porque ambas estn esperando que la otra libere el recurso que esta esperando.

149

Para minimizar la ocurrencia de deadlocks se deben seguir las siguientes polticas: 1.- Acceda a los objetos en el mismo orden 2.- Evite la interaccin con el usuario durante las transacciones. 3.- Implemente transacciones cortas y en un solo archivo ejecutable 4.- Use un nivel bajo de aislamiento 5.- Use conexiones bound (limitadas). Estas habilitan a que 2 o mas conexiones compartan la misma transaccin y bloqueos. Consulte referencia A, captulo 12, leccin 3. Configuracin de tiempos de espera (timeouts).Cuando del sistema administrador de bases de datos no concede un bloqueo a una transaccin sobre un recurso debido a que otra transaccin posee un bloqueo sobre el mismo, la primera transaccin es detenida mientras espera a que el recurso se libere. Si esta situacin genera un deadlock, el sistema termina una de las transacciones participantes, si no hay deadlock la transaccin que solicita el bloqueo es detenida hasta que la otra libera el recurso. Por default, no hay un periodo de tiempo de espera definido y no hay manera de probar si un recurso esta bloqueado antes de bloquearlo. Se puede usar el procedimiento almacenado sp_who para determinar si un proceso esta siendo bloqueado y quien lo esta bloqueando. La configuracin de la variable LOCK_TIMEOUT habilita a una aplicacin a colocar una cantidad de tiempo mxima que un estatuto esperar a un recurso bloqueado. Cuando el estatuto ha esperado mas que el tiempo especificado, el estatuto bloqueado se cancela automticamente y se devuelve una seal de error a la aplicacin (Lock requested time-out period exceded). Sin embargo, la transaccin que contiene el estatuto no es revertida o cancelada. Por esto, la aplicacin debe tener una rutina de atrapar errores para realizar lo que sea necesario.

150

Se utiliza el estatuto SET LOCK_TIMEOUT para especificar el numero de milisegundos que un estatuto esperar a que se libere un bloqueo.

Para determinar el tiempo de espera actual en milisegundos que se ha configurado en una sesin, se puede usar la variable @@LOCK_TIMEOUT. Si no se ha puesto un valor en la variable LOCK_TIMEOUT, la funcin regresara un valor de -1. Configuracin de niveles de aislamiento de una transaccin.Por default, el sistema administrador de bases de datos opera en el nivel de aislamiento READ COMMITED. Para cambiar el nivel se puede usar el estatuto SET TRANSACTION ISOLATION LEVEL. Una vez especificado un nivel, toda la operacin subsecuente opera con el mismo y permanece en efecto hasta que la sesin termina o hasta que el nivel es cambiado por otro. Implementacin de bloqueos a nivel de tabla.Bloqueos a nivel de tabla se pueden especificar con las clasulas SELECT, INSERT, UPDATE y DELETE. Utilice este tipo de bloqueos para un control mas fino de los tipos de bloqueos adquiridos sobre un objeto. Este tipo de bloqueos tiene mas prioridad que los bloqueos al nivel de aislamiento de la transaccin para una sesin dada. A continuacin se especifican los diferentes tipos de bloqueos a nivel de tabla. HOLDLOCK.- Sostiene un bloqueo compartido hasta que se complete la transaccin en lugar de liberar el bloqueo tan pronto como la tabla, rengln o pgina de datos ya no se requiera. Es equivalente a SERIALIZABLE. NOLOCK.- No suministra bloqueos compartidos, y no concede bloqueos exclusivos. Cuando esta activa, es posible leer una transaccin no cometida o un conjunto de pginas que son revertidas (rolled back) a la mitad de una lectura. Lecturas sucias son posibles. Se aplica solamente al estatuto SELECT. PAGLOCK.- Usa bloqueo de pginas cuando se bloquea solamente una tabla

151

READCOMMITTED.- Ejecuta una bsqueda con la misma semntica de bloqueo que una transaccin ejecutndose con el nivel de aislamiento READ COMMITED. Es el nivel de default para el sistema administrador de bases de datos. READPAST.- Salta los renglones bloqueados. Esta opcin causa que una transaccin salte los renglones bloqueados por otras transacciones que apareceran en el conjunto resultado, esto lo hace en lugar de bloquear la transaccin esperando hasta que las otras liberen los bloqueos en esos renglones. Solamente aplica para aquellas transacciones operando en el nivel de aislamiento READ COMMITTED y leer solamente bloqueos al nivel de rengln pasados. Aplica solamente para el estatuto select. REDUNCOMMITTED.- Equivalente a NOLOCK. REPEATABLEREAD.- Realiza una bsqueda con la misma semntica de bloqueo que una transaccin que esta ejecutndose en el nivel de aislamiento REPEATABLE READ. ROWLOCK.- Utiliza bloqueos a nivel de rengln en lugar de bloqueos a nivel de tabla o de pgina. SERIALIZABLE.- Realiza una bsqueda con la misma semntica de bloqueos que una transaccin que se est ejecutando al nivel de aislamiento SERIALIZABLE. Es equivalente a HOLDLOCK. TABLOCK.- Usa un bloqueo de tabla en lugar de uno de rengln o de pgina, el sistema sostiene este bloqueo hasta el final del estatuto. Si tambien se especifica HOLDLOCK, el bloqueo se sostiene hasta el final de la transaccin. TABLOCKX.- Usa un bloqueo exclusivo en una tabla. Previene a que otros lean

152

o actualicen la tabla y se sostiene hasta el final del estatuto o de la transaccin.

UPDLOCK.- Usa bloqueos de actualizacin en lugar de bloqueos compartidos mientras se est leyendo una tabla, y sostiene los bloqueos hasta el fin del estatuto o de la transaccin. Tiene la ventaja de permitir leer datos (sin bloquear a otros lectores) y actualizarlos despus con la seguridad de que los datos no han cambiado desde la ultima lectura. XLOCK.- Usa un bloqueo exclusivo que ser sostenido hasta el fin de la transaccin sobre todos los datos procesados por el estatuto. Este bloqueo puede ser especificado con PAGLOCK o TABLOCK, para pgina o para tabla. Correlacin con el/los subtemas del Programa de Estudio Vigente: Esta prctica va dirigida a tratar los subtemas relacionados con la UNIDAD 4: Control de Transacciones Los subtemas tratados son: Subtema 4.4 Instrucciones COMMIT y ROLLBACK Material y Equipo Necesario: Para realizar la Prctica es necesario contar con el siguiente hardware y software: Computadora Personal Sistema Operativo XP Sistema Administrador de Bases de Datos: Microsoft SQL-Server 2000 CD que acompaa a este Manual

153

Metodologa: Ejercicio 1: Configuracin de Propiedades de una transaccin En ste ejercicio se configuran tiempos de espera de una transaccin, niveles de aislamiento y bloqueos. Para poder realizarlo se requiere tener un usuario administrador en el sistema administrador de bases de datos. Configuracin de una sesin de tiempo de espera 1.- Ingrese al Analizador de Consultas (Query Analyzer) y conctese al servidor. 2.- En el editor, teclee el siguiente cdigo:
SELECT @@LOCK_TIMEOUT

Con este estatuto, se solicita la configuracin del LOCK_TIMEOUT para la sesin actual. 3.- Ejecute el estatuto anterior Aparece un valor -1 en la ventana de resultados. Este valor es regresado si no hay alguna configuracin LOCK_TIMEOUT implementada para esta sesin. 4.- En el editor, inserte el siguiente cdigo:
SET LOCK_TIMEOUT 1800 SELECT @@LOCK_TIMEOUT

Primeramente se pone el valor de tiempo de espera en 1800 milisegundos, y despues, se usa la funcion @@LOCK_TIMEOUT para visualizar la nueva configuracin.

154

5.- Ejecute el script. Aparece un valor de 1800 en la pestaa de resultados. Configuracin del nivel de aislamiento de la sesin. 1.- En el editor, inserte el siguiente cdigo:
USE ventas SET TRANSACTION ISOLATION LEVEL SERIALIZABLE

Con este script, se configura el nivel de aislamiento de la sesin actual a SERIALIZABLE. 2.- Ejecute el script anterior. Aparece un mensaje en la pestaa de resultados indicando que el comando se ha completado con xito. 3.- En el editor, inserte y ejecute el siguiente cdigo:
DBCC USEROPTIONS

En la ventana de resultados se despiegan los valores de la opcion SET. El valor del nivel de aislamiento se pone ahora a SERIALIZABLE. Configuracin de un bloqueo a nivel de tabla 1.- En el editor, inserte el siguiente cdigo:
USE ventas SELECT clave, descripcin FROM productos WITH (NOLOCK)

Con este script, se est configurando el bloqueo a nivel de tabla NOLOCK para

155

el estatuto select. NOLOCK no permite bloqueos compartidos y no reconoce bloqueos exclusivos.

2.- Ejecute el script anterior El resultado aparece en la ventana de resultados. 3.- Cierre el Analizador de consultas.

Sugerencias Didcticas: Se sugiere que el Maestro realice las acciones: 1.- Verificacin de la instalacin en cada Computadora del Sistema Administrador de Bases de Datos y la versin electrnica de ste Manual. 2.- Se sugiere que cada alumno cuente con su propia computadora personal con la finalidad de que realice todos los ejercicios personalmente 3.- Se sugiere que el Maestro haga una induccin sobre el tema de la Prctica indicando los objetivos de aprendizaje que se obtendrn al realizarla. 4.- Se sugiere que los alumnos abran el Sistema Administrador de Bases de Datos, y, este Manual (de preferencia en forma electrnica); con la finalidad de que vayan realizando los ejercicios copiando y pegando los scripts SQL, ejecutndolos y copiando y pegando los resultados de cada uno en la parte de Reporte del Alumno. 5.- Se sugiere que el Maestro asesore a sus Alumnos durante el proceso de realizacin de la Prctica, logrando as una atencin personalizada. 6.- Se sugiere que el Maestro indique a los alumnos que para evaluar la Prctica

156

enven a su correo electrnico (o le entreguen de manera impresa), la parte delReporte del Alumno (resultados). Indicando el nmero de la Prctica y el nombre del alumno. 7.- Se sugiere que el Maestro evale los resultados obtenidos en la Prctica y registre una calificacin de la misma, tomndola en cuenta en el proceso de evaluacin que haya definido. 8.- Se sugiere que el Maestro indique a los alumnos cmo se debe editar un comando SQL y como ejecutarlo. Asimismo, como copiar y pegar los resultados en la parte de Reporte del Alumno (resultados), todo esto con la finalidad de que los alumnos entiendan el proceso de ejecucin y resultados que deben realizar en todas las prcticas de ste Manual

Reporte del alumno (resultados): En sta parte el alumno registrar los resultados de cada uno de los ejercicios de la Prctica, indicando a qu parte de la Prctica corresponde. El alumno escribir en esta seccin los resultados del ejercicio 1, en las tres secciones indicadas; especificados en la parte Metodologa, indicando el nmero de cada punto que se est reportando.

Bibliografa preliminar: REFERENCIA A MCSE Microsoft SQL-Server 2000 Database Design and Implementatio Training Kit Microsoft Press

157

REFERENCIA B The Practical SQL Handbook Using SQL Variants Fourth Edtion Judith S. Bowman, Sandra L. Emerson, Marcy Darnovsky Addison Wesley

158

Nmero de Prctica: 16 Nombre de la Prctica: : Vistas: Creacin, modificacin y eliminacin Objetivo Especfico: El alumno conocer, comprender y aplicar los estatutos SQL para crear, modificar y eliminar vistas. Introduccin: Una vista es una tabla virtual cuyo contenido se define por una consulta sql. Consiste de una serie de columnas nombradas y renglones de datos. Sin embargo, una vista no existe como un conjunto de valores almacenados en una base de datos. Sus renglones y columnas se originan de tablas referenciadas en una consulta que define la vista y son producidas dinmicamente cuando la vista es referenciada. Se puede usar una vista como un mecanismo de seguridad para que un usuario la pueda usar sin darle permisos de acceder directamente a la base de datos. La consulta que define la vista puede referenciar a una o mas tablas o a otras vistas en la base de datos actual o en otras bases de datos. Un usuario puede usar una vista referenciandola por su nombre de la misma manera en que usa el nombre de una tabla. No hay restricciones en hacer consultas usando vistas y hay pocas restricciones para modificar datos a traves de ellas. Adems, una vista puede referenciar a otra vista. Se usan vistas para implementar las siguientes funciones: 1.- Restringir a un usuario a renglones especficos de una tabla. 2.- Restringir a un usuario columnas especficas. 3.- Hacer varios productos naturales entre muchas tablas y que aparezcan como si fuera una sola. 4.- Agregar informacin en lugrar de dar detalles.

159

Creacin de vistas.Se pueden crear vistas solo en la base de datos actual. Las tablas o vistas referenciadas por la nueva vista pueden existir en otras bases de datos o en otros servidores. Cuando se crea una vista hay que seguir lo siguiente: 1.- No se pueden asociar reglas o definiciones DEFAULT en vistas. 2.- No se pueden asociar disparadores AFTER en vistas, solamente disparadores INSTEAD OF. 3.- La consulta que define a la vista no puede incluir clusulas ORDER BY, COMPUTE, COMPUTE BY o INTO. 4.- No se puede definir definiciones de ndices de texto completo en vistas. 5.- No se pueden crear vistas temporales, y, no se pueden crear vistas sobre tablas temporales. 6.- Se deben especificar nombres a las columnas cuando sea necesario (en caso de columnas calculadas, resultado de una funcin, etc). 7.- Para crear una vista, se deben tener los permisos de usuario correspondientes. 8.- La clusula with check option forza a que todos los estatutos que modifiquen datos involucrados en la vista se adhieran a los criterios establecidos dentro del estatuto select que define la vista. Los renglones no pueden ser modificados de manera que desaparezcan de la vista. Se despliega un error. 9.- La definicin de una vista puede ser encriptada para asegurar que su definicin no pueda ser obtenida por alguien, incluyendo el propietario de la vista. El estatuto select de una vista no puede contener los siguientes elementos de SQL: 1.- El asterisco, para especificar columnas en una lista del select 2.- Un nombre de columna de tabla usado como una expresin simple que es especificada en ms de una columna de la vista. 3.- Una tabla derivada

160

4.- Funciones de renglones 5.- El operador union 6.- Subconsultas 7.- Productos naturales externos o autoproductos naturales (self join) 8.- La clusula top 9.- La clusula order by 10.- La palabra distinct 11.- Las funciones agregadas: count(*), avg, max, min, stdev, stdevp, var,varp 12.- La funcin sum que haga referencia a una expresin nula 13.- Las clusulas compute o compute by Despus de haberse creado una vista puede crearse un ndice sobre ella, el primero debe ser del tipo unique clustered, los subsiguientes sern non clustered. Las reglas de creacin de ndices en una vista son las mismas que cuando se crean sobre una tabla. Modificacin de vistas.Despus de que una vista ha sido definida, se puede cambiar su nombre o modificar su definicin sin eliminarla y volverla a crear. Si se desea cambiar el nombre de una vista, se debe observar: la vista a ser renombrada debe estar en la base de datos actual, el nuevo nombre debe seguir las reglas normales de los indentificadores, se pueden renombrar solamente vistas en donde el usuario sea el propietario, el propietario de la base de datos puede cambiar el nombre de cualquier vista de usuario. La alteracin de una vista no afecta a los objetos dependientes de la misma. Eliminacin de vistas.Cuando una vista es eliminada, las tablas y los datos a los cuales hace referencia no son afectados. Cualquier consulta que use objetos que dependen de la vista eliminada marcarn error cuando se ejecuten.

161

Consulte la referencia A, captulo 10, lecciones 1 y 2. Correlacin con el /los subtemas del Programa de Estudio Vigente: Esta prctica va dirigida a tratar los subtemas relacionados con la UNIDAD 5: Vistas Los subtemas tratados son: Subtema 5.1 Definicin y objetivos de las vistas

Material y Equipo Necesario: Para realizar la Prctica es necesario contar con el siguiente hardware y software: Computadora Personal Sistema Operativo XP Sistema Administrador de Bases de Datos: Microsoft SQL-Server 2000 CD que acompaa a este Manual

Metodologa:

Ejercicio 1: Creacin y modificacin de una vista Creacin de la vista.1.- Abra el Query Analyzer (Analizador de consultas) y conctese a su servidor. 2.- Usando el editor inserte el siguiente cdigo:

162

USE ventas GO CREATE VIEW vista1 AS

Select A.clave_cliente,A.nombre,B.no_factura,B.fecha_fac, C.no_renglon,C.clave from clientes A inner join facturas B on A.clave_cliente=B.clave_cliente inner join ren_facturas C on B.no_factura=C.no_factura

En este estatuto, se define una vista llamada vista1 que hace referencia a las tres tablas: clientes, facturas y ren_facturas. El conjunto resultado de sta consulta incluye los columnas proyectadas en la consulta select. 3.- Ejecute el estatuto y aparece un mensaje que indica que el comando ha sido exitosamente completado. 4.- Si la ventana del Examinador de Objetos (Object Browser) no est desplegada, brala ahora. 5.- En el rbol de objetos de sta ventana, localice la nueva vista que se ha creado, localizando la carpeta ventas hay una subcarpeta llavada vistas, y haciendo doble clic en esta aparecen todas las vistas que se han creado. 6.- Expanda el nodo de la vista llamada vista1 y aparecern varias subcarpetas, expanda la llamada columnas y note que aparecen todas las columnas proyectadas en la clusula select de la definicin de la vista. Modificacin de la vista llamada vista1.1.- En el panel del editor, escriba el siguiente cdigo:

163

USE ventas GO ALTER VIEW vista1 AS Select A.clave_cliente,A.nombre,B.no_factura,B.fecha_fac,B.monto C.no_renglon,C.clave,C.cantidad,C.precio from clientes A inner join facturas B on A.clave_cliente=B.clave_cliente inner join ren_facturas C on B.no_factura=C.no_factura

En este estatuto se estn aadiendo las columnas de la tabla facturas, cantidad y precio de la tabla ren_facturas 2.- Ejecute el estatuto, y un mensaje aparecer indicando que el comando se ha ejecutado con xito. En el Examinador de Objetos, en la vista llamada vista1, verifique que las columnas indicadas aparezcan. Eliminacin de la vista llamada vista1 de la base de datos ventas.1.- En el panel de editor del Query Analyzer, inserte el cdigo:
USE ventas GO DROP VIEW vista1

2.- Ejecute el estatuto y aparece un mensaje que ha sido ejecutado con xito. 3.- En el rbol de objetos de Examinado de Objetos, localice el nodo vistas y verifique que la vista llamada vista1 ya no aparece.

164

Sugerencias Didcticas: Se sugiere que el Maestro realice las acciones: 1.- Verificacin de la instalacin en cada Computadora del Sistema Administrador de Bases de Datos y la versin electrnica de ste Manual. 2.- Se sugiere que cada alumno cuente con su propia computadora personal con la finalidad de que realice todos los ejercicios personalmente. 3.- Se sugiere que el Maestro haga una induccin sobre el tema de la Prctica indicando los objetivos de aprendizaje que se obtendrn al realizarla. 4.- Se sugiere que los alumnos abran el Sistema Administrador de Bases de Datos, y, este Manual (de preferencia en forma electrnica); con la finalidad de que vayan realizando los ejercicios copiando y pegando los scripts SQL, ejecutndolos y copiando y pegando los resultados de cada uno en la parte de Reporte del Alumno. 5.- Se sugiere que el Maestro asesore a sus Alumnos durante el proceso de realizacin de la Prctica, logrando as una atencin personalizada. 6.- Se sugiere que el Maestro indique a los alumnos que para evaluar la Prctica enven a su correo electrnico (o le entreguen de manera impresa), la parte del Reporte del Alumno (resultados). Indicando el nmero de la Prctica y el nombre del alumno. 7.- Se sugiere que el Maestro evale los resultados obtenidos en la Prctica y registre una calificacin de la misma, tomndola en cuenta en el proceso de evaluacin que haya definido. 8.- Se sugiere que el Maestro indique a los alumnos cmo se debe editar un comando SQL y como ejecutarlo. Asimismo, como copiar y pegar los resultados en la parte de Reporte del Alumno (resultados), todo esto con la finalidad de que los alumnos entiendan el proceso de ejecucin y resultados que deben realizar en todas las prcticas de ste Manual

165

Reporte del alumno (resultados): En sta parte el alumno registrar los resultados de cada uno de los ejercicios de la Prctica, indicando a qu parte de la Prctica corresponde. El alumno escribir en esta seccin los resultados del ejercicio 1 en todas las subsecciones que tiene; especificados en la parte Metodologa, indicando cada punto que se est reportando. Bibliografa preliminar: REFERENCIA A MCSE Microsoft SQL-Server 2000 Database Design and Implementation Training Kit Microsoft Press REFERENCIA B The Practical SQL Handbook Using SQL Variants Fourth Edtion Judith S. Bowman, Sandra L. Emerson, Marcy Darnovsky Addison Wesley REFERENCIA C Fundamentos de Bases de Datos Cuarta Edicin Abraham Silberchatz

166

Henry F. Korth S. Sudarshan McGraw-Hill

167

Nmero de Prctica: 17 Nombre de la Prctica: : Acceso a datos a travs de vistas Objetivo Especfico: El alumno conocer, comprender y aplicar los estatutos SQL para implementar conceptos de vistas complejas. Introduccin: No hay restricciones en consultar datos a travs de vistas, se pueden usar una vista en un estatuto select para regresar datos de la misma manera en que se usa una tabla. Las vistas son objetos actualizables, esto es, son objetivos de estatutos update, delete e insert, siempre y cuando la modificacin afecte solamente una de las tablas base referenciadas por la vista. Hay pocas restricciones al modificar datos a traves de una vista: 1.- La vista contiene al menos una tabla en la clusula from de la definicin de la vista. 2.- Ninguna funcin agregada, clusula group by, union, distinct o top, se usarn en la lista de seleccin. 3.- Ninguna columna derivada ser usada en la lista de seleccin (las columnas derivadas son el resultado de cualquier operacin diferente a una referencia a una columna simple (por ejemplo: la multiplicacin de una columna por otra). Para eliminar datos en una vista, solamente una tabla puede estar enlistada en la clusula from de la definicin de la vista.

168

Para insertar datos a travs de una vista, se debe usar el estatuto insert y si es el caso de que en la vista no esten todas las columnas de una tabla, stas debern permitir valores nulos. Tambien se pueden cambiar datos a travs de una vista utilizando el estatuto update. Adems, se pueden eliminar datos a travs de una vista usando el estatuto delete. Estatuto insert.Con este se puede aadir datos a la tabla a travs de la vista, siguiendo las reglas: 1.-Todas las columnas deben estar incluidas en el estatuto insert aun cuando la columna sea null en la tabla base o tenga un valor default definido en la tabla base. 2.- La palabra default no puede ser especificada en la clusula values del estatuto insert. 3.- El estatuto insert debe suministrar un valor que satisfaga la lgica de las restricciones constraint definidas en las columnas de la tabla. 4.- Estatutos insert no se permiten si un miembro de la tabla contiene una columna que tenga una propiedad identity. 5.- Estatutos insert no se permiten si un miembro de la tabla contiene una columna timestamp. 6.- Estatutos insert no se permiten si hay un autoproducto natural (self join) con la misma vista o con cualquiera de los miembros tabla.

169

Estatuto update.Permite modificar datos en una o mas tablas miembro a traves de la vista, debe sujetarse a las siguientes reglas: 1.- No pueden especificar la palabra default en la clusula set, aun si la columna tuviera un valor default definido en la tabla miembro correspondiente. 2.- El valor de una columna con la propiedad identity (que se incrementa automticamente) no puede ser cambiada, sin embargo, las otras columnas se pueden actualizar. 3.- El valor de la llave primaria no puede ser cambiada si la columna contiene texto o una imagen. 4.- No se permite la actualizacin si la tabla base contiene una columna timestamp. 5.- No se permite la actualizacin si hay un autoproducto natural (self join) con la misma vista o cualquiera otra tabla miembro. 6.- La palabra default no puede especificarse en la clusula set del estatuto update. Estatuto delete.Estos eliminan datos en una o mas tablas miembro a travs de la vista. No se permiten si hay un autoproducto natural (self join) con la misma vista o cualquiera otra tabla miembro. Consulte la referencia A, captulo 10, leccin 3.

170

Correlacin con el /los subtemas del Programa de Estudio Vigente: Esta prctica va dirigida a tratar los subtemas relacionados con la UNIDAD 5: Vistas Los subtemas tratados son: Subtema 5.2 Instrucciones para la admn.. de vistas

Material y Equipo Necesario: Para realizar la Prctica es necesario contar con el siguiente hardware y software: Computadora Personal Sistema Operativo XP Sistema Administrador de Bases de Datos: Microsoft SQL-Server 2000 CD que acompaa a este Manual

Metodologa: Ejercicio 1: Usando una vista para acceder a datos Creacin de la vista.1.- Abra el Query Analyzer (Analizador de consultas) y conctese a su servidor. 2.- Usando el editor inserte el siguiente cdigo:
USE ventas GO

171

CREATE VIEW vista2 AS Select clave_cliente,nombre,direccion from clientes

En este estatuto, se define una vista llamada vista2 que hace referencia a la tres tabla: clientes. El conjunto resultado de sta consulta incluye los columnas proyectadas en la consulta select. 3.- Ejecute el estatuto y aparece un mensaje que indica que el comando ha sido exitosamente completado. Uso de la vista vista2 para visualizar datos.1.- En el panel del editor, escriba el siguiente cdigo:
USE ventas GO Select * from vista2 order by nombre

En este estatuto se usa la vista vista2 para recuperar los datos. El conjunto resultado se ordena por el nombre del cliente. 2.- Ejecute el estatuto, y aparecer el conjunto resultado en la pestaa de resultados. Uso de la vista vista2 para insertar datos.1.- En el panel de editor del Query Analyzer, inserte el cdigo:
USE ventas GO

172

insert vista2 values(110,'Fabrica de prueba','Direccion de prueba')

2.- Ejecute el estatuto y aparece un mensaje que ha sido ejecutado con xito. 3.- En el panel de editor del Query Analyzer, inserte el cdigo:
select * from clientes

ejecute el estatuto y vea los resultados en la pestaa correspondiente. Ubiquese en el rengln insertado con el nmero 110 y observe que las columnas no incluidas en el estatuto insert se completaron y se les puso valor null. Uso de la vista vista2 para modificar datos.1.- En el panel de editor del Query Analyzer, inserte el cdigo:
USE ventas update vista2 set nombre='Nombre de otra fabrica' where clave_cliente=110

2.- Ejecute el estatuto sql y aparece un mensaje que ha sido realizado con xito. 3.- En el panel de editor del Query Analyzer, inserte el cdigo:
select * from clientes

Observe que la columna nombre de la tupla con clave_cliente=110 ha sido modificada al nuevo valor. Uso de la vista vista2 para eliminar datos.-

173

1.- En el panel de editor del Query Analyzer, inserte el cdigo:


USE ventas delete vista2 where clave_cliente=110

2.- Ejecute el estuto sql y aparecer un mensaje que ha sido realizado con xito. 3.- En el panel de editor del Query Analyzer, inserte el cdigo:
select * from clientes

Ejecute el estatuto y observe que ha sido borrada la tupla con el valor 110 en la columna clave_cliente. Eliminacin de la vista llamada vista2 de la base de datos ventas.1.- En el panel de editor del Query Analyzer, inserte el cdigo:
USE ventas go drop view vista2

2.- Ejecute el estuto sql y aparecer un mensaje que ha sido realizado con xito. 3.- Verifique que en el Examinador de Objetos (object browser) en la base de datos ventas ya no exista la vista llamada vista2. Sugerencias Didcticas: Se sugiere que el Maestro realice las acciones: 1.- Verificacin de la instalacin en cada Computadora del Sistema Administrador de Bases de Datos y la versin electrnica de ste Manual.

174

2.- Se sugiere que cada alumno cuente con su propia computadora personal con la finalidad de que realice todos los ejercicios personalmente. 3.- Se sugiere que el Maestro haga una induccin sobre el tema de la Prctica indicando los objetivos de aprendizaje que se obtendrn al realizarla. 4.- Se sugiere que los alumnos abran el Sistema Administrador de Bases de Datos, y, este Manual (de preferencia en forma electrnica); con la finalidad de que vayan realizando los ejercicios copiando y pegando los scripts SQL, ejecutndolos y copiando y pegando los resultados de cada uno en la parte de Reporte del Alumno. 5.- Se sugiere que el Maestro asesore a sus Alumnos durante el proceso de realizacin de la Prctica, logrando as una atencin personalizada. 6.- Se sugiere que el Maestro indique a los alumnos que para evaluar la Prctica enven a su correo electrnico (o le entreguen de manera impresa), la parte del Reporte del Alumno (resultados). Indicando el nmero de la Prctica y el nombre del alumno. 7.- Se sugiere que el Maestro evale los resultados obtenidos en la Prctica y registre una calificacin de la misma, tomndola en cuenta en el proceso de evaluacin que haya definido. 8.- Se sugiere que el Maestro indique a los alumnos cmo se debe editar un comando SQL y como ejecutarlo. Asimismo, como copiar y pegar los resultados en la parte de Reporte del Alumno (resultados), todo esto con la finalidad de que los alumnos entiendan el proceso de ejecucin y resultados que deben realizar en todas las prcticas de ste Manual

Reporte del alumno (resultados): En sta parte el alumno registrar los resultados de cada uno de los ejercicios

175

de la Prctica, indicando a qu parte de la Prctica corresponde.

El alumno escribir en esta seccin los resultados del ejercicio 1 en todas las subsecciones que tiene; especificados en la parte Metodologa, indicando cada punto que se est reportando. Bibliografa preliminar: REFERENCIA A MCSE Microsoft SQL-Server 2000 Database Design and Implementation Training Kit Microsoft Press REFERENCIA B The Practical SQL Handbook Using SQL Variants Fourth Edtion Judith S. Bowman, Sandra L. Emerson, Marcy Darnovsky Addison Wesley REFERENCIA C Fundamentos de Bases de Datos Cuarta Edicin Abraham Silberchatz Henry F. Korth S. Sudarshan McGraw-Hill

176

Nmero de Prctica: 18

Nombre de la Prctica: Diseo de un Plan de Seguridad para una Base de Datos

Objetivo Especfico: El alumno conocer y comprender los conceptos bsicos de seguridad en bases de datos.

Introduccin: En sta prctica, se aprender acerca de la implementacin de seguridad con sql usando un modelo de 6 capas: seguridad fsica, seguridad de protocolo de red, seguridad de dominio, seguridad de computadora local, seguridad de sql y seguridad de la aplicacin. Seguridad fsica.Se aplica a todas las formas de proteccin de datos en una computadora, no solamente a la proteccin de bases de datos sql, incluye seguridad vital en servidores y hardware de red configurando espacios de acceso limitados. Para redes muy grandes, este espacio ser un edificio o conjunto de edificios , para redes de tamao mediano puede ser un Centro de Datos. Para redes pequeas puede ser un closet. Para protegerse contra calamidades ambientales, hay que hacer respaldos constantemente y almacenados fuera del sitio. Seguridad de protocolos de red.El transporte de datos desde un cliente a un servidor sql puede encriptarse para que, quien logre interceptar los paquetes en una red no pueda ser capaz de leer los contenidos de los mismos. La encripcin de paquetes se implementa entre el

177

cliente y el servidor usando encriptamiento con un protocolo SSL (secure socket layer) o llamadas a procedimientos remotos (rpc). Hay distintos protocolos dependiendo de los diferentes sistemas operativos. Seguridad de dominio.Una computadora con el sistema administrador de bases de datos SQL-Server que es miembro de Windows puede autentificar a usuarios usando el identificador de seguridad asociado con el usuario. Las cuentas de usuario bajo el dominio Windows proporcionan una validacin segura y bloqueo de cuenta. Los passwords son encriptados para prevenir intercepcin de red no autorizada, son sensitivos a letras maysculas o minsculas, incluyen tiempo de expiracin y longitud mnima del mismo.

Seguridad de Computadora local.Puesto que el SQL-Server se instala bajo la plataforma de sistema operativo Windows en sus diferentes versiones, stos suministran el ms alto nivel de seguridad de computadora local disponible. Seguridad de SQL-Server.El sistema administrador de bases de datos proporciona un conjunto robusto de servicios de seguridad para proteger a las bases de datos que contiene. Los 4 niveles de categoras de seguridad son: autenticacin, autorizacin, auditoria y encriptamiento. El acceso a la base de datos ocurre en dos etapas: conectndose al SQL-Server (autenticacin) y accesando a la base de datos y sus objetos (autorizacin). Los permisos a los objetos de la base de datos autorizan o niegan a un usuario la posibilidad de ejecutar acciones contra los mismos. El sistema administrador de bases de datos proporciona herramientas de autenticacin, autorizacin (entre otras grupos y roles), estados de permisos,

178

permisos de estatutos y objetos, auditora y encriptamiento de objetos (Consultar referencia A, captulo 13, leccin 1). Los permisos de estatutos y objetos son: create (permiso de estatuto): se aplica a bases de datos, tablas, vistas, procedimientos almacenados, valores de default, reglas y creacin de funciones. backup (permiso de estatuto): se aplica a bases de datos, y respaldos de archivo de transacciones. select y update(permiso de objeto): se aplica para consultas y modificacin de tablas, vistas y columnas en tablas y vistas. insert y delete(permiso de objeto): se aplica para aadir y eliminar tablas, vistas y registros en tablas y vistas. execute(permiso de objeto): se aplica en la ejecucin de procedimientos almacenados.

Seguridad de la aplicacin.Las aplicaciones que acceden a una base de datos pueden llamar al procedimiento almacenado sp-setapprole para activar una regla de la aplicacin. Adems, cada aplicacin puede implementar su propio esquema de seguridad y que est fuera del control de la base de datos. Una vez que se conocen los diferentes mecanismos de seguridad, se disea un plan de seguridad que proteja a la base de datos sin ser restrictiva innecesariamente. Se deben identificar los requerimientos de seguridad, convertir las reglas en un conjunto de actividades del usuario, y entonces, crear un mapa de actividades del usuario. Se har un enfoque en la implementacin de los mecanismos de seguridad descritos en la capa 5 (Seguridad de SQLServer). Los administradores de red, administradores del sistema, y los

179

ingenieros; son los responsables de implementar los mecanismos descritos de la capa 1 a la 4. Los administradores de la base de datos y los diseadores son los responsables de implementar la capa 5, y, los desarrolladores de aplicaciones son los encargados de implementar la capa 6. Consulte la referencia A, captulo 13, lecciones 1 y 2.

Correlacin con el /los subtemas del Programa de Estudio Vigente: Esta prctica va dirigida a tratar los subtemas relacionados con la UNIDAD 6: Seguridad Los subtemas tratados son: Subtema 6.1 Esquemas de autorizacin Material y Equipo Necesario: Para realizar la Prctica es necesario contar con el siguiente hardware y software: Computadora Personal Sistema Operativo XP Sistema Administrador de Bases de Datos: Microsoft SQL-Server 2000 CD que acompaa a este Manual

Metodologa: Ejercicio 1: ventas Creacin de un Plan de Seguridad para la base de datos:

En este ejercicio se har un Plan de Seguridad relacionado con la capa 5 mencionada anteriormente. Para ello se va a trabajar sobre la base de datos:
180

ventas que es la que se ha utilizado en todas las prcticas de este manual. Despus de hacer un estudio del ambiente de trabajo en red sobre la cual trabajar este sistema, podemos establecer los siguientes requerimientos que se deben observar: 1.- La base de datos ventas contiene las tablas: clientes, facturas, ren_facturas y productos. 2.- Se define que existirn los siguientes usuarios que accedern a la base de datos: sa quien es el administrador de la base de datos (quien es el que crea y administra la misma), usuario ventas1 quien es el hace la facturacin y que acceder a todas las tablas de la base de datos, usuario inventarios1 quien es el que administra la tabla productos. 3.- El usuario ventas1 podr aadir, eliminar y modificar los datos en todas las tablas de la base de datos: facturas, ren_facturas, clientes y productos. 4.- El usuario inventarios1 podr aadir, eliminar y modificar los datos en la tabla productos y solamente podr consultar los datos de las tablas: facturas, ren_facturas y clientes. 5.- El usuario ventas1 podr realizar respaldos en la base de datos.

Sugerencias Didcticas: Se sugiere que el Maestro realice las acciones: 1.- Verificacin de la instalacin en cada Computadora del Sistema Administrador de Bases de Datos y la versin electrnica de ste Manual. 2.- Se sugiere que cada alumno cuente con su propia computadora personal con la finalidad de que realice todos los ejercicios personalmente. 3.- Se sugiere que el Maestro haga una induccin sobre el tema de la Prctica

181

indicando los objetivos de aprendizaje que se obtendrn al realizarla. 4.- Se sugiere que los alumnos abran el Sistema Administrador de Bases de Datos, y, este Manual (de preferencia en forma electrnica); con la finalidad de que vayan realizando los ejercicios copiando y pegando los scripts SQL, ejecutndolos y copiando y pegando los resultados de cada uno en la parte de Reporte del Alumno. 5.- Se sugiere que el Maestro asesore a sus Alumnos durante el proceso de realizacin de la Prctica, logrando as una atencin personalizada. 6.- Se sugiere que el Maestro indique a los alumnos que para evaluar la Prctica enven a su correo electrnico (o le entreguen de manera impresa), la parte del Reporte del Alumno (resultados). Indicando el nmero de la Prctica y el nombre del alumno. 7.- Se sugiere que el Maestro evale los resultados obtenidos en la Prctica y registre una calificacin de la misma, tomndola en cuenta en el proceso de evaluacin que haya definido. 8.- Se sugiere que el Maestro indique a los alumnos cmo se debe editar un comando SQL y como ejecutarlo. Asimismo, como copiar y pegar los resultados en la parte de Reporte del Alumno (resultados), todo esto con la finalidad de que los alumnos entiendan el proceso de ejecucin y resultados que deben realizar en todas las prcticas de ste Manual

Reporte del alumno (resultados): En sta parte el alumno registrar los resultados de cada uno de los ejercicios de la Prctica, indicando a qu parte de la Prctica corresponde. El alumno escribir en esta seccin los resultados del ejercicio 1 puntos 1 a 8 especificados en la parte Metodologa, indicando el nmero de cada punto que se est reportando.

182

Bibliografa preliminar: REFERENCIA A MCSE Microsoft SQL-Server 2000 Database Design and Implementation Training Kit Microsoft Press REFERENCIA B The Practical SQL Handbook Using SQL Variants Fourth Edtion Judith S. Bowman, Sandra L. Emerson, Marcy Darnovsky Addison Wesley

183

Nmero de Prctica: 19

Nombre de la Prctica: Implementacin de la Seguridad de una base de datos y su administracin

Objetivo Especfico: El alumno conocer, comprender y aplicar los estatutos SQL para implementar y administrar la seguridad en una base de datos.

Introduccin: Administrando la Autenticacin.Antes de que un usuario se conecte al sistema administrador de bases de datos, una cuenta de seguridad se debe aadir al servidor y se le debe dar acceso al sistema. Se hace esto usando el Administrador Corporativo (Enterprise Manager) o el Analizador de consultas (el Query Analyzer). Administracin de la autorizacin.Solamente la autenticacin no es suficiente para acceder a una base de datos en el sistema administrador de bases de datos. Las cuentas de seguridad (las cuentas de Windows y las del sistema administrador de bases de datos) configuradas para autenticacin son autorizadas para acceder a bases de datos especficas si alguna de las siguientes tres condiciones se reunen: 1.- El rol de guest se permite para acceder a la base de datos 2.- Un rol predefinido u otro estandar del cual el usuario es un miembro se permite que acceda a la base de datos 3.- Un grupo de Windows del cual el usuario es un miembro se permite que acceda a la base de datos.

184

Administracin de permisos.Los derechos efectivos de una cuenta de seguridad que permiten el acceso a una base de datos es la suma de los permisos asignados al rol public, los permisos que el usuario obtiene como miembro de otros roles autorizados y grupos, y cualquier permiso directamente asignado a la cuenta. El estado de permiso deny niega todos los permisos ya sean heredados o cedidos directamente a la cuenta de seguridad. El estatuto grant.Cuando se usa grant, se debe especificar el permiso o permisos asignados y a quien sern asignados. Use la clusula all para asignar todos los objetos vlidos o los permisos establecidos. Cuando se asigna permisos de objeto, se deben especificar sobre qu objeto sern aplicados. Esta especificacin no se requiere para permisos establecidos debido a que ellos aplican a una base de datos, o a un objeto simple en la misma. Opcionalmente, especifique la clusula with grant option para permitir a una cuenta de seguridad que ceda a su vez a otros el mismo permiso que se le ha cedido. Use la clusula as para especificar una cuenta de seguridad (grupo o rol) en la base de datos actual que tiene la autoridad para ejecutar un estatuto grant. Si los permisos son cedidos par aun objeto o grupo o rol, se debe usar la clusula as para especificar el grupo o rol con autoridad para asignar permisos a otros. El sistema administrador de bases de datos verificar que sea un miembro de un grupo especificado o rol antes de permitir al usuario usar el estatuto grant.
Las clusulas principales del estatuto grant son: GRANT ALL | estatutos_de_permisos TO nombres_cuenta_seguridad Las clusulas principales en un estatuto grant cuando asigna permisos a objetos son: GRANT ALL | permisos_objeto

185

(columnas) ON nombre_tabla | nombre_vista | ON nombre_tabla | nombre_vista (columnas) | ON nombre_procedimiento_almacenado | nombre_funcion_definida_por_usuario TO nombres_cuentas_seguridad WITH GRANT OPTION AS nombre_grupo | nombre_rol

El estatuto revoke.Este estatuto sirve para remover permisos previamente cedidos a una cuenta de seguridad. El formato es similar al del estatuto grant con algunas excepciones. La palabra to del estatuto grant se reemplaza por la palabra from cuando se revocan permisos establecidos y es ya sea to o from cuando se revocan permisos de objeto. La sintaxis incluye la clusula opcional cascade y la clusula grant option for para revocar permiso with grant option asignado a una cuenta de seguridad. Utilice la clusula cascade para revocar permisos cedidos a cuentas de seguridad. Se deben incluir las clusulas grant option for y cascade para revocar premisos los permisos cedidos asignados por la cuenta de seguridad a otras. El estatuto deny.Este estatuto explcitamente prohibe a una cuenta de seguridad de los privilegios especificados y prohibe a la cuenta de seguridad que pueda heredar los permisos a travs de un grupo o rol. El formato del deny es similar al de grant y revoke. Al igual que el estatuto grant, la clusula to especifica a quien se aplica el estatuto. El estatuto deny incluye la palabra cascade para explcitamente negar permisos que fueron dados a la cuenta de seguridad especificada y a cualquier otra cuenta a la cual se les cedieron los permisos por dicha cuenta de seguridad. Consulte la referencia A, captulo 13, leccin 3.

186

Correlacin con el /los subtemas del Programa de Estudio Vigente: Esta prctica va dirigida a tratar los subtemas relacionados con la UNIDAD 6: Seguridad Los subtemas tratados son: Subtema 6. 2 Instrucciones GRANT y REVOKE Material y Equipo Necesario: Para realizar la Prctica es necesario contar con el siguiente hardware y software: Computadora Personal Sistema Operativo XP Sistema Administrador de Bases de Datos: Microsoft SQL-Server 2000 CD que acompaa a este Manual

Metodologa: Ejercicio 1: Implementacin de seguridad para la base de datos ventas Creacin de un usuario con Enterprise Manager 1.- Ejecute el Administrador Corporativo (Enterprise Manager) y elija y expanda el nodo de su servidor de datos. 2.- Expanda el nodo titulado seguridad. 3.- En el nodo Inicios de sesion ejecute clic derecho, y elija Nuevo inicio de sesion 4.- Aparece una ventana titulada: Propiedades de Inicio de sesin: Nuevo inicio
187

de sesin, que tiene 3 pestaas 5.- En la pestaa General, ponga el nombre del usuario que se desee, por ejemplo, ponga prueba100. Despus, elija Autenticacin con Sql Server, y ponga la contrasea deseada. Presione el botn Aceptar y pide que se confirme la contraasea. Con esto ya est dado de alto el usuario y aparece en la lista mostrada en el Administrador Corporativo. 6.- Inicie el Analizador de Consultas y elija Autenticacin de Sql Server, escriba el nombre de usuario prueba100 y la contrasea que se tecle. Observe que el sistema elige la base de datos master (que es la default) y no permite acceder a ninguna otra base de datos. 7.- Inicie el Analizador de consultas con un usuario administrador y elija la base de datos a la cual se quiera dar acceso (ventas), y, escriba y ejecute la instruccin: EXEC sp_grantdbaccess @loginame = 'prueba100' Esta, permite que el usuario prueba100 pueda acceder a las bases de datos del servidor. 8.- Ingrese al Analizador de Consultas con el usuario prueba100 y observe que ahora si puede elegir las bases de datos del servidor, elija la base de datos ventas. 9.- Usando el Analizador de Consultas que inicio con prueba100, escriba y ejecute la consulta select * from clientes Observe que se despliega el mensaje: SELECT permission denied on object 'clientes', database 'ventas', owner 'dbo'.

188

Esto es, si bien ya hay acceso a la base de datos aun no tiene permisos asignados para las tablas de la misma. 10.- Usando el Analizador de Consultas que inicio con el administrador , escriba y ejecute la consulta
GRANT SELECT,INSERT, UPDATE, DELETE ON clientes TO prueba100

Este estatuto concede permisos de lectura, insercin, actualizacin y eliminacin sobre la tabla clientes al usuario prueba100. 11.- Usando el Analizador de Consultas que inicio con el usuario prueba100, escriba y ejecute la consulta

insert into clientes values (160,'Fabrica de Prueba','Direccion de prueba','Colonia de prueba','Ciudad de prueba','Estado de prueba',55555) Este estatuto permite hacer la insercin de la tupla correspondiente en la tabla clientes. Escriba y ejecute el estatuto Select * from clientes Observe que permite leer la base de datos y verificar que ha sido insertada la tupla. 12.- Usando el Analizador de Consultas del usuario administrador, escriba y ejecute el estatuto
REVOKE SELECT ON clientes TO prueba100

189

Este estatuto revoca el permiso de lectura al usuario prueba100 sobre la tabla clientes. Sigue conservando los permisos de insercin, actualizacin y borrado concedidos en el punto 10 de este ejercicio. 13.- Usando el Analizador de consultas del usuario prueba100, escriba y ejecute el estatuto select * form clientes Observe que despliega Servidor: mensaje 229, nivel 14, estado 5, lnea 1 SELECT permission denied on object 'clientes', database 'ventas', owner 'dbo'. Indicando que no puede leer la tabla. 14.- Haga mas pruebas con grant y revoke, cediendo y revocando permisos al usuario prueba100 sobre las distintas tablas de la base de datos ventas.

Sugerencias Didcticas: Se sugiere que el Maestro realice las acciones: 1.- Verificacin de la instalacin en cada Computadora del Sistema Administrador de Bases de Datos y la versin electrnica de ste Manual. 2.- Se sugiere que cada alumno cuente con su propia computadora personal con la finalidad de que realice todos los ejercicios personalmente. 3.- Se sugiere que el Maestro haga una induccin sobre el tema de la Prctica indicando los objetivos de aprendizaje que se obtendrn al realizarla. 4.- Se sugiere que los alumnos abran el Sistema Administrador de Bases de Datos, y, este Manual (de preferencia en forma electrnica); con la finalidad de

190

que vayan realizando los ejercicios copiando y pegando los scripts SQL, ejecutndolos y copiando y pegando los resultados de cada uno en la parte de Reporte del Alumno. 5.- Se sugiere que el Maestro asesore a sus Alumnos durante el proceso de realizacin de la Prctica, logrando as una atencin personalizada. 6.- Se sugiere que el Maestro indique a los alumnos que para evaluar la Prctica enven a su correo electrnico (o le entreguen de manera impresa), la parte del Reporte del Alumno (resultados). Indicando el nmero de la Prctica y el nombre del alumno. 7.- Se sugiere que el Maestro evale los resultados obtenidos en la Prctica y registre una calificacin de la misma, tomndola en cuenta en el proceso de evaluacin que haya definido. 8.- Se sugiere que el Maestro indique a los alumnos cmo se debe editar un comando SQL y como ejecutarlo. Asimismo, como copiar y pegar los resultados en la parte de Reporte del Alumno (resultados), todo esto con la finalidad de que los alumnos entiendan el proceso de ejecucin y resultados que deben realizar en todas las prcticas de ste Manual

Reporte del alumno (resultados): En sta parte el alumno registrar los resultados de cada uno de los ejercicios de la Prctica, indicando a qu parte de la Prctica corresponde. El alumno escribir en esta seccin los resultados del ejercicio 1 puntos 1 a 14 especificados en la parte Metodologa, indicando el nmero de cada punto que se est reportando. Bibliografa preliminar: REFERENCIA A

191

MCSE Microsoft SQL-Server 2000 Database Design and Implementation Training Kit Microsoft Press

REFERENCIA B The Practical SQL Handbook Using SQL Variants Fourth Edtion Judith S. Bowman, Sandra L. Emerson, Marcy Darnovsky Addison Wesley

192

Nmero de Prctica: 20 Nombre de la Prctica: Introduccin a los procedimientos almacenados

Objetivo Especfico: El alumno conocer y comprender los elementos bsicos de SQL para implementar procedimientos almacenados.

Introduccin: Un script SQL es un conjunto de estatutos SQL que se ejecutan en conjunto (en lote), los comandos dentro del mismo se procesan desplegando los resultados, cuando se guardan, se almacenan en el sistema de archivos y se les da una extensin .sql, por otra parte, estos scripts pueden ser nombrados y almacenados en el sistema administrador de bases de datos como procedimientos almacenados. Estos pueden invocarse de varias maneras, entre otras desde el Query Analyzer (Analizador de Consultas) Ventajas de los procedimientos almacenados.Los procedimientos almacenados proporcionan una plataforma de programacin, mecanismos de seguridad que no estn disponibles para comandos SQL, mejor desempeo en almacenaje local para la base de datos, precompilacin de cdigo y memoria cach. La plataforma de programacin se provee a travs de construcciones de programacin comunes tales como parmetros de entrada/salida y reuso de procedimientos. Las caractersticas de seguridad incluyen encriptamiento y limitacin de privilegios para usuarios que no estn autorizados a editarlos aunque los puedan ejecutar. Desempeo.Cada vez que uno o varios comandos sql se envan al servidor para ser

193

procesados, este debe determinar si el que los enva tiene permisos adecuados para ejecutarlos y si los comandos son vlidos. Una vez que los permisos y la sintaxis es verificada, el sistema administrador de bases de datos construye un plan de ejecucin para procesar la solicitud. Los procedimientos almacenados son mas eficientes en parte porque es almacenado en el sistema administrador de bases de datos cuando es creado, un script complejo de estatutos SQL contenido en un procedimiento almacenado se llama por un estatuto sql simple, mas que enviando cientos de comandos en la red. Antes de que un procedimiento almacenado es creado, la sintaxis se checa hasta que sea correcta. Si no se devuelve ningn error, el nombre del procedimiento se almacena en la tabla de objetos (sysobjects) y el texto del procedimiento se almacena en la tabla de comentarios (syscomments). La primera vez que el procedimiento se ejecuta, se crea un plan de ejecucin y el procedimiento almacenado se compila. Procesamiento subsecuente es mas rpido debido a que el sistema administrador de bases de datos no tiene que volver a checar la sintaxis, ni a re-crear el plan de ejecucin, ni a recompilar el procedimiento. La memoria cach se checa primero para un plan de ejecucin antes de que el plan sea creado. Plataforma de programacin.Una vez que se crea un procedimiento almacenado, se puede llamar tantas veces como sea necesario. Esta caracterstica permite modularidad y estimula el reuso de cdigo, lo que incrementa el mantenimiento de una base de datos aislndola de practicas de negocios cambiantes. Todas las aplicaciones que llamen al procedimiento almacenado podrn cumplir con las nuevas reglas de negocios sin una modificacin directa. Como otros lenguajes de programacin, los procedimientos almacenados pueden aceptar parmetros de entrada, regresar parmetros de salida, proveer retroalimentacin en la ejecucin en forma de cdigos de estatus y texto descriptivo, y llamar a otros procedimientos.

194

Seguridad.Los procedimientos almacenados mejoran la seguridad usando aislamiento y encriptamiento. Los usuarios de una base de datos pueden recibir permisos de ejecucin de un procedimiento almacenado sin asignarle permiso para directamente acceder a un objeto de una base de datos sobre la cual el procedimiento almacenado opera. Adems, un procedimiento almacenado puede ser encriptado cuando se crea o se modifica para que los usuarios no puedan leer los comandos sql en el mismo. Estas caractersticas de seguridad aislan la estructura de la base de datos del usuario, lo cual asegura la integridad de los datos y la confiabilidad de la base de datos. Categoras de procedimientos almacenados.Hay cinco clases de procedimientos almacenados: procedimientos almacenados del sistema, procedimientos almacenados locales, procedimientos almacenados temporales, procedimientos almacenados extendidos y procedimientos almacenados remotos. Procedimientos almacenados del sistema.Son almacenados en la base de datos Master y son tpicamente nombrados con el prefijo sp_, ejecutan una amplia variedad de tareas que soportan funciones del sistema administrador de bases de datos que soportan llamadas a aplicaciones externas para datos en las tablas de sistema, procedimientos de sistema generales para administracin de las bases de datos, y funciones de administracin de seguridad. Por ejemplo, el siguiente script sql utiliza el procedimiento almacenado sp_table_privileges para mostrar los privilegios de la tabla facturas en la base de datos ventas. use ventas go

195

execute sp_table_privileges facturas Por ejemplo, el siguiente script sql usa el procedimiento almacenado sp_who para desplegar todos los procesos en uso por el usuario llamado sa execute sp_who @loginame=LAB1\sa Procedimientos almacenados locales.Son procedimientos almacenados en una base de datos de usuario y son tpicamente diseados para completar tareas en la base de datos en la cual residen. Tambin puede crearse para hacer al gusto del usuario un cdigo de un procedimiento almacenado de sistema. Procedimientos almacenados temporales.Son similares a los locales, pero existen hasta que la conexin que lo cre es cerrada o hasta que el sistema administrador de bases de datos se apaga. Esta volatilidad existe porque se almacenan en la base de datos TempDB, que se recrea cada vez que el servidor se reinicia. Por lo que, todos sus objetos desaparecen cuando se apaga el servidor. Hay tres tipos: locales (privados), globales y creados directamente en la base de datos TempDB. El nombre de un procedimiento almacenado temporal local siempre empieza con #, uno global comienza con ##. Cualquier conexin a la base de datos puede ejecutar un procedimiento almacenado temporal global. Debe tener un nombre nico, y, se crea en la base de datos TempDB. Los permisos del mismo se dan automticamente al rol public y no puede ser cambiado. Siempre es tan voltil como el local. Se elimina cuando la conexin se cierra y cualquier conexin que lo ejecute se ha terminado. Los procedimientos almacenados temporales que se crean directamente en la base de datos TempDB son diferentes a los locales y globales por: se pueden

196

configurar permisos para ellos, existen aun despus de que la conexin que los creo se termino, y, no se eliminan hasta que el sistema administrador de bases de datos se apaga. Debido a que estos procedimientos se crean en TempDB, es importante que los nombres de las bases de datos a que hagan referencia en el cdigo, se referencien con el formato base_de_datos.dbo.nombre_del_objeto (por ejemplo: ventas.dbo.facturas). Procedimientos almacenados extendidos.Utilizan un programa externo, compilado como un DLL, para expandir las capacidades de un procedimiento almacenado. Algunos de los procedimientos almacenados del sistema son clasificados como extendidos, por ejemplo, el programa xp_sendmail, el cual enva un mensaje y un resultado de una consulta al recipiente de e-mail indicado. Los mas de los procedimientos almacenados extendidos tienen como parte del nombre el prefijo xp_ Se puede usar la funcin objectproperty para determinar si un procedimiento almacenado es extendido o no. Esta funcin regresa un valor de 1 si lo es, y un 0 si no. Ejemplos: use master select objectproperty(object_id(sp_prepare), isextendedproc) Regresa un valor de 1 use master select objectproperty(object_id(xp_logininfo), isextendedproc) Regresa un valor de 0 Procedimiento Almacenado remoto.Este ejecuta un procedimiento almacenado en una instalacin del sistema

197

administrador de la base de datos remota. En la actualidad estn siendo reemplazados por una consulta distribuida.

Consulte la referencia A, captulo 8, leccion 1.

Correlacin con el /los subtemas del Programa de Estudio Vigente: Esta prctica va dirigida a tratar los subtemas relacionados con la UNIDAD 7: Introduccin al SQL Procedural Los subtemas tratados son: Subtema 7.1 Procedimientos almacenados Material y Equipo Necesario: Para realizar la Prctica es necesario contar con el siguiente hardware y software: Computadora Personal Sistema Operativo XP Sistema Administrador de Bases de Datos: Microsoft SQL-Server 2000 CD que acompaa a este Manual

Metodologa: Ejercicio 1: Explorando procedimientos almacenados En este ejercicio se visualizara un conjunto de procedimientos almacenados contenidos en la base de datos Master. Visualizacin de procedimientos almacenados de sistema en la base de datos
198

master.1.- Inicie el Query Analyzer (Analizador de consultas) y conctese al sistema administrador de bases de datos. 2.- Abra la ventana Object Browser 3.- Expanda el nodo llamado Master Note que una lista de objetos aparece, entre otros los nodos Procedimientos Almacenados (Stored Procedures) y Procedimientos Extendidos (Extended Procedures). 4.- Expanda el nodo Procedimientos Almacenados. Aparece una lista de procedimientos almacenados en la base de datos Master. 5.- Revise los nombres de los procedimientos almacenados, y note que dbo ese el propietario de los mismos. 6.- Expanda el procedimiento almacenado llamado dbo.sp_who Aparecen los nodos: Parmetros (parameter) y Dependencias (dependencias). 7.- Expanda el nodo Parmetros Note que hay 2 parmetros definidos> @RETURN_VALUE y @loginame. @RETURN_VALUE se usa para devolver el valor de retorno, todos los procedimientos almacenados tienen uno. @loginame es un parmetro de entrada.

Note que solamente hay una dependencia: la tabla dbo.sysprocesses, la cual es una tabla de sistema almacenada en la base de datos Master. El procedimiento

199

sp_who consulta a la tabla SysProcesses y despliega parte de esta tabla en el conjunto resultado. Esta tabla puede encontrarse expandiendo el nodo System Tables (Tablas de Sistema) 9.- Si se examino la tabla dbo.sysprocesses en el paso previo, regrese al procedimiento sp_who en el Object Browser. 10.- Desplcese en el Obect Browser hasta que vea el nodo Extended Procedures (Procedimientos Extendidos). 11.- Expanda el nodo Extended Procedures Note que los procedimientos almacenados de sistema y los extendidos existen. La mayora son extendidos. 12.- Mantenga el Query Analyzer abierto para el siguiente ejercicio. Uso de 2 metodos para visualizar el contenido de un procedimiento almacenado.1.- Haga clic en el objeto dbo.sp_who 2.- Haga clic derecho en dbo.sp_who El men de contexto para este objeto aparece. 3.- Haga clic en Scripting Options La caja de dialogo Options aparece. 4.- Haga clic en la caja Include Descriptive Headers In the script (Incluye encabezamiento descriptivo en el script), y despus haga clic en OK 5.- Haga clic derecho en dbo.sp_who

200

El men contextual para este objeto aparece. 6.- Apunte a Script Object To New Window As, y haga clic en Create El procedimiento almacenado dbo.sp_who aparece en la ventana de Query. Observe que las palabras create procedure aparecen en la parte de arriba. 7.- Haga clic en New Query (nueva consulta) en la barra de comandos o presione CTRL-N. Una nueva ventana para consulta aparece en el panel derecho. 8.- En el panel Editor de la ventana Quero, teclee el codigo: sp_helptext [master.dbo.sp_who] Este cdigo usa el procedimiento almacenado sp_helptext para mostrar el contenido del procedimiento almacenado sp_who contenido en la base de datos Master. 9.- Ejecute el cdigo En el panel de resultados aparece el contenido del procedimiento almacenado sp_who.

Sugerencias Didcticas: Se sugiere que el Maestro realice las acciones: 1.- Verificacin de la instalacin en cada Computadora del Sistema Administrador de Bases de Datos y la versin electrnica de ste Manual. 2.- Se sugiere que cada alumno cuente con su propia computadora personal con la finalidad de que realice todos los ejercicios personalmente.

201

3.- Se sugiere que el Maestro haga una induccin sobre el tema de la Prctica indicando los objetivos de aprendizaje que se obtendrn al realizarla. 4.- Se sugiere que los alumnos abran el Sistema Administrador de Bases de Datos, y, este Manual (de preferencia en forma electrnica); con la finalidad de que vayan realizando los ejercicios copiando y pegando los scripts SQL, ejecutndolos y copiando y pegando los resultados de cada uno en la parte de Reporte del Alumno. 5.- Se sugiere que el Maestro asesore a sus Alumnos durante el proceso de realizacin de la Prctica, logrando as una atencin personalizada. 6.- Se sugiere que el Maestro indique a los alumnos que para evaluar la Prctica enven a su correo electrnico (o le entreguen de manera impresa), la parte del Reporte del Alumno (resultados). Indicando el nmero de la Prctica y el nombre del alumno. 7.- Se sugiere que el Maestro evale los resultados obtenidos en la Prctica y registre una calificacin de la misma, tomndola en cuenta en el proceso de evaluacin que haya definido. 8.- Se sugiere que el Maestro indique a los alumnos cmo se debe editar un comando SQL y como ejecutarlo. Asimismo, como copiar y pegar los resultados en la parte de Reporte del Alumno (resultados), todo esto con la finalidad de que los alumnos entiendan el proceso de ejecucin y resultados que deben realizar en todas las prcticas de ste Manual

Reporte del alumno (resultados): En sta parte el alumno registrar los resultados de cada uno de los ejercicios de la Prctica, indicando a qu parte de la Prctica corresponde. El alumno escribir en esta seccin los resultados del ejercicio 1 en todas sus partes, especificados en la parte Metodologa, indicando el nmero de cada

202

punto que se est reportando.

Bibliografa preliminar: REFERENCIA A MCSE Microsoft SQL-Server 2000 Database Design and Implementation Training Kit Microsoft Press

REFERENCIA B The Practical SQL Handbook Using SQL Variants Fourth Edtion Judith S. Bowman, Sandra L. Emerson, Marcy Darnovsky Addison Wesley

203

Nmero de Prctica: 21

Nombre de la Prctica: Procedimientos almacenados: creacin, ejecucin, modificacin y eliminacin

Objetivo Especfico: El alumno conocer, comprender y aplicar los estatutos SQL necesarios para crear, ejecutar, modificar y eliminar procedimientos almacenados.

Introduccin: Los procedimientos almacenados pueden crearse, ejecutarse, modificarse y eliminarse usando el Query Analyzer (Analizador de Consultas) o el Enterprise Manager (Administrador Corporativo). Las palabras clave para crear un procedimiento almacenado son create procedure. Antes de ejecutar un procedimiento almacenado, se deben suministrarle cualquier valor de parmetro requerido. Se pueden ejecutar manualmente o automticamente cuando el sistema administrador de bases de datos sea iniciado. La palabra clave para ejecutar un procedimiento almacenado es execute, esta palabra es opcional si el procedimiento a ejecutarse es una sola linea de cdigo o si el nombre del procedimiento es la primera palabra en un lote de comandos. Un procedimiento almacenado puede modificarse despus de que haya sido creado, las palabras clave para modificar un procedimiento son alter procedure. Un procedimiento almacenado puede eliminarse de una base de datos con la palabra clave drop. Se puede eliminarlos desde Enterprise Manager o desde el

204

Query Analyzer seleccionndolo y presionando la tecla delete. Cmo se almacena un procedimiento.Cuando un procedimiento se crea, el sistema administrador de bases de datos checa la sintaxis de los estatutos que contiene, si es incorrecta genera un mensaje de error y no se crea el procedimiento. Pero, si no hay errores de sintaxis el procedimiento se almacena usando su nombre y otra informacin en la tabla SysObjects. El texto usado para crearlo se escribe en la tabla SysComments de la base de datos actual. Mtodos para crear procedimientos almacenados.Hay varias maneras para crear un procedimiento almacenado: el estatuto create procedure, SQL-DMO (usando el objeto StoredProcedure), el rbol de consola en el Enterprise Manager, y el wizard Create Stored Procedure (el cual se puede acceder en el Enterprise Manager. El estatuto create procedure.Este estatuto se puede usar en el Query Analyzer, permite realizar las tareas: 1.- Especificar procedimientos almacenados agrupados 2.- Definir parmetros de entrada/salida, que siempre son precedidos por el smbolo @, seguido por el nombre del parmetro y la designacin del tipo de datos. Los parmetros de salida deben incluir a la palabra output para distinguirlos de los parmetros de entrada. 3.- Usa cdigos de retorno para desplegar la informacin acerca del xito o fallo de la tarea. 4.- Controla si un plan de ejecucin debe asignarse a memoria cach para el procedimiento. 5.- Encripta el contenido del procedimiento almacenado para seguridad. 6.- Controla el comportamiento de la ejecucin para un suscriptor a quien se le hace rplica. 7.- Especifica las acciones que el procedimiento almacenado debe realizar

205

cuando es ejecutado. Procedimiento almacenado con contexto.Con la excepcin de procedimientos almacenados temporales, un procedimiento almacenado es siempre creado en la base de datos actual. Por ello, siempre se debe especificar la base de datos actual usando el estatuto use nombre_base_datos seguido por el estatuto go antes de crear el procedimiento. Si se usa el Query Analyzer se puede elegir con anticipacin el nombre de la base de datos actual. Procedimientos almacenados temporales.Para crearlos hay poner en el nombre del procedimiento, como primer carcter el #, lo que instruye al sistema administrador de bases de datos a crearlo en la base de datos TempDb. Cuando se desea que el procedimiento almacenado temporal sea adems global, se deben de poner los caracteres ## Agrupamiento, cacheo y encriptamiento de procedimientos almacenados.Se pueden agrupar un conjunto de procedimientos almacenados, para hacerlo se asigna a cada procedimiento en el grupo el mismo nombre y se aade al mismo un carcter ; (punto y coma) y un nmero nico. Por default, el plan de ejecucin de un procedimiento almacenado se coloca en memoria cach la primera vez que se ejecuta y no se vuelve a poner en cach hasta que el servidor se reinicia o hasta que la tabla usaba por el mismo cambia. Para forzar a que un procedimiento almacenado se recompile cada vez que se ejecuta, se debe aadir la clusula with recompile cuando se crea, o cuando se ejecuta. Para proteger el contenido de un procedimiento almacenado se puede encriptar usando las palabras with encryption cuando se crea el procedimiento. Procedimientos almacenados con Administrador Corporativo (Enterprise

206

Manager).Se pueden crear procedimientos almacenados directamente con el Administrador Corporativo, para ello hay que iniciar el programa e expandir el rbol de la consola en el servidor deseado y despus se expande la base de datos donde se crear. Se le hace clic derecho al nodo titulado Stored Procedure (Procedimiento Almacenado) y se hace clic derecho en New Stored Procedure (Nuevo Procedimiento Almacenado). Entonces aparece una ventana en donde se pueden capturar las propiedades del procedimiento incluyendo el cdigo del mismo y finalmente se presiona el botn de Aceptar. En esta misma ventana se puede checar la sintaxis del procedimiento antes de crearlo y salvarlo. Una vez que se ha creado se pueden abrir las propiedades del procedimiento y configurar sus permisos. Adicionalmente, se pueden crear procedimientos almacenados utilizando el Create Stored Procedure Wizard (Asistente de Creacin de Procedimientos Almacenados), el cual va guiando al usuario durante todo el proceso. Para acceder al mismo hay que entrar en la opcin del men principal Tools (Herramientas) y elegir la opcin Wizards (Asistentes), y, ah se debe elegir el mencionado. Resolucin de nombres retardada.Cuando un procedimiento almacenado se crea, el sistema administrador de bases de datos no checa la existencia de los objetos que son referenciados en el. Esta caracterstica existe porque es posible que un objeto, tal como una tabla referenciada en el procedimiento, no exista cuando el procedimiento se crea. La verificacin de los objetos se realiza cuando el procedimiento almacenado se ejecuta. Ejecucin de un procedimiento almacenado.Un procedimiento almacenado se ejecuta simplemente tecleando su nombre y los parmetros requeridos. Por ejemplo: se pueden ver los contenidos de un

207

procedimiento almacenado escribiendo sp_helptext y el nombre del procedimiento que se desea. Si el procedimiento almacenado no es el primer estatuto de un script, para ejecutarlo se le debe preceder con la palabra execute o con la versin corta exec. Especificacin de parmetros.Si un procedimiento almacenado requiere parmetros, se deben especificar cuando se ejecuta el procedimiento. Cuando se definen parmetros de Entrada y de Salida se deben preceder por el signo @, seguido por el nombre del parmetro y el tipo de dato. Cuando se llama un procedimiento para ejecucin, se debe incluir un valor para el parmetro (opcionalmente se puede poner el nombre del parmetro). Si no se especifica el nombre del parmetro, stos se deben poner en el mismo orden como fueron especificados cuando el procedimiento fue creado. Cuando se ejecuta un procedimiento almacenado se deber poner una variable de tipo de dato entero para que almacene valores de retorno del mismo, a la cual se le asigna lo que devuelva el procedimiento. Se debe especificar en el procedimiento la palabra return con un valor entero para que funcione. Ejecucin de procedimientos almacenados cuando se inicia el sistema administrador de bases de datos.Por distintas razones, es muy recomendable ejecutar procedimientos almacenados cuando el sistema administrador de bases de datos se inicia, esto se puede implementar usando el procedimiento sp_procoption, el cual acepta tres parmetros: @ProcName, @OptionName y @OptionValue. El script para usarlo es el siguiente: USE Master GO EXECUTE sp_procoption @procname = autostart,

208

@optionname = startup, @optionvalue = true Solamente procedimientos cuyo propietario sea un dbo (administrador) y que estn localizados en la base de datos master pueden ser configurados para que se inicien automticamente. Si se desea iniciar automticamente un procedimiento en otra base de datos, se puede llamar desde un procedimiento localizado en la base de datos master que est configurado para que se inicie automticamente. A esto se le llama anidamiento. Un procedimiento almacenado que se inicie automticamente tambien se puede configurar con el Administrador Corporativo (Enterprise Manager): acceda a la base de datos master, haga clic en el nodo Stored Procedures (Procedimento almacenado), seleccione un procedimiento que se desea iniciar automticamente y haga clic derecho sobre el, en la ventana de dilogo seleccione la opcin Execute Whenever SQL Server Starts, y acepte el proceso. Para determinar si un proceso est configurado para ser iniciado automticamente, ejecute la funcin objectproperty y cheque la propiedad ExecIsStartup. Por ejemplo, si se desea saber si el procedimiento almacenado llamado autostart est configurado para iniciar automticamente se escribe: USE Master SELECT OBJECTPROPERTY(object_id('autostart'), 'ExecIsStartup') Para deshabilitar procedimientos almacenados que se inicien automticamente, se debe ejecutar el procedimiento sp_configure. Ejemplo: EXECUTE sp_configure @configname = 'scan for startup procs', @configvalue = 0 RECONFIGURE GO Despus de ejecutar este script se deshabilitan para que se inicien

209

automticamente todos los procedimientos almacenados que se marcaron, y, la prxima vez que se inicie el sistema administrador de bases de datos no se ejecutarn. Modificacin de procedimientos almacenados.Se puede usar el estatuto alter procedure para modificar el contenido de un procedimiento almacenado definido por el usuario. La sintaxis de ste estatuto es casi idntica a la del create procedure. Para hacer sto con el Administrador Corporativo (Enterprise Manager), haga clic derecho en el procedimiento almacenado y en la ventana de dilogo de propiedades, modifique el procedimiento como lo desee. Si usa el Query Analyzer (Analizador de Consultas), una vez que haya abierto el Object Browser (Examinador de Objetos), haga clic derecho al procedimiento almacenado y clic en Edicin (Edit), aparece el script y haga los cambios necesarios. Para cambiar el nombre de un procedimiento almacenado definido por el usuario, use el procedimiento sp_rename. USE ventas GO EXECUTE sp_rename @objname = 'ventas1', @newname = 'ventas100', @objtype = 'object' Este script cambia el nombre de un procedimiento almacenado llamado ventas1 a ventas100. Tambin se puede cambiar el nombre de un procedimiento almacenado definido por el usuario desde el Administrador Corporativo (Enterprise Manager), haciendo clic derecho en el nombre del procedimiento y seleccionando la opcin rename. Cuando se renombre un procedimiento almacenado se debe tener cuidado con

210

aquellos que pudieran estar anidados. Eliminacin de procedimientos almacenados.Se utiliza el estatuto drop procedure para eliminar un procedimiento almacenado definido por el usuario. Ejemplo: USE ventas GO DROP PROCEDURE ventas100, ventas101 Este script elimina los procedimientos almacenados llamados ventas100 y ventas101. Antes de eliminar un procedimiento almacenado, hay que verificar si otras bases de datos tienen dependencias de el, utilice el procedimiento sp_depends para checar esto. Consulte la referencia A, captulo 8, leccion 2.

Correlacin con el /los subtemas del Programa de Estudio Vigente: Esta prctica va dirigida a tratar los subtemas relacionados con la UNIDAD 7: Introduccin al SQL Procedural Los subtemas tratados son: Subtema 7.1 Procedimientos almacenados

Material y Equipo Necesario: Para realizar la Prctica es necesario contar con el siguiente hardware y software:
211

Computadora Personal Sistema Operativo XP Sistema Administrador de Bases de Datos: Microsoft SQL-Server 2000 CD que acompaa a este Manual

Metodologa: Ejercicio 1: Trabajando con Procedimientos almacenados En este ejercicio se crear un procedimiento en la base de datos ventas y se verificar que se cre. Despus se ejecutar, modificar y eliminar. Creacin de un procedimiento almacenado en la base de datos ventas.1.- Inicie el Query Analyzer (Analizador de consultas) y conctese al sistema administrador de bases de datos. 2.- Cierre la desplegada. ventana Object Browser (Examinador de Objetos) si est

3.- Expanda la ventana de tal manera que ocupe todo el espacio de trabajo. 4.- En el Editor, inserte y ejecute el cdigo: use ventas go create procedure dbo.ventas5 @clave int as select clave_cliente,nombre,direccion from clientes where clave_cliente=@clave

212

select C.clave_cliente,C.nombre, F.no_factura,F.fecha_fac,R.clave,R.cantidad from clientes C, facturas F, ren_facturas R where C.clave_cliente=F.clave_cliente and F.no_factura=R.no_factura and C.clave_cliente=@clave order by C.nombre,F.fecha_fac go Se selecciona la base de datos ventas, el nombre del procedimiento ser ventas5 y recibe un parmetro @clave. La edicin es libre de contexto, es decir, puede escribirse como se desee, solamente hay que respetar la sintaxis. La clusula as demarca el inicio del procedimiento. Dentro del procedimiento se han definido dos consultas diferentes que usan el parmetro de entrada. Visualizacin del procedimiento almacenado en el Query Analyzer.1.- Abra el Examinador de Objetos (Object Browser) y expanda la base de datos ventas. 2.- Expanda el nodo Procedimientos Almacenados (Stored Procedures). Aparecen todos los procedimientos almacenados que se han creado en la base de datos. 3.- Expanda el procedimiento almacenado ventas5. Note que aparecen 2 nodos: Parameters (Parmetros) y Dependencies (Dependencias). 4.- Expanda el nodo Parmetros Note que hay 2 parmetros definidos: el @clave que se cre y el parmetro automtico @RETURN_VALUE

213

5.- Expanda el nodo Dependencias Note que este procedimiento depende de 3 objetos: la tabla clientes, la tabla facturas y la tabla ren_facturas. Ningun objeto depende de este procedimiento almacenado. 6.- Haga clic en el panel de edicin 7.- Escriba y ejecute el cdigo: sp_depends ventas5 Este procedimiento checa las dependencias sobre otros objetos. 8.- No cierre el Query Analyzer (se usar adelante)

Ejecucin de un procedimiento almacenado.-

1.- En el panel del editor escriba y ejecute el cdigo: execute ventas5 @clave=30 Se puede usar la versin corta de execute que es exec. Observe que salen 2 conjuntos resultados, uno para cada clusula select del procedimiento 2.- Ejecute el estatuto anterior eliminando la palabra execute. Observe los resultados. 3.- Abra el Object Browser (Examinador de Objetos) y en el nodo Procedimientos Almacenados identifique al procedimiento ventas5 y haga clic derecho en el. 4.- En el men contextual, apunte a Script Object to New Windows As (Crear

214

secuencia de comandos del objeto en nueva ventana como) y haga clic en execute (ejecutar). Query Analyzer carga una pgina nueva en el editor y el estatuto execute para el procedimiento ventas5 aparece. Note que se declaran 2 variables: @RC y @clave. La primera se usa para recibir cdigos de retorno que son parte del procedimiento. La segunda recibe el valor del parmetro de entrada. @RC es igual al nombre del procedimiento almacenado completo (usuario, administrador y nombre). Esta relacin captura cualquier cdigo de retorno del procedimiento y los coloca en @RC. 5.- En el editor, haga clic al final del estatuto exec para que el cursor aparezca ah, despus de la palabra @clave y teclee para completar EXEC @RC = [ventas].[dbo].[ventas5] @clave=30 6.- Ejecute la consulta Observe que aparecen los mismos resultados que salieron previamente. 7.- Cierre la pgina nueva creada en el Query, pero no cierre el Query Analyzer usando la opcin Ventana y haciendo clic en la pantalla que tiene el smbolo de palomita. Aparece un mensaje indicando si se desean guardar los cambios. 8.- Haga clic en No, y, aparece la pgina original del editor.

Modificacin de procedimiento almacenado.-

1.- En el editor del Query Analyzer, localice el cdigo use ventas go create procedure dbo.ventas5

215

@clave int as select clave_cliente,nombre,direccion from clientes where clave_cliente=@clave select C.clave_cliente,C.nombre, F.no_factura,F.fecha_fac,R.clave,R.cantidad from clientes C, facturas F, ren_facturas R where C.clave_cliente=F.clave_cliente and F.no_factura=R.no_factura and C.clave_cliente=@clave order by C.nombre,F.fecha_fac go 2.- Cambie la palabra create por alter Cuando el texto en el procedimiento se cambie, la palabra alter habilita al procedimiento almacenado a que se pueda cambiar sin perder ninguna propiedad configurada para ese objeto. 3.- Lo que se quiere es que el segundo select aparezca en orden descendente para el nombre del cliente, modifique la sintaxis para que sea como order by C.nombre descending ,F.fecha_fac 4.- Cambie el primer select para que ordene por la columna direccin, y que sea como select clave_cliente,nombre,direccion from clientes where clave_cliente=@clave order by direccion

216

5.- Con el cursor ilumine todo el cdigo del procedimiento y ejectelo 6.- Para verificar que los cambios fueron realizados, ejecute el estatuto sp_helptext ventas5 El texto del procedimiento aparece. 7.- Deje el Query Analyzer para el prximo ejercicio

Eliminacin de un procedimiento almacenado.-

1.- Ejecute el siguiente cdigo drop procedure ventas5 El procedimiento almacenado se elimina de la base de datos ventas 2.- Use el Object Browser del Query Analyzer o el Enterprise Manager para verificar que el procedimiento almacenado ha sido removido 3.- Cierre el Query Analyzer Se le pregunta si se desea salvar el script 4.- Si lo desea slvelo eligiendo Si, de otra manera presione No

Sugerencias Didcticas: Se sugiere que el Maestro realice las acciones:

217

1.- Verificacin de la instalacin en cada Computadora del Sistema Administrador de Bases de Datos y la versin electrnica de ste Manual. 2.- Se sugiere que cada alumno cuente con su propia computadora personal con la finalidad de que realice todos los ejercicios personalmente. 3.- Se sugiere que el Maestro haga una induccin sobre el tema de la Prctica indicando los objetivos de aprendizaje que se obtendrn al realizarla. 4.- Se sugiere que los alumnos abran el Sistema Administrador de Bases de Datos, y, este Manual (de preferencia en forma electrnica); con la finalidad de que vayan realizando los ejercicios copiando y pegando los scripts SQL, ejecutndolos y copiando y pegando los resultados de cada uno en la parte de Reporte del Alumno. 5.- Se sugiere que el Maestro asesore a sus Alumnos durante el proceso de realizacin de la Prctica, logrando as una atencin personalizada. 6.- Se sugiere que el Maestro indique a los alumnos que para evaluar la Prctica enven a su correo electrnico (o le entreguen de manera impresa), la parte del Reporte del Alumno (resultados). Indicando el nmero de la Prctica y el nombre del alumno. 7.- Se sugiere que el Maestro evale los resultados obtenidos en la Prctica y registre una calificacin de la misma, tomndola en cuenta en el proceso de evaluacin que haya definido. 8.- Se sugiere que el Maestro indique a los alumnos cmo se debe editar un comando SQL y como ejecutarlo. Asimismo, como copiar y pegar los resultados en la parte de Reporte del Alumno (resultados), todo esto con la finalidad de que los alumnos entiendan el proceso de ejecucin y resultados que deben realizar en todas las prcticas de ste Manual

218

Reporte del alumno (resultados): En sta parte el alumno registrar los resultados de cada uno de los ejercicios de la Prctica, indicando a qu parte de la Prctica corresponde. El alumno escribir en esta seccin los resultados del ejercicio en todas sus partes, especificados en la parte Metodologa, indicando el nmero de cada punto que se est reportando.

Bibliografa preliminar: REFERENCIA A MCSE Microsoft SQL-Server 2000 Database Design and Implementation Training Kit Microsoft Press

REFERENCIA B The Practical SQL Handbook Using SQL Variants Fourth Edtion Judith S. Bowman, Sandra L. Emerson, Marcy Darnovsky Addison Wesley

219

Nmero de Prctica: 22

Nombre de la Prctica: Programacin de procedimientos almacenados Objetivo Especfico: El alumno disear y programar procedimientos almacenados para sus propias bases de datos. Introduccin: Los procedimientos almacenados son una herramienta poderosa para codificar tareas en el lenguaje SQL. En sta prctica se vern como se manejan los parmetros de Entrada y de Salida e introduce variables. Adems, se ver como manejar errores, anidamientos y cursores. Parmetros y variables.Son un aparte fundamental de la dinmica de los procedimientos almacenados. Los parmetros de entrada habilitan al usuario a pasarle valores, los parmetros de salida extienden la salida del procedimiento almacenado mas all que lo devuelto por una consulta simple. El dato de un parmetro de salida se capturan en memoria cuando el procedimiento se ejecuta, para ello se debe crear una variable que sostenga el valor. Se pueden desplegar los valores con select o print . Los parmetros de salida de un procedimiento almacenado se definen usando la palabra output. Cuando el procedimiento se ejecuta, el valor del parmetro de salida se almacena en memoria en una variable previamente definida. El estatuto return y la manipulacin de errores. Un procedimiento almacenado bien escrito debe incluir manipulacin de errores. Las dos categoras primarias de errores son errores de computacin, tales como

220

servidores de bases de datos no disponibles, y errores del usuario. Cdigos de retorno y la funcin @@error se usan para manipular errores que ocurren cuando un procedimiento se ejecuta. Los cdigos de retorno se usan para otros propsitos diferentes a la manipulacin de errores. El estatuto return se usa para generar cdigos de retorno y salida de un lote, y puede suministrar cualquier valor entero a un programa que lo llama. Suponga que en la llamada al procedimiento almacenado ventas5, el parmetro que se le d en tiempo de ejecucin sea un valor de cliente que no exista, por ejemplo el nmero de cliente 1000. Al ejecutar el procedimiento, los resultados de las dos clusulas select aparecen con renglones nulos. Es ms instructivo explicar al usuario que no hay registros para ese nmero de cliente. Para ello, se utilizan rutinas de atrapar errores. Prueba de errores del servidor.Otra importante categora de errores es la prueba de errores de la base de datos. La funcion @@error habilita al usuario a probar mas de 3000 diferentes errores relacionados a la base de datos. Esta funcin captura nmeros de error de la base de datos durante la ejecucin del procedimiento. Se puede usar cada nmero de retorno para desplegar un mensaje al usuario explicndole la razn del error. Los nmeros de error y sus descripciones se almacenan en la tabla master.dbo.sysmessages. Se puede consultar esta tabla asi: select error, description from master.dbo.sysmessages Si un procedimiento se ejecuta exitosamente, @@error se pone a 0. Si un error ocurre, un nmero de error diferente a 0 se regresa a @@error. Cuando otro estatuto SQL ejecuta un procedimiento, el valor de @@error cambia. Por lo tanto, @@error debe almacenarse en una variable o suministrar un cdigo de retorno despus de que cada estatuto SQL se complete. Procedimientos anidados.-

221

El anidamiento de procedimientos almacenados ocurre cuando un procedimiento llama a otro. Un procedimiento puede realizar muchas tareas, pero es mejor crear procedimientos mas simples, mas genricos que puedan llamar a otros procedimientos almacenados para completar tareas adicionales. Los procedimientos se pueden anidar hasta 32 niveles de profundidad. No hay lmite en cuntos un procedimiento puede llamar. Un procedimiento se puede llamar a s mismo recursivamente. Cursores.Se pueden usar cursores en procedimientos almacenados.

Consulte la referencia A, captulo 8, leccin 3.

Correlacin con el /los subtemas del Programa de Estudio Vigente: Esta prctica va dirigida a tratar los subtemas relacionados con la UNIDAD 7: Introduccin al SQL Procedural Los subtemas tratados son: Subtema 7.1 Procedimientos almacenados

Material y Equipo Necesario: Para realizar la Prctica es necesario contar con el siguiente hardware y software: Computadora Personal Sistema Operativo XP Sistema Administrador de Bases de Datos: Microsoft SQL-Server 2000
222

CD que acompaa a este Manual

Metodologa: Ejercicio 1: Programacin de Procedimiento Almacenados para insertar y recuperar datos Creacin de un procedimiento almacenado para insertar en tabla clientes.1.- Inicie el Query Analyzer (Analizador de consultas) y conctese al sistema administrador de bases de datos. 2.- En el editor, escriba y ejecute el siguiente cdigo: USE ventas GO CREATE PROCEDURE dbo.insertacliente @clave int, @nomb char(40), @direc char(30), @col char(30), @cd char(20), @edo char(20), @cp int AS INSERT [ventas].[dbo].[clientes] (clave_cliente,nombre,direccion,colonia, ciudad, estado, cod_pos) VALUES (@clave, @nomb, @direc, @col, @cd, @edo, @cp) RETURN(@clave) GO En ste script se crea un procedimiento almacenado llamado insertacliente. Se especifican parmetros de entrada requeridos. 3.- En el editor escriba y ejecute el siguiente cdigo:

DECLARE @valor_retorno int EXECUTE @valor_retorno=dbo.insertacliente

223

@clave = 120, @nomb = 'Fabrica de Prueba', @direc = 'Otra direccion de prueba', @col = 'Colonia de prueba', @cd = 'Ciudad de prueba', @edo = 'Estado de prueba', @cp = '55555' SELECT 'La clave de cliente insertada es:' + CONVERT(CHAR(6), @valor_retorno) Adicin de tcnicas de manipulacin de errores al procedimiento almacenado.1.- El procedimiento almacenado insertacliente no contiene ningn cdigo para manipular errores. Por ello, necesita ser modificado para incluirlo. 2.- Se crear un nuevo procedimiento almacenado llamado insertacliente1 en el cual se incorporar una rutina de administracin de errores. El cdigo del mismo es el siguiente: CREATE PROCEDURE dbo.insertacliente1 @clave int, @nomb char(40), @direc char(30), @col char(30), @cd char(20), @edo char(20), @cp int AS if @direc is null and @col is null begin return (1) end if @nomb is null begin return (2) end INSERT [ventas].[dbo].[clientes] (clave_cliente,nombre,direccion,colonia, ciudad, estado, cod_pos) VALUES (@clave, @nomb, @direc, @col, @cd, @edo, @cp)

224

if @@ERROR <> 0 return(3) else return (@clave) 3.- Para probar el procedimiento almacenado insertacliente1, en el siguiente ejemplo se le da toda la informacin correcta para que en el momento de la ejecucin logre insertar el registro y devuelva el valor de retorno que es el nmero de clave_cliente que insert. Escriba y ejecute el siguiente cdigo: DECLARE @valor_retorno int EXECUTE @valor_retorno=dbo.insertacliente1 @clave = 125, @nomb = 'Fabrica de Prueba 2', @direc = 'Otra direccion de prueba 2', @col = 'Colonia de prueba 2', @cd = 'Ciudad de prueba2 ', @edo = 'Estado de prueba 2', @cp = '88888' IF @valor_retorno = 3 BEGIN PRINT 'Ocurrio un error en la base de datos.' END IF @valor_retorno = 1 PRINT 'Debe especificar valores para: Direccion y Colonia' ELSE IF @valor_retorno = 2 PRINT 'Debe especificar un valor para: Nombre' ELSE SELECT 'La clave de cliente que se inserto es: ' + CONVERT(CHAR(6), @valor_retorno) El resultado devuelto es: La clave de cliente que se inserto es: 125

Ejecute nuevamente el script cambiando la variable @clave al valor 130 y

225

poniendo la variable @nomb con valor nulo: DECLARE @valor_retorno int EXECUTE @valor_retorno=dbo.insertacliente1 @clave = 130, @nomb = null, @direc = 'Otra direccion de prueba 2', @col = 'Colonia de prueba 2', @cd = 'Ciudad de prueba2 ', @edo = 'Estado de prueba 2', @cp = '88888' IF @valor_retorno = 3 BEGIN PRINT 'Ocurrio un error en la base de datos.' END IF @valor_retorno = 1 PRINT 'Debe especificar valores para: Direccion y Colonia' ELSE IF @valor_retorno = 2 PRINT 'Debe especificar un valor para: Nombre' ELSE SELECT 'La clave de cliente que se inserto es: ' + CONVERT(CHAR(6), @valor_retorno)

El resultado devuelto es: Debe especificar un valor para: Nombre Adems, ejecute la instruccin Select * from clientes Para verificar que no se ha insertado el registro con valor de clave_cliente igual a 130.

Ahora cambie las variables: @nomb se le pone la cadena Juan, la variable

226

@direc se le pone null, y, la variable @col se le pone valor null. Escriba y ejecute el cdigo: DECLARE @valor_retorno int EXECUTE @valor_retorno=dbo.insertacliente1 @clave = 130, @nomb = 'Juan', @direc = null, @col = null, @cd = 'Ciudad de prueba2 ', @edo = 'Estado de prueba 2', @cp = '88888' IF @valor_retorno = 3 BEGIN PRINT 'Ocurrio un error en la base de datos.' END IF @valor_retorno = 1 PRINT 'Debe especificar valores para: Direccion y Colonia' ELSE IF @valor_retorno = 2 PRINT 'Debe especificar un valor para: Nombre' ELSE SELECT 'La clave de cliente que se inserto es: ' + CONVERT(CHAR(6), @valor_retorno) El resultado devuelto es: Debe especificar valores para: Direccion y Colonia Adems, ejecute la instruccin Select * from clientes Para verificar que no se ha insertado el registro con valor de clave_cliente igual a 130.

Creacin de un procedimiento almacenado para que recibe un parmetro y que

227

devuelve un parmetro 1.- Escriba y ejecute el siguiente cdigo: create procedure suma @operando1 integer, @operando2 integer, @resultado integer output as set @resultado=@operando1+@operando2 Este procedimiento crea un procedimiento almacenado llamado suma que recibe 3 parmetros: 2 con valores de entrada y uno con valor de salida (resultado de la suma). 2.- Escriba y ejecute el siguiente cdigo: declare @res integer EXECUTE dbo.suma 100, 200, @res output print @res Este script ejecuta el procedimiento almacenado suma y le pasa 2 parmetros de entrada y uno de salida (observe que el de salida se especifica con la palabra output). Adems, se define una variable @res que es la que contendr el resultado devuelto por el procedimiento. Observe el orden de los parmetros en la definicin del procedimiento y en la ejecucin del mismo. Este script imprime el resultado de la suma.

Sugerencias Didcticas: Se sugiere que el Maestro realice las acciones: 1.- Verificacin de la instalacin en cada Computadora del Sistema Administrador de Bases de Datos y la versin electrnica de ste Manual. 2.- Se sugiere que cada alumno cuente con su propia computadora personal con

228

la finalidad de que realice todos los ejercicios personalmente. 3.- Se sugiere que el Maestro haga una induccin sobre el tema de la Prctica indicando los objetivos de aprendizaje que se obtendrn al realizarla. 4.- Se sugiere que los alumnos abran el Sistema Administrador de Bases de Datos, y, este Manual (de preferencia en forma electrnica); con la finalidad de que vayan realizando los ejercicios copiando y pegando los scripts SQL, ejecutndolos y copiando y pegando los resultados de cada uno en la parte de Reporte del Alumno. 5.- Se sugiere que el Maestro asesore a sus Alumnos durante el proceso de realizacin de la Prctica, logrando as una atencin personalizada. 6.- Se sugiere que el Maestro indique a los alumnos que para evaluar la Prctica enven a su correo electrnico (o le entreguen de manera impresa), la parte del Reporte del Alumno (resultados). Indicando el nmero de la Prctica y el nombre del alumno. 7.- Se sugiere que el Maestro evale los resultados obtenidos en la Prctica y registre una calificacin de la misma, tomndola en cuenta en el proceso de evaluacin que haya definido. 8.- Se sugiere que el Maestro indique a los alumnos cmo se debe editar un comando SQL y como ejecutarlo. Asimismo, como copiar y pegar los resultados en la parte de Reporte del Alumno (resultados), todo esto con la finalidad de que los alumnos entiendan el proceso de ejecucin y resultados que deben realizar en todas las prcticas de ste Manual

Reporte del alumno (resultados): En sta parte el alumno registrar los resultados de cada uno de los ejercicios de la Prctica, indicando a qu parte de la Prctica corresponde.

229

El alumno escribir en esta seccin los resultados del ejercicio en todas sus partes, especificados en la parte Metodologa, indicando el nmero de cada punto que se est reportando.

Bibliografa preliminar: REFERENCIA A MCSE Microsoft SQL-Server 2000 Database Design and Implementation Training Kit Microsoft Press

REFERENCIA B The Practical SQL Handbook Using SQL Variants Fourth Edtion Judith S. Bowman, Sandra L. Emerson, Marcy Darnovsky Addison Wesley

230

Nmero de Prctica: 23

Nombre de la Prctica: Introduccin a los disparadores Objetivo Especfico: El alumno conocer y comprender el funcionamiento de los disparadores (triggers) del SQL. Introduccin: Los disparadores (triggers) son una clase especial de procedimiento almacenado definido para ejecutarse automticamente en lugar de o despus de la modificacin de datos. Los tres comandos que lo disparan son : update, insert y delete. Se deben usar para extender la integridad de datos y para implementar lgica de negocios compleja. La implementacin de la integridad de datos es crtica para el mantenimiento de la exactitud y consistencia de la base de datos. Integridad de datos con disparadores.La integridad de datos declarativa y la procedural se usan para mantener la exactitud y consistencia de la base de datos. Los disparadores son una forma de integridad de datos procedural. Los disparadores habilitan al usuario a escribir un procedimiento que es invocado cuando los datos de una tabla se modifican con un insert, update o delete. Un disparador se puede aplicar tanto a una tabla como a una vista. Los disparadores se utilizan para implementar reglas de negocios en una base de datos. Integridad de datos procedural.-

231

Antes de implementar un disparador, hay que considerar si se pueden obtener los mismos resultados usando restricciones (constraints) o reglas. Usar en demasa los disparadores puede degradar el desempeo del sistema. Los disparadores son especialmente tiles porque pueden contener logica de procesamiento mas compleja que la que se obtendra usando mtodos de integridad declarativa. Se usan en las siguientes situaciones: 1.- Si usando mtodos de integridad de datos declarativos no reune las necesidades funcionales necesitadas por la aplicacin. 2.- Cuando haya que realizar cambios en cascada en tablas relacionadas en la base de datos. 3.- Si la base de datos no est normalizada y requiere una manera automtica para actualizar datos redundantes contenidos en varias tablas. 4.- Si un valor en una tabla debe validarse contra otro valor no idntico en otra tabla. 5.- Si mensajes al gusto del usuario y manipulacin de errores complejos se requieren. Caractersticas y limitaciones de un disparador.La integridad referencial en cascada extiende la exactitud y consistencia de los datos haciendo actualizaciones o eliminaciones a travs de llaves forneas dentro de la base de datos. Los disparadores extienden la integridad de datos a cualquier columna de tabla en la base de datos o aun a objetos fuera de la base de datos actual. Se pueden aplicar disparadores a vistas. Un disparador puede ejecutar mltiples acciones y puede ser disparado por mas de un evento. Los disparadores no pueden ser creados en tablas temporales o de sistema, aunque el lenguaje dentro del mismo puede referenciarlas.

232

Un disparador de tipo instead of delete o instead of update, no puede ser definido sobre tablas que tienen definida integridad referencial en cascada implementada con on delete o on update. Eventos del disparador.Hay 3 eventos que pueden iniciar a un disparador: insert, update y delete. Estos ocurren en una tabla o vista. Una caracterstica importante de los disparadores es que una transaccin no exitosa automticamente se revierte. Ejecucin de disparadores.Cuando una instruccin de insercin o actualizacin en una tabla inicia un disparador, ste almacena el dato nuevo o modificado en una tabla llamada inserted. Cuando una instruccin de elminacin inicia un disparador, ste almacena el dato eliminado en una tabla llamada deleted. Estas tablas existen en memoria y pueden ser consultadas. Esta capacidad es crtica para el funcionamiento de los disparadores debido a que la tarea que ejecuta, tal como modificar un valor en una tabla asociada, compara el dato contenido en las tablas inserted y deleted al dato en la tabla modificada antes de que los cambios sean cometidos. Utilizando el contenido de stas tablas, un disparador puede revertir la transaccin para reforzar las reglas de negocio. Hay dos clases de disparadores: instead of y after. El primero desva la accin de disparo y se ejecuta en su lugar. Los ltimos se inician como un suplemento a la accin de disparo y son la clase de disparadores de default. Un disparador puede ser aplicado a solamente una tabla o vista. Caractersticas del disparador instead of.1.- Se define en una tabla o vista 2.- Si se define un disparador sobre una vista, extiendo los tipos de actualizaciones que la vista puede soportar 3.- Se permite solo una accin por disparo sobre una tabla o vista

233

4.- Se pueden definir vistas de otras vistas donde cada vista tiene su propio disparador de esta clase. 5.- Se permite solo una accin por disparo sobre una tabla o vista, y el orden es irrelevante. Caractersticas del disparador alter.1.- Se define sobre una tabla 2.- Las modificaciones a vistas dispararn disparadores de sta clase cuando la tabla de datos se modifica en respuesta a la modificacin de la vista. 3.- Se permite ms de uno sobre una tabla 4.- Se puede definir cual disparador se inicia primero y ltimo. Utilice el procedimiento almacenado sp_settriggerorder para definir esto. Todos los otros disparadores aplicados a una tabla se ejecutan en orden aleatorio Se pueden aplicar ambas clases de disparadores a una tabla. Si se han definido disparadores de ambas clases y restricciones (constraints) para una tabla, primero se inicia el disparador instead of, despus se procesan las restricciones, y despus se inician los disparadores after. Si las restricciones son violadas, las acciones del disparador instead of se revierten (roll back). Disparadores after no se ejecutan si las restricciones son violadas o si algn otro evento causa que la modificacin a la tabla falle. Los disparadores pueden ser anidados hasta 32 niveles de profundidad y pueden ser iniciados recursivamente. Consulte la referencia A, captulo 9, leccin 1.

Correlacin con el /los subtemas del Programa de Estudio Vigente: Esta prctica va dirigida a tratar los subtemas relacionados con la UNIDAD 7: Introduccin al SQL Procedural

234

Los subtemas tratados son: Subtema 7. 2 Disparadores (triggers)

Material y Equipo Necesario: Para realizar la Prctica es necesario contar con el siguiente hardware y software: Computadora Personal Sistema Operativo XP Sistema Administrador de Bases de Datos: Microsoft SQL-Server 2000 CD que acompaa a este Manual

Metodologa: Ejercicio 1: referencial. Aplicacin en cascada de restricciones de integridad

1.- Inicie el Query Analyzer (Analizador de consultas) y conctese al sistema administrador de bases de datos. 2.- En el editor, escriba y ejecute el siguiente cdigo: USE ventas INSERT facturas (no_factura, fecha_fac, clave_cliente, monto, observaciones) VALUES (1011,'2008-01-04', 30, 336.00, 'Pago a credito') INSERT ren_facturas (no_factura,no_renglon,clave,cantidad,costo,precio) VALUES (1011,1,'MM200',8,28.00,42.00) El primer insert inserta un registro en la tabla facturas, y el segundo, inserta en la tabla ren_facturas. Observe que se respeta la integridad referencial, y deben hacerse en cascada utilizando la llave primaria-llave fornea no_factura.

235

3.- En el editor, escriba y ejecute el siguiente cdigo: update facturas set no_factura=1200 where no_factura=1001 Observe que cuando se ejecuta este script marca el error: Instruccin UPDATE en conflicto con la restriccin COLUMN REFERENCE 'FK__ren_factu__no_fa__7E6CC920'. El conflicto ha aparecido en la base de datos 'ventas', tabla 'ren_facturas', column 'no_factura'. Se termin la instruccin. Este error es debido a que entre la tabla facturas con llave primaria no_factura y la tabla ren_facturas con llave primaria compuesta: no_factura, no_renglon; hay la relacin llave primaria-llave fornea con el atributo no_factura en ambas tablas, por ello, hay una restriccin de integridad referencial, y, en la instruccin de actualizacin es violada y el sistema administrador de bases de datos no lo permite. 4.- En el editor del Query, escriba y ejecute el siguiente cdigo: alter table ren_facturas drop constraint FK__ren_factu__no_fa__7E6CC920 este estatuto elimina la restriccin de llave fornea indicada de la tabla ren_facturas. 5.- En el editor del Query, escriba y ejecute el siguiente cdigo: alter table ren_facturas add constraint FK__ren_factu__no_fa__7E6CC920 foreign key (no_factura) references facturas(no_factura) on update cascade on delete cascade Este script aade integridad referencial en cascada al constraint de llave fornea

236

llamado FK__ren_factu__no_fa__7E6CC920 en la tabla ren_facturas. Cuando una actualizacin sobre la llave primaria no_facturas en la tabla facturas ocurra, la correspondiente llave fornea ser cambiada en la tabla ren_facturas. Esta integridad la realizar cuando se actualice o se elimine en la tabla. 6.- En el editor, escriba y ejecute el siguiente cdigo: update facturas set no_factura=1200 where no_factura=1001 Observe que se ejecuta el script y en la tabla facturas se hace la actualizacion en el registro que antes tena como no_factura con valor 1001, ahora tiene 1200 y en cascada y a travs de la llave fornea (automticamente) se actualiza la tabla ren_facturas, y todos los renglones que tenian no_facturas con valor 1001 se actualizaron a 1200. Con esto se est protegiendo la integridad referencial. Verifique lo anterior ejecutando los estatutos: select * from facturas select * from ren_facturas 6.- En el editor, escriba y ejecute el siguiente cdigo: delete from facturas where no_factura=1200 Con este estatuto se borra el registro de la tabla facturas con no_factura igual a 1200 y en cascada se eliminan los registros con no_factura igual a 1200 de la tabla ren_facturas. Conservando con esto la integridad referencial. Verifique lo anterior ejecutando los estatutos: select * from facturas select * from ren_facturas

237

Sugerencias Didcticas: Se sugiere que el Maestro realice las acciones: 1.- Verificacin de la instalacin en cada Computadora del Sistema Administrador de Bases de Datos y la versin electrnica de ste Manual. 2.- Se sugiere que cada alumno cuente con su propia computadora personal con la finalidad de que realice todos los ejercicios personalmente. 3.- Se sugiere que el Maestro haga una induccin sobre el tema de la Prctica indicando los objetivos de aprendizaje que se obtendrn al realizarla. 4.- Se sugiere que los alumnos abran el Sistema Administrador de Bases de Datos, y, este Manual (de preferencia en forma electrnica); con la finalidad de que vayan realizando los ejercicios copiando y pegando los scripts SQL, ejecutndolos y copiando y pegando los resultados de cada uno en la parte de Reporte del Alumno. 5.- Se sugiere que el Maestro asesore a sus Alumnos durante el proceso de realizacin de la Prctica, logrando as una atencin personalizada. 6.- Se sugiere que el Maestro indique a los alumnos que para evaluar la Prctica enven a su correo electrnico (o le entreguen de manera impresa), la parte del Reporte del Alumno (resultados). Indicando el nmero de la Prctica y el nombre del alumno. 7.- Se sugiere que el Maestro evale los resultados obtenidos en la Prctica y registre una calificacin de la misma, tomndola en cuenta en el proceso de evaluacin que haya definido. 8.- Se sugiere que el Maestro indique a los alumnos cmo se debe editar un comando SQL y como ejecutarlo. Asimismo, como copiar y pegar los resultados en la parte de Reporte del Alumno (resultados), todo esto con la finalidad de que los alumnos entiendan el proceso de ejecucin y resultados que deben realizar

238

en todas las prcticas de ste Manual

Reporte del alumno (resultados): En sta parte el alumno registrar los resultados de cada uno de los ejercicios de la Prctica, indicando a qu parte corresponde. El alumno escribir en esta seccin los resultados del ejercicio en todas sus partes, especificados en la parte Metodologa, indicando el nmero de cada punto que se est reportando.

Bibliografa preliminar: REFERENCIA A MCSE Microsoft SQL-Server 2000 Database Design and Implementation Training Kit Microsoft Press REFERENCIA B The Practical SQL Handbook Using SQL Variants Fourth Edtion Judith S. Bowman, Sandra L. Emerson, Marcy Darnovsky Addison Wesley

239

Nmero de Prctica: 24

Nombre de la Prctica: Disparadores: creacin y administracin Objetivo Especfico: El alumno crear y administrar disparadores en una base de datos dada.

Introduccin: Los disparadores (triggers) son creados usando el Query Analyzer (Analizador de Consultas) o la opcin de administracin de disparadores del Enterprise Manager (Administrador Corporativo). Un disparador se crea usando el estatuto create trigger. En el proceso de creacin, el disparador se aplica a la tabla o vista. Despus de que un disparador se crea, se modifica usando el estatuto alter trigger. Los disparadores se pueden renombrar y visualizar usando procedimientos almacenados o con el Enterprise Manager. El estatuto drop trigger se usa para eliminar un disparador. El estatuto alter table se usa para habilitar o deshabilitar un disparador. Creacin de disparadores con sql.Se puede usar el estatuto create trigger para crear un disparador usando el Query Analyzer. Se deben especificar los parmetros indicados en el formato:
CREATE TABLE nombre_disparador ON nombre_tabla o nombre_vista FOR clase_disparador y tipo_disparador AS estatutos_sql

240

La clase del disparador es instead of o after. Adicionalmente, se puede indicar si el disparador deber ser replicado o encriptado. La clusula create trigger.Los disparadores no permiten especificar el nombre de la base de datos como prefijo del nombre del objeto. Por lo tanto, seleccione la base de datos con el estatuto use nombre_base y la palabra go antes de crear el disparador, go se especifica debido a que create trigger debe ser el primer estatuto en el lote de comandos. Los nombres de los disparadores siguen las mismas reglas que las de los identificadores. La clusula on.Los disparadores se asignan a una tabla o a una vista. Si es necesario aplicar el mismo disparador a otra tabla en la base de datos, debe crearse otro disparador con nombre diferente que contenga la misma lgica de negocios. Las clusulas for, after e instead of.El tipo de evento del disparador se especifica cuando el disparador se crea. Tipos de eventos vlidos incluyen insert, update y delete. Un disparador simple puede ser iniciado debido a uno, dos o tres de los eventos que ocurran. Si se desea que un disparador se inicie sobre todos los eventos, siga el for, after o instead of con insert, update y delete. La clusula as.La clusula as el lenguaje SQL siguindola, designa la tarea que el disparador realizar. Modificacin y renombramiento de disparadores.-

241

Para modificar el texto en un disparador, se puede eliminar y volver a crearlo. Alternativamente, se puede usar el estatuto alter trigger, el cual tiene como sintaxis la misma del create trigger. Para renombrar un disparador se usa el procedimiento almacenado sp_rename. Visualizacin, eliminacin y deshabilitacin de disparadores.Cuando se crea un disparador, el texto se almacena en la tabla de sistema syscomments, que se puede consultar de la siguiente manera:
select * from ventas..SysObjects where type = 'tr'

Observe que se hace la consulta sobre la base de datos ventas.


El procedimiento almacenado de sistema sp_helptrigger muestra las propiedades de un disparador. Ejemplo: sp_helptrigger @tabname = facturas

Este estatuto muestra las propiedades de todos los disparadores definidos para la tabla facturas. Se puede hacer una consulta para ver el contenido de un disparador. Ejemplo:
sp_helptext @objname = nombre_disparador

Este estatuto muestra nombre_disparador.

el

texto

contenido

en

un

disparador

llamado

Para eliminar un o varios disparadores se usa el estatuto drop trigger. Ejemplo:


USE ventas DROP TRIGGER [dbo].[nombre_disparador]

242

Con esto se elimina el disparador nombre_disparador de la base de datos ventas. Para deshabilitar un disparador sobre una tabla se usa el estatuto alter table. Ejemplo:
ALTER TABLE facturas DISABLE TRIGGER nombre_disparador

Con esto se deshabilita el disparador nombre_disparador de la tabla facturas. Para habilitarlo se cambia la palabra disable por enable.

Consulte la referencia A, captulo 9, leccin 2.

Correlacin con el /los subtemas del Programa de Estudio Vigente: Esta prctica va dirigida a tratar los subtemas relacionados con la UNIDAD 7: Introduccin al SQL Procedural Los subtemas tratados son: Subtema 7. 2 Disparadores (triggers)

Material y Equipo Necesario: Para realizar la Prctica es necesario contar con el siguiente hardware y software: Computadora Personal Sistema Operativo XP Sistema Administrador de Bases de Datos: Microsoft SQL-Server 2000 CD que acompaa a este Manual

243

Metodologa: Ejercicio 1: Creacin y administracin de disparadores

En este ejercicio se crear y probar un disparador que despliega un mensaje indicando que el disparador ha sido iniciado. Despus se renombrar al disparador, se modificar su contenido, se visualizar su contenido, se deshabilitar, y finalmente, se eliminar de la base de datos. Creacin de un disparador.1.- Inicie el Query Analyzer (Analizador de consultas) y conctese al sistema administrador de bases de datos. 2.- En el editor, escriba y ejecute el siguiente cdigo:
USE ventas GO CREATE TRIGGER dbo.despliega_indicador ON dbo.clientes AFTER INSERT AS PRINT 'El disparador: despliega_indicador se inicio.'

Este script crea un disparador sobre la tabla clientes de la base de datos ventas. Cuando se inserte un registro en dicha tabla, el disparador se inicia e imprime un mensaje. 2.- Edite el siguiente cdigo
insert into clientes values(130,'Distribuidora, S.A. de C.V.','Av. Juarez

150','Centro','Leon','Gto.',37200)

244

Ejectelo y observe que despus de que se inserta la tupla se despliega la informacin: El disparador: despliega_indicador se inicio. Que es la que se program cuando se cre el disparador. 3.- Edite el siguiente cdigo: CREATE TRIGGER dbo.despliega_act ON dbo.clientes AFTER UPDATE AS PRINT 'El disparador de actualizacion se inicio.' GO CREATE TRIGGER dbo.despliega_elim ON dbo.clientes AFTER DELETE AS IF @@ROWCOUNT <> 0 PRINT 'El disparador de eliminacion se inicio.' Estos estatutos create trigger crean 2 disparadores nombrados despliega_act y despliega_elim. Estos se aplican a la tabla clientes de la base de datos ventas. Cuando una actualizacin o una eliminacin ocurre, estos disparadores imprimen el mensaje correspondiente en el panel de resultados. Prueba de los disparadores.1.- En el editor escriba y ejecute el cdigo: update clientes set nombre='Otra distribuidora' where clave_cliente=130 Este estatuto actualiza el registro de clave_cliente 130 y cambia el nombre por

245

otra cadena. Despus de hacerlo, en el panel de resultados se despliega el mensaje enviado por el disparador de actualizacin: 2.- En el editor escriba y ejecute el cdigo: delete from clientes where clave_cliente=130 Este estatuto eliminna el registro de clave_cliente 130. Despus de hacerlo, en el panel de resultados se despliega el mensaje enviado por el disparador de eliminacin: El disparador de eliminacion se inicio. Renombrar, modificar y visualizar un disparador.1.- En el editor, escriba el cdigo: sp_rename @objname=despliega_indicador, @newname=indicador_desp Este procedimiento almacenado renombra el disparador despliega_indicador a indicador_desp. 2.- Ejecute el estatuto En el rea de resultados, enva un aviso de que renombrando un objeto pudiera causar que los scripts y procedimientos almacenados fallen. El mensaje tambien avisa que la operacin de renombrado fu exitosa. Aparece lo siguiente:

Advertencia: al cambiar cualquier parte del nombre de un objeto pueden dejar de ser vlidas secuencias de comandos y procedimientos almacenados. El object ha cambiado su nombre por 'indicador_desp'. 3.- En el editor, escriba y ejecute el cdigo:

246

sp_helptrigger @tabname=clientes Este procedimiento almacenado de sistema despliega una lista de disparadores aplicados a la tabla clientes. 4.- En el editor, escriba y ejecute el cdigo:
ALTER TRIGGER dbo.indicador_desp ON dbo.clientes INSTEAD OF INSERT, UPDATE AS PRINT 'Inserciones y actualizaciones no se permiten en esta ocasion.'

La modificacin de ste disparador lo convierte en un disparador de tipo instead of que previene que cualquier insercin y actualizacin sobre la tabla clientes no se ejecute. 5.- Escriba y ejecute el cdigo: insert into clientes values(140,'Distribuidora, 150','Centro','Leon','Gto.',37200) S.A. de C.V.','Av. Juarez

Este estatuto de insercin trata de insertar una tupla con clave_cliente 140 en la tabla clientes, pero se inicia el disparador indicador_desp que lo impide en lugar de la insercin o actualizacin, envia los dos letreros: Inserciones y actualizaciones no se permiten en esta ocasion. (1 filas afectadas)

Verifique que en la tabla clientes no est insertado el rengln. 6.- En el editor escriba el cdigo:

247

SET NOCOUNT ON insert into clientes values(150,'Distribuidora, S.A. de C.V.','Av. Juarez 150','Centro','Leon','Gto.',37200) SET NOCOUNT OFF El disparador inicia y despliega un mensaje estableciendo que las actualizaciones e inserciones no se permiten en este momento, la clusula nocount habilita que no aparezca el mensaje de renglones afectados. Una vez que se ejecuta el script anterior solamente se despliega: Inserciones y actualizaciones no se permiten en esta ocasion. 7.- En el editor, escriba y ejecute el cdigo: sp_helptext @objname=indicador_desp El procedimento almacenado despliega el contenido del disparador indicado

Deshabilitar y eliminar un disparador.1.- En el editor escriba y ejecute el cdigo siguiente: ALTER TABLE clientes DISABLE TRIGGER indicador_desp Este estatuto deshabilita el disparador indicador_desp sobre la tabla clientes. 2.- En el editor escriba y ejecute el cdigo: insert into clientes values(150,'Distribuidora, 150','Centro','Leon','Gto.',37200) S.A. de C.V.','Av. Juarez

Observe que ahora si se pudo insertar el rengln, verifquelo en la tabla clientes. 3.- En el editor escriba y ejecute el cdigo:

248

DROP TRIGGER indicador_desp, despliega_act, despliega_elim Este estatuto elimina los 3 disparadores indicados sobre la tabla clientes.

Sugerencias Didcticas: Se sugiere que el Maestro realice las acciones: 1.- Verificacin de la instalacin en cada Computadora del Sistema Administrador de Bases de Datos y la versin electrnica de ste Manual. 2.- Se sugiere que cada alumno cuente con su propia computadora personal con la finalidad de que realice todos los ejercicios personalmente. 3.- Se sugiere que el Maestro haga una induccin sobre el tema de la Prctica indicando los objetivos de aprendizaje que se obtendrn al realizarla. 4.- Se sugiere que los alumnos abran el Sistema Administrador de Bases de Datos, y, este Manual (de preferencia en forma electrnica); con la finalidad de que vayan realizando los ejercicios copiando y pegando los scripts SQL, ejecutndolos y copiando y pegando los resultados de cada uno en la parte de Reporte del Alumno. 5.- Se sugiere que el Maestro asesore a sus Alumnos durante el proceso de realizacin de la Prctica, logrando as una atencin personalizada. 6.- Se sugiere que el Maestro indique a los alumnos que para evaluar la Prctica enven a su correo electrnico (o le entreguen de manera impresa), la parte del Reporte del Alumno (resultados). Indicando el nmero de la Prctica y el nombre del alumno.

249

7.- Se sugiere que el Maestro evale los resultados obtenidos en la Prctica y registre una calificacin de la misma, tomndola en cuenta en el proceso de evaluacin que haya definido. 8.- Se sugiere que el Maestro indique a los alumnos cmo se debe editar un comando SQL y como ejecutarlo. Asimismo, como copiar y pegar los resultados en la parte de Reporte del Alumno (resultados), todo esto con la finalidad de que los alumnos entiendan el proceso de ejecucin y resultados que deben realizar en todas las prcticas de ste Manual Reporte del alumno (resultados): En sta parte el alumno registrar los resultados de cada uno de los ejercicios de la Prctica, indicando a qu parte corresponde. El alumno escribir en esta seccin los resultados del ejercicio en todas sus partes, especificados en la parte Metodologa, indicando el nmero de cada punto que se est reportando.

Bibliografa preliminar: REFERENCIA A MCSE Microsoft SQL-Server 2000 Database Design and Implementation Training Kit Microsoft Press REFERENCIA B The Practical SQL Handbook Using SQL Variants Fourth Edtion Judith S. Bowman, Sandra L. Emerson, Marcy Darnovsky

250

Addison Wesley

251

Nmero de Prctica: 25

Nombre de la Prctica: Programacin de disparadores

Objetivo Especfico: El alumno aplicar los estatutos SQL necesarios para programar disparadores en una base de datos dada. Introduccin: Las seudo-tablas inserted y deleted.Cuando un disparador insert, update o delete se inicia, el evento crea una o mas seudo-tablas (tablas lgicas). Estas puede conceptualizarse como archivos de transaccin del evento. Hay dos tipos de seudo-tablas: la tabla inserted y la tabla deleted. Un estatuto insert o uno update crean la tabla lgica inserted, que contiene el conjunto de registros que han sido insertados o cambiados. Un disparador update tambien crea una tabla lgica deleted, esta contiene el conjunto de registros originales como aparecan antes de la actualizacin. El siguiente ejemplo crea un disparador que despliega el contenido de las tablas inserted y deleted, siguiendo a un evento de actualizacin en la tabla clientes. CREATE TRIGGER dbo.actualizacion ON dbo.clientes AFTER UPDATE AS SELECT "Descripcion" = 'La tabla Inserted:' SELECT * FROM inserted SELECT "Descripcion" = 'La tabla Deleted:'

252

SELECT * FROM deleted Si se hace una actualizacin sobre la tabla clientes como la siguiente: update clientes set nombre='Distribuidora NUEVA,S.A. DE C.V.' where clave_cliente=10 Observe que una vez que se ejecuta este estatuto, aparecen los contenidos de las tablas inserted y deleted. Cuando un disparador delete se inicia, la tabla lgica deleted contiene el conjunto de registros eliminados. La tabla inserted no es parte del evento delete. Hay dos clusulas importantes que son parte de los estatutos create trigger y alter trigger son: update(nombre_columna) y (columns_updated()). Estas pueden ser parte de un disparador insert o update y pueden aparecer en cualquier parte en los estatutos create trigger y alter trigger. Funciones y comandos de sistema.Muchas funciones y comandos de sistema se usan en disparadores para implementar lgica de negocios. Una funcin muy usada es la @@rowcount, que regresa el nmero de renglones afectados por el estatuto sql previo en el disparador. Si ningn rengln se afect por un evento insert, update o delete, aun as el disparador se inicia. Por esto, use el comando return para salir del disparador transparentemente cuando ninguna modificacin en la tabla se haya hecho. Cuando sucede un error, se desear desplegar un mensaje describindolo, para eso se utiliza el comando raiserror. Se pueden crear mensajes de error usando el procedimiento almacenado sp_addmessage, o se pueden desplegar cuando se llama el comando raiserror. El estatuto rollback transaction puede aparecer en el cdigo de un disparador. Este comando explcitamente revierte las operaciones del disparador. Un error

253

fatal causa un rollback implcito. No es necesario especificar rollback transaction en el cdigo del disparador si el objetivo es completar la transaccin en todos los casos excepto si ocurren errores fatales durante la transaccin. Los siguientes estatutos del sql no se permiten en un disparador: Alter, create, drop, restore, load database, load, restore log, disk resize, disk init y reconfigure. Consulte la referencia A, captulo 9, leccin 3.

Correlacin con el /los subtemas del Programa de Estudio Vigente: Esta prctica va dirigida a tratar los subtemas relacionados con la UNIDAD 7: Introduccin al SQL Procedural Los subtemas tratados son: Subtema 7. 2 Disparadores (triggers)

Material y Equipo Necesario: Para realizar la Prctica es necesario contar con el siguiente hardware y software: Computadora Personal Sistema Operativo XP Sistema Administrador de Bases de Datos: Microsoft SQL-Server 2000 CD que acompaa a este Manual

Metodologa:

254

Ejercicio 1: Creacin de un disparador para actualizar un valor columna En este ejercicio, se crear y probar un disparador que actualiza el valor de las existencias de un producto de la tabla productos, cuando hay una venta del mismo, disminuyendo la existencia de manera correspondiente. Mas explcitamente, se insertar el rengln 3 en la factura 1003, simulando la venta de una unidad del producto CL120. Esta insercin iniciar un disparador que actualizar la existencia en la tabla productos disminuyendo en una unidad la existencia de dicho producto (columna unidades). 1.- Inicie el Query Analyzer (Analizador de consultas) y conctese al sistema administrador de bases de datos. 2.- En el editor, escriba y ejecute el siguiente cdigo: CREATE TRIGGER dbo.actualiza_inventario ON dbo.ren_facturas AFTER INSERT AS UPDATE productos SET unidades = unidades-1 WHERE clave in (SELECT bo.clave FROM ren_facturas bo INNER JOIN inserted i ON bo.no_factura = i.no_factura and bo.no_renglon=i.no_renglon ) Este estatuto crea el disparador actualiza_inventario, y cuando se hace una insercin en la tabla ren_facturas, actualiza la tabla productos, disminuyendo en la columna unidades, los productos que se vendieron. 3.- En el editor escriba el siguiente cdigo insert into ren_facturas values(1003,3,'CM500',1,38.00,60.00)

255

4.- Verifique que en la tabla ren_facturas no exista la tupla con no_factura=1003 y no_renglon=3. 5.- Ejecute el estatuto de insercin 6.- Escriba y ejecute el estatuto select * from ren_facturas where no_factura=1003 and no_renglon=3 Confirme que est la tupla insertada, observe que las unidades vendidas es de 1. 7.- Al ejecutarse la insercin, inici la ejecucin del disparador actualiza_inventario que realiza la actualizacin de la tabla productos en el producto CM500, disminuyendo la existencia (columna unidades) en una unidad.

Sugerencias Didcticas: Se sugiere que el Maestro realice las acciones: 1.- Verificacin de la instalacin en cada Computadora del Sistema Administrador de Bases de Datos y la versin electrnica de ste Manual. 2.- Se sugiere que cada alumno cuente con su propia computadora personal con la finalidad de que realice todos los ejercicios personalmente. 3.- Se sugiere que el Maestro haga una induccin sobre el tema de la Prctica indicando los objetivos de aprendizaje que se obtendrn al realizarla. 4.- Se sugiere que los alumnos abran el Sistema Administrador de Bases de Datos, y, este Manual (de preferencia en forma electrnica); con la finalidad de que vayan realizando los ejercicios copiando y pegando los scripts SQL,

256

ejecutndolos y copiando y pegando los resultados de cada uno en la parte de Reporte del Alumno. 5.- Se sugiere que el Maestro asesore a sus Alumnos durante el proceso de realizacin de la Prctica, logrando as una atencin personalizada. 6.- Se sugiere que el Maestro indique a los alumnos que para evaluar la Prctica enven a su correo electrnico (o le entreguen de manera impresa), la parte del Reporte del Alumno (resultados). Indicando el nmero de la Prctica y el nombre del alumno. 7.- Se sugiere que el Maestro evale los resultados obtenidos en la Prctica y registre una calificacin de la misma, tomndola en cuenta en el proceso de evaluacin que haya definido. 8.- Se sugiere que el Maestro indique a los alumnos cmo se debe editar un comando SQL y como ejecutarlo. Asimismo, como copiar y pegar los resultados en la parte de Reporte del Alumno (resultados), todo esto con la finalidad de que los alumnos entiendan el proceso de ejecucin y resultados que deben realizar en todas las prcticas de ste Manual Reporte del alumno (resultados): En sta parte el alumno registrar los resultados de cada uno de los ejercicios de la Prctica, indicando a qu parte corresponde. El alumno escribir en esta seccin los resultados del ejercicio en todas sus partes, especificados en la parte Metodologa, indicando el nmero de cada punto que se est reportando.

Bibliografa preliminar: REFERENCIA A

257

MCSE Microsoft SQL-Server 2000 Database Design and Implementation Training Kit Microsoft Press REFERENCIA B The Practical SQL Handbook Using SQL Variants Fourth Edtion Judith S. Bowman, Sandra L. Emerson, Marcy Darnovsky Addison Wesley

258

Vous aimerez peut-être aussi