You are on page 1of 252

UNIVERSIDAD TECNOLGICA DE LA HUASTECA HIDALGUENSE

TECNOLOGAS DE LA INFORMACIN Y COMUNICACIN

Manual de la asignatura del profesor: BASE DE DATOS II

Elaborado por: ISC LEODEGARIO REDONDO MARTNEZ

Revisado por Director de Carrera M en C FELIPE DE JESS NEZ CARDENAS

AGOSTO 2005

NDICE
FIRMAS DE AUTORIZACIN ...................................................................................................... 3 INTRODUCCIN........................................................................................................................... 4 UNIDAD TEMATICA 1. LENGUAJE DE CONSULTA ESTRUCTURADO ....................... 5 1.1. LA VENTAJA DEL SQL ......................................................................................................... 5 1.2. CONSULTA DE UNA SOLA TABLA .................................................................................... 9 1.3. CONSULTA DE TABLAS MULTIPLES .............................................................................. 25 1.4. CONSULTAS ANIDADAS O CONSULTAS AVANZADAS O SUBCONSULTAS .......... 55 1.5. PROCEDIMIENTOS ALMACENADOS ............................................................................... 61 1.6. TRIGGERS ............................................................................................................................. 71 1.7. VISTAS ................................................................................................................................... 85 UNIDAD TEMATICA 2. INTEGRIDAD DE DATOS y MANEJO DE INDICES ............... 88 2.1. TIPOS DE INTEGRIDAD DE DATOS ................................................................................. 90 2.2. USANDO RESTRICCIONES (CONSTRAINTS)................................................................ 101 2.3. USANDO VALORES POR OMISIN Y REGLAS ............................................................ 102 2.4. INTRODUCCIN A INDICES ............................................................................................ 107 2.5. ARQUITECTURA y CREACIN DE INDICES ................................................................. 111 UNIDAD TEMATICA 3. TRANSACCIONES EN LA BASE DE DATOS ....................... 115 3.1. PROCESAMIENTO DE TRANSACCIONES ..................................................................... 116 3.2. CONCEPTOS DE TRANSACCIONES ............................................................................... 118 3.3. PROPIEDADES DE LAS TRANSACCIONES ................................................................... 118 3.4. PLANES Y RECUPERABILIDAD ...................................................................................... 121 3.5. SERIABILIDAD DE PLANES ............................................................................................. 122 3.6. TRANSACCIONES SQL ..................................................................................................... 125 UNIDAD TEMATICA 4. SEGURIDAD ........................................................................... 136 4.1. SEGURIDAD y AUTORIZACIN EN BASES DE DATOS .............................................. 136 4.2. TIPOS DE SEGURIDAD ..................................................................................................... 145 4.3. CONTROL DE ACCESO DISCRECIONAL BASADO EN CONCESIN / RENOVACION DE PRIVILEGIOS. ............................................................................................................................. 154 4.4. SEGUIMIENTO DE AUDITORIA ...................................................................................... 159 UNIDAD TEMATICA 5. BASES DE DATOS DISTRIBUIDAS ...................................... 165 5.1. SISTEMAS DE BASES DE DATOS EN LAS ORGANIZACIONES ................................. 165 5.2. MODELO GENERAL DE UN SGBD .................................................................................. 171 5.3. PROCESAMIENTO DE CONSULTAS, CONCURRENCIA y RECUPERACIN EN BASES DE DATOS DISTRIBUIDAS. ............................................................................................... 177 UNIDAD TEMATICA 6. TECNOLOGAS DE ACCESO A DATOS .............................. 203 6.1. ARQUITECTURAS MULTICAPA y XML ......................................................................... 203 6.2. TECNOLOGAS DE ACCESO A DATOS: ODBC, OLEDB, ADO y ASP. ....................... 218 6.3. JDBC, PAGINAS DEL SERVIDOR JAVA. ........................................................................ 243 UNIDAD TEMATICA 7. PROYECTO FINAL ................................................................. 246

FIRMAS DE AUTORIZACIN

Elabor

Revis

ISC LEODEGARIO REDONDO MARTNEZ

M en C FELIPE DE JESS NEZ CARDENAS Directora de la Carrera Autoriz

Vo. Bo.

MAD. Marisol Flores Contreras Directora de Enlace Acadmico

Dra. Miriam Yta Rectora

INTRODUCCIN Elevar la calidad acadmica de esta universidad se ha convertido en el objetivo a corto plazo, es de reconocer el esfuerzo aqu vertido para proporcionar a los estudiantes una formacin de calidad, sin embargo, la participacin global de una institucin educativa obliga a una actualizacin permanente Dentro de este marco los materiales didcticos se convierten en instrumentos indispensable para ayudar a elevar la calidad educativa en las instituciones. Esta gua pretende proporcionar una visin de conjunto de la asignatura, as como sealar los conceptos fundamentales tratados en cada uno de los temas del programa. El objetivo principal que se persigue es el de ayudar al alumno a estructurar y organizar la informacin recogida en el manual para facilitar as la compresin de sus contenidos. Por tanto, el equipo docente recomienda a todos los alumnos de la carrera de Administracin y Evaluacin de Proyectos en que lean detenidamente la primera parte de esta Gua para tener una orientacin general de la asignatura y que la consulten cuando estudien cada uno de los temas tratados en el texto, ya que en ella se proporcionarn las orientaciones didcticas precisas para su estudio. Creemos que esta Gua puede facilitar al alumno de la Universidad Tecnolgica de la Huasteca Hidalguense un material didctico adicional que contribuya al aprendizaje de los contenidos de la asignatura. Se indican igualmente en esta Gua, otra serie de medios con los que cuenta el alumno para el estudio. Todos ellos obedecen a un inters fundamental, reducir la distancia alumno-profesor. El presente manual representa ser un instrumento de apoyo para que el

profesor lleve acabo una planeacin por sesin y una revisin minuciosa de los contenidos para cumplir con el saber y saber hacer de una manera evidenciable, el curso se divide en 6 Unidades temticas, las cuales incluyen las actividades de aprendizaje y los criterios de evaluacin de cada actividad, el manual cuenta adems con 2 anexos, a) Resumen de actividades de aprendizaje, b) Resumen de sesiones.

UNIDAD TEMATICA 1. LENGUAJE DE CONSULTA ESTRUCTURADO

El lenguaje SQL es usado para comunicarse con una base de datos segn el ANSI (American National Standards Institute). Es el lenguaje clsico para sistemas manejadores de bases de datos relacinales. Las declaraciones SQL son usadas para ejecutar tareas tales como: actualizar datos en una base de datos o recuperarlos, algunos sistemas manejadores de bases de datos relacionales que usan SQL son: Oracle, Sybase, Microsoft SQL Server, Access, Ingres, etc. Aunque ms sistemas usan SQL tienen sus propias extensiones adicionales que usualmente son usadas slo en sus propios sistemas. Las instrucciones normales tales como: seleccionar. Insertar, actualizar, suprimir, crear, y borrar pueden ser usadas para realizar casi todo lo que necesite hacer con una base de datos. 1.1. LA VENTAJA DEL SQL 1.1.1. OBJETIVO DE APRENDIZAJE Conocer los operadores del lenguaje SQL, para adquirir la habilidad de realizar consultas simples y complejas a una base de datos, asi como conocer las bases de SQL. 1.1.2. RECURSO TIEMPO DEL TEMA 1 hora 1.1.3. DESARROLLO Las aplicaciones en red son cada da ms numerosas y verstiles. En muchos casos, el esquema bsico de operacin es una serie de scripts que rigen el comportamiento de una base de datos.

Debido a la diversidad de lenguajes y de bases de datos existentes, la manera de comunicar entre unos y otras sera realmente complicada a gestionar de no ser por la existencia de estndares que nos permiten el realizar las operaciones bsicas de una forma universal.

Es de eso de lo que trata el Structured Query Language que no es mas que un lenguaje estndar de comunicacin con bases de datos. Hablamos por tanto de

un lenguaje normalizado que nos permite trabajar con cualquier tipo de lenguaje (ASP o PHP) en combinacin con cualquier tipo de base de datos (MS Access, SQL Server, MySQL...).

El hecho de que sea estndar no quiere decir que sea idntico para cada base de datos. En efecto, determinadas bases de datos implementan funciones especficas que no tienen necesariamente que funcionar en otras.

Aparte de esta universalidad, el SQL posee otras dos caractersticas muy apreciadas. Por una parte, presenta una potencia y versatilidad notables que contrasta, por otra, con su accesibilidad de aprendizaje.

LENGUAJE DE CONSULTA ESTRUCTURADO SQL

El lenguaje de consulta estructurado (SQL) es un lenguaje de base de datos normalizado, utilizado por los diferentes motores de bases de datos para realizar determinadas operaciones sobre los datos o sobre la estructura de los mismos. Pero como sucede con cualquier sistema de normalizacin hay excepciones para casi todo; de hecho, cada motor de bases de datos tiene sus peculiaridades y lo hace diferente de otro motor, por lo tanto, el lenguaje SQL normalizado (ANSI) no nos servir para resolver todos los problemas, aunque si se puede asegurar que cualquier sentencia escrita en ANSI ser interpretable por cualquier motor de datos.

TRANSACT-SQL

Transact-SQL (T-SQL) es el lenguaje de programacin del SQL Sever, a travs de el podemos realizar muchas operaciones relacionadas con el SQL sin tener que volver a pasar por cdigo VB, esto simplificar vuestro cdigo y ganar en rapidez dado que el T-SQL se ejecuta dentro del SQL Server y es cdigo compilado, se compila la primera vez que se ejecuta el Stored PROCEDURE.

EL T-SQL se puede utilizar desde multitud de aplicaciones y desde diferentes lenguajes de programacin :

Desde Visual Basic Desde Visual C++ Desde Active Server Pages (ASP) ...

No se utiliza dentro de estos lenguajes sino en desde los llamados Stored Procedures (SP) Sistema administrador para bases de datos relacionales (RDBMS)

El RDBMS es responsable de: Mantener las relaciones entre la informacin y la Base de Datos. Asegurarse de que la informacin es almacenada correctamente, es decir, que las reglas que definen las relaciones ente los datos no sean violadas. Recuperar toda la informacin en un punto conocido en caso de que el sistema falle.

PLATAFORMAS PARA SQL

Los componentes Cliente y Servidor de SQL Server corren en los Sistemas Operativos mostrados en la siguiente tabla:

PLATAFORMA

COMPONENTE SERVER

COMPONENTE CLIENTE

Microsoft W in 95/98 Microsoft W indows NT Workstation 4.0 y posteriores Microsoft W indows NT Server 4.0 y posteriores Microsoft W indows NT Server Enterprise Edition 4.0 y posteriores Windows 3.X MS-DOS Third party

Si Si Si Si

Si Si Si Si

No No No

Internet browsers

No

Si Si Si (Unix, apple Macintosh) Si

1.1.3.1. 1.1.3.2.

TCNICA DIDCTICA Exposicin del profesor. MATERIAL DE APOYO

1.1.4. ACTIVIDADES DE APRENDIZAJE 1.1.4.1. ACTIVIDAD DE APRENDIZAJE 1 A1-T1 Cuestionario. 1.1.4.1.1. INSTRUCCIONES Realizar un cuestionario de 5 preguntas del tema visto. a) b) c) d) e) f) Valor actividad: 5 Puntos Producto esperado: Contestar preguntas de manera escrita Fecha inicio: Fecha entrega: Forma de entrega: Documento Tipo de Actividad: Individual 1.1.4.1.2. CRITERIO DE EVALUACIN DE LA ACTIVIDAD 1
ACTIVIDAD Cuestionario del tema DESARROLLO Formular preguntas y responderlas, estas se deben de transmitir hacia sus compaeros Total PONDERACIN 5 puntos 5 Puntos

1.1.5. RESULTADO DE APRENDIZAJE Que el alumno sepa de las ventajas que tiene el utilizar SQL en este caso TRANSACT-SQL de SQL Server 2000. 1.1.6. BIBLIOGRAFA Ayuda SQL Server 2000 1.1.7. DOCUMENTOS

Manual SQL Server 2000 Standard final 1.2. CONSULTA DE UNA SOLA TABLA

1.2.1. OBJETIVO DE APRENDIZAJE Crear la habilidad en los alumnos de poder aprovechar las ventajas de SQL, haciendo consultas sencillas a una sola tabla. 1.2.2. RECURSO TIEMPO DEL TEMA 2 horas 1.2.3. DESARROLLO

TIPOS DE CAMPO Como sabemos una base de datos esta compuesta de tablas donde almacenamos registros catalogados en funcin de distintos campos

(caractersticas).

Un aspecto previo a considerar es la naturaleza de los valores que introducimos en esos campos. Dado que una base de datos trabaja con todo tipo de informaciones, es importante especificarle qu tipo de valor le estamos introduciendo de manera a, por un lado, facilitar la bsqueda posteriormente y por otro, optimizar los recursos de memoria.

Cada base de datos introduce tipos de valores de campo que no necesariamente estn presentes en otras. Sin embargo, existe un conjunto de tipos que estn representados en la totalidad de estas bases. Estos tipos comunes son los siguientes: Alfanumricos Numricos Booleanos Contienen cifras y letras. Presentan una longitud limitada (255 caracteres) Existen de varios tipos, principalmente, enteros (sin decimales) y reales (con decimales). Poseen dos formas: Verdadero y falso (S o No) Almacenan fechas facilitando posteriormente su Fechas explotacin. Almacenar fechas de esta forma posibilita ordenar los registros por fechas o calcular los das entre

una fecha y otra... Son campos alfanumricos de longitud ilimitada. Memos Presentan el inconveniente de no poder ser indexados (veremos ms adelante lo que esto quiere decir). Son campos numricos enteros que incrementan en una Autoincrementables unidad su valor para cada registro incorporado. Su utilidad resulta ms que evidente: Servir de identificador ya que resultan exclusivos de un registro. COMPONENTES DE SQL El lenguaje SQL est compuesto por comandos, clusulas, operadores y funciones de agregado. Estos elementos se combinan en las instrucciones para crear, actualizar y manipular las bases de datos. Existen dos tipos de comandos SQL: los DLL que permiten crear y definir nuevas bases de datos, campos e ndices. los DML que permiten generar consultas para ordenar, filtrar y extraer datos de la base de datos. COMANDOS DDL

Comando CREATE DROP ALTER

Descripcin Utilizado para crear nuevas tablas, campos e ndices Empleado para eliminar tablas e ndices Utilizado para modificar las tablas agregando campos o cambiando la definicin de los campos. COMANDOS DML

Comando SELECT

Descripcin Utilizado para consultar registros de la base de datos que satisfagan un criterio determinado

INSERT

Utilizado para cargar lotes de datos en la base de datos en una nica operacin. Utilizado para modificar los valores de los campos y registros especificados Utilizado para eliminar registros de una tabla de una base de datos

UPDATE

DELETE

CLAUSULAS Las clusulas son condiciones de modificacin utilizadas para definir los datos que desea seleccionar o manipular.

Clusula FROM

Descripcin Utilizada para especificar la tabla de la cual se van a seleccionar los registros Utilizada para especificar las condiciones que deben reunir los registros que se van a seleccionar Utilizada para separar los registros seleccionados en grupos especficos Utilizada para expresar la condicin que debe satisfacer cada grupo Utilizada para ordenar los registros seleccionados de acuerdo con un orden especfico OPERADORES LGICOS

WHERE

GROUP BY

HAVING

ORDER BY

Operador AND

Uso Es el "y" lgico. Evalua dos condiciones y devuelve un valor de verdad slo si ambas son ciertas. Es el "o" lgico. Evala dos condiciones y devuelve un valor de verdar si alguna de las dos es cierta. Negacin lgica. Devuelve el valor contrario de la expresin.

OR NOT

OPERADORES DE COMPARACIN Operador < > <> <= >= = Menor que Mayor que Distinto de Menor Igual que Mayor Igual que Igual que Uso

BETWEEN Utilizado para especificar un intervalo de valores. LIKE IN Utilizado en la comparacin de un modelo Utilizado para especificar registros de una base de datos

FUNCIONES DE AGREGADO Las funciones de agregado se usan dentro de una clusula SELECT en grupos de registros para devolver un nico.

Valor que se aplica a un grupo de registros. Funcin AVG COUNT SUM Descripcin Utilizada para calcular el promedio de los valores de un campo determinado Utilizada para devolver el nmero de registros de la seleccin Utilizada para devolver la suma de todos los valores de un campo determinado Utilizada para devolver el valor ms alto de un campo especificado Utilizada para devolver el valor ms bajo de un campo especificado

MAX

MIN

ORDEN DE EJECUCIN DE LOS COMANDOS

Dada una sentencia SQL de seleccin que incluye todas las posibles clusulas, el orden de ejecucin de las mismas es el siguiente: 1. 2. 3. 4. 5. 6. Clusula FROM Clusula WHERE Clusula GROUP BY Clusula HAVING Clusula SELECT Clusula ORDER BY CONSULTAS DE SELECCIN Bases de datos-SQL-Sentencias SQL-Consultas de Seleccin Las consultas de seleccin se utilizan para indicar al motor de datos que devuelva informacin de las bases de datos, esta informacin es devuelta en forma de conjunto de registros que se pueden almacenar en un objeto recordset. Este conjunto de registros puede ser modificable.

Consultas bsicas

La sintaxis bsica de una consulta de seleccin es la siguiente:

SELECT Campos FROM Tabla

En donde campos es la lista de campos que se deseen recuperar y tabla es el origen de los mismos, por ejemplo:

SELECT Nombre, Telfono FROM Clientes

Esta sentencia devuelve un conjunto de resultados con el campo nombre y telfono de la tabla clientes.

DEVOLVER LITERALES

En determinadas ocasiones nos puede interesar incluir una columna con un texto fijo en una consulta de seleccin, por ejemplo, supongamos que tenemos una tabla de empleados y deseamos recuperar las tarifas semanales de los electricistas, podramos realizar la siguiente consulta:

SELECT Empleados.Nombre, 'Tarifa semanal: ', Empleados.TarifaHora * 40 FROM Empleados WHERE Empleados.Cargo = 'Electricista'

ORDENAR LOS REGISTROS

Adicionalmente se puede especificar el orden en que se desean recuperar los registros de las tablas mediante la clusula ORDER y Lista de Campos. En donde Lista de campos representa los campos a ordenar. Ejemplo:

SELECT CodigoPostal, Nombre, Telefono FROM Clientes ORDER y Nombre

Esta consulta devuelve los campos CodigoPostal, Nombre, Telefono de la tabla Clientes ordenados por el campo Nombre.

Se pueden ordenar los registros por mas de un campo, como por ejemplo:

SELECT CodigoPostal, Nombre, Telefono FROM Clientes ORDER y CodigoPostal, Nombre

Incluso se puede especificar el orden de los registros: ascendente mediante la clusula (ASC - se toma este valor por defecto) descendente (DESC)

SELECT CodigoPostal, Nombre, Telefono FROM Clientes ORDER y CodigoPostal DESC , Nombre ASC

USO DE NDICES DE LAS TABLAS

Si deseamos que la sentencia SQL utilice un ndice para mostrar los resultados se puede utilizar la palabra reservada INDEX de la siguiente forma:

SELECT ... FROM Tabla (INDEX=Indice) ...

Normalmente los motores de las bases de datos deciden que indice se debe utilizar para la consulta, para ello utilizan criterios de rendimiento y sobre todo los campos de bsqueda especificados en la clusula WHERE. Si se desea forzar a no utilizar ningn ndice utilizaremos la siguiente sintaxis:

SELECT ... FROM Tabla (INDEX=0) ...

CONSULTAS CON PREDICADO El predicado se incluye entre la clusula y el primer nombre del campo a recuperar, los posibles predicados son: PREDICADO ALL TOP DISTINCT DESCRIPCIN Devuelve todos los campos de la tabla Devuelve un determinado nmero de registros de la tabla Omite los registros cuyos campos seleccionados

coincidan totalmente Omite los registros duplicados basandose en la totalidad del registro y no slo en los campos seleccionados.

DISTINCTROW

ALL Si no se incluye ninguno de los predicados se asume ALL. El Motor de base de datos selecciona todos los registros que cumplen las condiciones de la instruccin SQL y devuelve todos y cada uno de sus campos. No es conveniente abusar de este predicado ya que obligamos al motor de la base de datos a analizar la estructura de la tabla para averiguar los campos que contiene, es mucho ms rpido indicar el listado de campos deseados.

SELECT ALL FROM Empleados SELECT * FROM Empleados

TOP Devuelve un cierto nmero de registros que entran entre al principio o al final de un rango especificado por una clusula ORDER y. Supongamos que queremos recuperar los nombres de los 25 primeros estudiantes del curso 1994:

SELECT TOP 25 Nombre, Apellido FROM Estudiantes ORDER y Nota DESC

Si no se incluye la clusula ORDER y, la consulta devolver un conjunto arbitrario de 25 registros de la tabla de Estudiantes. El predicado TOP no elige entre valores iguales. En el ejemplo anterior, si la nota media nmero 25 y la 26 son iguales, la consulta devolver 26 registros. Se puede utilizar la palabra reservada PERCENT para devolver un cierto porcentaje de registros que caen al principio o al final de un rango especificado por la clusula ORDER y. Supongamos que en lugar de los 25 primeros estudiantes deseamos el 10 por ciento del curso:

SELECT TOP 10 PERCENT Nombre, Apellido FROM Estudiantes ORDER y Nota DESC

El valor que va a continuacin de TOP debe ser un entero sin signo. TOP no afecta a la posible actualizacin de la consulta.

DISTINCT Omite los registros que contienen datos duplicados en los campos seleccionados. Para que los valores de cada campo listado en la instruccin SELECT se incluyan en la consulta deben ser nicos. Por ejemplo, varios empleados listados en la tabla Empleados pueden tener el mismo apellido. Si

dos registros contienen Lpez en el campo Apellido, la siguiente instruccin SQL devuelve un nico registro:

SELECT DISTINCT Apellido FROM Empleados

Con otras palabras el predicado DISTINCT devuelve aquellos registros cuyos campos indicados en la clusula SELECT posean un contenido diferente. El resultado de una consulta que utiliza DISTINCT no es actualizable y no refleja los cambios subsiguientes realizados por otros usuarios.

DISTINCTROW Este predicado no es compatible con ANSI. Que yo sepa a da de hoy slo funciona con ACCESS. Devuelve los registros diferentes de una tabla; a diferencia del predicado anterior que slo se fijaba en el contenido de los campos seleccionados, ste lo hace en el contenido del registro completo independientemente de los campos indicados en la clusula SELECT.

SELECT DISTINCTROW Apellido FROM Empleados

Si la tabla empleados contiene dos registros: Antonio Lpez y Marta Lpez el ejemplo del predicado DISTINCT devuelve un nico registro con el valor Lpez en el campo Apellido ya que busca no duplicados en dicho campo. Este ltimo ejemplo devuelve dos registros con el valor Lpez en el apellido ya que se buscan no duplicados en el registro completo.

ALIAS En determinadas circunstancias es necesario asignar un nombre a alguna columna determinada de un conjunto devuelto, otras veces por simple capricho o porque estamos recuperando datos de diferentes tablas y resultan tener un campo con igual nombre. Para resolver todas ellas tenemos la palabra reservada AS que se encarga de asignar el nombre que deseamos a la

columna deseada. Tomado como referencia el ejemplo anterior podemos hacer que la columna devuelta por la consulta, en lugar de llamarse apellido (igual que el campo devuelto) se llame Empleado. En este caso procederamos de la siguiente forma:

SELECT DISTINCTROW Apellido AS Empleado FROM Empleados

AS no es una palabra reservada de ANSI, existen diferentes sistemas de asignar los alias en funcin del motor de bases de datos. En ORACLE para asignar un alias a un campo hay que hacerlo de la siguiente forma:

SELECT Apellido AS "Empleado" FROM Empleados

Tambin podemos asignar alias a las tablas dentro de la consulta de seleccin, en esta caso hay que tener en cuenta que en todas las referencias que deseemos hacer a dicha tabla se ha de utilizar el alias en lugar del nombre. Esta tcnica ser de gran utilidad ms adelante cuando se estudien las vinculaciones entre tablas. Por ejemplo:

SELECT Apellido AS Empleado FROM Empleados AS Trabajadores

Para asignar alias a las tablas en ORACLE y SQL-SERVER los alias se asignan escribiendo el nombre de la tabla, dejando un espacio en blanco y escribiendo el Alias (se asignan dentro de la clusula FROM). SELECT Trabajadores.Apellido (1) AS Empleado FROM Empleados Trabajadores
(1)

Esta nomenclatura [Tabla].[Campo] se debe utilizar cuando se est

recuperando un campo cuyo nombre se repite en varias de las tablas que se utilizan en la sentencia. No obstante cuando en la sentencia se emplean varias tablas es aconsejable utilizar esta nomenclatura para evitar el trabajo que supone al motor de datos averiguar en que tabla est cada uno de los campos indicados en la clusua SELECT.

RECUPERAR INFORMACIN DE UNA BASE DE DATOS EXTERNA

Para concluir este captulo se debe hacer referencia a la recuperacin de registros de bases de datos externas. Es ocasiones es necesario la recuperacin de informacin que se encuentra contenida en una tabla que no se encuentra en la base de datos que ejecutar la consulta o que en ese momento no se encuentra abierta, esta situacin la podemos salvar con la palabra reservada IN de la siguiente forma:

SELECT Apellido AS Empleado FROM Empleados IN 'c: \databases\gestion.mdb'

En donde c: \databases\gestion.mdb es la base de datos que contiene la tabla Empleados. Esta tcnica es muy sencilla y comn en bases de datos de tipo ACCESS en otros sistemas como SQL-SERVER u ORACLE, la cosa es ms complicada la tener que existir relaciones de confianza entre los servidores o al ser necesaria la vinculacin entre las bases de datos. Este ejemplo recupera la informacin de una base de datos de SQL-SERVER ubicada en otro servidor (se da por supuesto que los servidores estn lincados):

SELECT Apellido FROM Servidor1.BaseDatos1.dbo.Empleados

CONSULTAS DE ACCIN

Bases de datos-SQL-Sentencias SQL-Consultas de Accin

Las consultas de accin son aquellas que no devuelven ningn registro, son las encargadas de acciones como aadir y borrar y modificar registros. Tanto las sentencias de actualizacin como las de borrado desencadern (segn el motor de datos) las actualizaciones en cascada, borrados en cascada, restricciones y valores por defecto definidos para los diferentes campos o tablas afectadas por la consulta.

DELETE Crea una consulta de eliminacin que elimina los registros de una o ms de las tablas listadas en la clusula FROM que satisfagan la clusula WHERE. Esta consulta elimina los registros completos, no es posible eliminar el contenido de algn campo en concreto. Su sintaxis es:

DELETE FROM Tabla WHERE criterio

Una vez que se han eliminado los registros utilizando una consulta de borrado, no puede deshacer la operacin. Si desea saber qu registros se eliminarn, primero examine los resultados de una consulta de seleccin que utilice el mismo criterio y despus ejecute la consulta de borrado. Mantenga copias de seguridad de sus datos en todo momento. Si elimina los registros equivocados podr recuperarlos desde las copias de seguridad.

DELETE

FROM Empleados WHERE Cargo = 'Vendedor'

INSERT INTO Agrega un registro en una tabla. Se la conoce como una consulta de datos aadidos. Esta consulta puede ser de dos tipo: Insertar un nico registro Insertar en una tabla los registros contenidos en otra tabla. Para insertar un nico Registro: En este caso la sintaxis es la siguiente:

INSERT INTO Tabla (campo1, campo2, ..., campoN) VALUES (valor1, valor2, ..., valorN)

Esta consulta graba en el campo1 el valor1, en el campo2 y valor2 y as sucesivamente. Para seleccionar registros e insertarlos en una tabla nueva En este caso la sintaxis es la siguiente:

SELECT campo1, campo2, ..., campoN INTO nuevatabla FROM tablaorigen [WHERE criterios]

Se pueden utilizar las consultas de creacin de tabla para archivar registros, hacer copias de seguridad de las tablas o hacer copias para exportar a otra base de datos o utilizar en informes que muestren los datos de un periodo de tiempo concreto. Por ejemplo, se podra crear un informe de Ventas mensuales por regin ejecutando la misma consulta de creacin de tabla cada mes. Para insertar Registros de otra Tabla: En este caso la sintaxis es:

INSERT INTO Tabla [IN base_externa] (campo1, campo2,..., campoN) SELECT TablaOrigen.campo1, TablaOrigen.campo2,...,TablaOrigen.campoN FROM Tabla Origen

En este caso se seleccionarn los campos 1,2,..., n de la tabla origen y se grabarn en los campos 1,2,.., n de la Tabla. La condicin SELECT puede incluir la clusula WHERE para filtrar los registros a copiar. Si Tabla y Tabla Origen poseen la misma estructura podemos simplificar la sintaxis a:

INSERT INTO Tabla SELECT Tabla Origen.* FROM Tabla Origen

De esta forma los campos de Tabla Origen se grabarn en Tabla, para realizar esta operacin es necesario que todos los campos de Tabla Origen estn contenidos con igual nombre en Tabla. Con otras palabras que Tabla posea todos los campos de Tabla Origen (igual nombre e igual tipo). En este tipo de consulta hay que tener especial atencin con los campos contadores o autonumricos puesto que al insertar un valor en un campo de este tipo se escribe el valor que contenga su campo homlogo en la tabla origen, no incrementndose como le corresponde. Se puede utilizar la instruccin INSERT INTO para agregar un registro nico a una tabla, utilizando la sintaxis de la consulta de adicin de registro nico tal y como se mostr anteriormente. En este caso, su cdigo especifica el nombre y el valor de cada campo del registro. Debe especificar cada uno de los campos

del registro al que se le va a asignar un valor as como el valor para dicho campo. Cuando no se especifica dicho campo, se inserta el valor predeterminado o NULL. Los registros se agregan al final de la tabla. Tambin se puede utilizar INSERT INTO para agregar un conjunto de registros pertenecientes a otra tabla o consulta utilizando la clusula SELECT... FROM como se mostr anteriormente en la sintaxis de la consulta de adicin de mltiples registros. En este caso la clusula SELECT especifica los campos que se van a agregar en la tabla destino especificada. La tabla destino u origen puede especificar una tabla o una consulta. Si la tabla destino contiene una clave principal, hay que asegurarse que es nica, y con valores no nulos; si no es as, no se agregarn los registros. Si se agregan registros a una tabla con un campo Contador, no se debe incluir el campo Contador en la consulta. Se puede emplear la clusula IN para agregar registros a una tabla en otra base de datos. Se pueden averiguar los registros que se agregarn en la consulta ejecutando primero una consulta de seleccin que utilice el mismo criterio de seleccin y ver el resultado. Una consulta de adicin copia los registros de una o ms tablas en otra. Las tablas que contienen los registros que se van a agregar no se vern afectadas por la consulta de adicin. En lugar de agregar registros existentes en otra tabla, se puede especificar los valores de cada campo en un nuevo registro utilizando la clusula VALUES. Si se omite la lista de campos, la clusula VALUES debe incluir un valor para cada campo de la tabla, de otra forma fallar INSERT. EJEMPLOS

INSERT INTO Clientes SELECT ClientesViejos.* FROM ClientesNuevos SELECT Empleados.* INTO Programadores FROM Empleados WHERE Categoria = 'Programador'

Esta consulta crea una tabla nueva llamada programadores con igual estructura que la tabla empleado y copia aquellos registros cuyo campo categora se programador

INSERT INTO Empleados (Nombre, Apellido, Cargo)

VALUES ( 'Luis', 'Snchez', 'Becario' )

INSERT INTO Empleados SELECT Vendedores.* FROM Vendedores WHERE Provincia = 'Madrid'

UPDATE Crea una consulta de actualizacin que cambia los valores de los campos de una tabla especificada basndose en un criterio especfico. Su sintaxis es:

UPDATE Tabla SET Campo1=Valor1, Campo2=Valor2, CampoN=ValorN WHERE Criterio

UPDATE es especialmente til cuando se desea cambiar un gran nmero de registros o cuando stos se encuentran en mltiples tablas. Puede cambiar varios campos a la vez. El ejemplo siguiente incrementa los valores Cantidad pedidos en un 10 por ciento y los valores Transporte en un 3 por ciento para aquellos que se hayan enviado al Reino Unido.:

UPDATE Pedidos SET Pedido = Pedidos * 1.1, Transporte = Transporte * 1.03 WHERE PaisEnvo = 'ES'

UPDATE no genera ningn resultado. Para saber qu registros se van a cambiar, hay que examinar primero el resultado de una consulta de seleccin que utilice el mismo criterio y despus ejecutar la consulta de actualizacin.

UPDATE Empleados SET Grado = 5 WHERE Grado = 2 UPDATE Productos SET Precio = Precio * 1.1 WHERE Proveedor = 8 AND Familia = 3

Si en una consulta de actualizacin suprimimos la clusula WHERE todos los registros de la tabla sealada sern actualizados.

UPDATE Empleados SET Salario = Salario * 1.1 1.2.3.1. 1.2.3.2. TCNICA DIDCTICA Exposicin del profesor. MATERIAL DE APOYO

1.2.4. ACTIVIDADES DE APRENDIZAJE 1.2.4.1. ACTIVIDAD DE APRENDIZAJE 1 A2-T2 Realizar Base de Datos 1.2.4.1.1. INSTRUCCIONES Traducir el siguiente esquema Entidad Relacin a una base de datos en SQL Server 2000 y colocarle el nombre de ESQUINITA. ABARROTES LA ESQUINITA

a) b) c) d) e) f)

Valor actividad: 5 Puntos Producto esperado: Base de datos. Fecha inicio: Fecha entrega: Forma de entrega: Archivo Tipo de Actividad: Equipo (3 gentes) 1.2.4.1.2. CRITERIO DE EVALUACIN DE LA ACTIVIDAD 1
ACTIVIDAD DESARROLLO Traducir el esquema entidad relacion a una base de datos en SQL Server 2000 Total PONDERACIN 5 puntos 5 Puntos

Realizar Base de Datos

1.2.5. RESULTADO DE APRENDIZAJE

Aprender a crear bases de datos en SQL Server 2000. 1.2.6. BIBLIOGRAFA SQL Server 7.0 1.2.7. DOCUMENTOS Manual SQL Server 2000 Standard final 1.3. CONSULTA DE TABLAS MULTIPLES

1.3.1. OBJETIVO DE APRENDIZAJE Que el alumno aprenda a manejar consultas un tanto mas complejas, solucionando las necesidades mas comunes de una BD. 1.3.2. RECURSO TIEMPO DEL TEMA 3 horas. 1.3.3. DESARROLLO

CONSULTAS DE UNIN INTERNAS Bases de datos-SQL-Sentencias SQL-Consultas de Unin Internas CONSULTAS DE COMBINACIN ENTRE TABLAS Las vinculaciones entre tablas se realizan mediante la clusula INNER que combina registros de dos tablas siempre que haya concordancia de valores en un campo comn. Su sintaxis es:

SELECT campos FROM tb1 INNER JOIN tb2 ON tb1.campo1 comp tb2.campo2

En donde:

tb1, tb2

Son los nombres de las tablas desde las que se combinan los registros. Son los nombres de los campos que se combinan. Si no son

campo1, campo2

numricos, los campos deben ser del mismo tipo de datos y contener el mismo tipo de datos, pero no tienen que tener el mismo nombre.

comp

Es cualquier operador de comparacin relacional: =, <,<>, <=, =>, >.

Se puede utilizar una operacin INNER JOIN en cualquier clusula FROM. Esto crea una combinacin por equivalencia, conocida tambin como unin interna. Las combinaciones equivalentes son las ms comunes; stas combinan los registros de dos tablas siempre que haya concordancia de valores en un campo comn a ambas tablas. Se puede utilizar INNER JOIN con las tablas Departamentos y Empleados para seleccionar todos los empleados de cada departamento. Por el contrario, para seleccionar todos los departamentos (incluso si alguno de ellos no tiene ningn empleado asignado) se emplea LEFT JOIN o todos los empleados (incluso si alguno no est asignado a ningn departamento), en este caso RIGHT JOIN. Si se intenta combinar campos que contengan datos Memo u Objeto OLE, se produce un ERROR. Se pueden combinar dos campos numricos

cualesquiera, incluso si son de diferente tipo de datos. Por ejemplo, puede combinar un campo Numrico para el que la propiedad Size de su objeto Field est establecida como Entero, y un campo Contador. El ejemplo siguiente muestra cmo podra combinar las tablas Categoras y Productos basndose en el campo IDCategoria:

SELECT NombreCategoria, NombreProducto FROM Categorias INNER JOIN Productos ON Categorias.IDCategoria = Productos.IDCategoria

En el ejemplo anterior, IDCategoria es el campo combinado, pero no est incluido en la salida de la consulta ya que no est incluido en la instruccin SELECT. Para incluir el campo combinado, incluir el nombre del campo en la instruccin SELECT, en este caso, Categorias.IDCategoria. Tambin se pueden enlazar varias clusulas ON en una instruccin JOIN, utilizando la sintaxis siguiente:

SELECT campos FROM tabla1 INNER JOIN tabla2

ON (tb1.campo1 comp tb2.campo1 AND ON tb1.campo2 comp tb2.campo2) OR ON (tb1.campo3 comp tb2.campo3)

Tambin puede anidar instrucciones JOIN utilizando la siguiente sintaxis:

SELECT campos FROM tb1 INNER JOIN (tb2 INNER JOIN [( ]tb3 [INNER JOIN [( ]tablax [INNER JOIN ...)] ON tb3.campo3 comp tbx.campox)] ON tb2.campo2 comp tb3.campo3) ON tb1.campo1 comp tb2.campo2

Un LEFT JOIN o un RIGHT JOIN puede anidarse dentro de un INNER JOIN, pero un INNER JOIN no puede anidarse dentro de un LEFT JOIN o un RIGHT JOIN. Ejemplo:

SELECT DISTINCT SUM(PrecioUnitario * Cantidad) AS Sales, (Nombre + ' ' + Apellido) AS Name FROM Empleados INNER JOIN( Pedidos INNER JOIN DetallesPedidos ON Pedidos.IdPedido = DetallesPedidos.IdPedido) ON Empleados.IdEmpleado = Pedidos.IdEmpleado GROUP y Nombre + ' ' + Apellido

(Crea dos combinaciones equivalentes: una entre las tablas Detalles de pedidos y Pedidos, y la otra entre las tablas Pedidos y Empleados. Esto es necesario ya que la tabla Empleados no contiene datos de ventas y la tabla Detalles de pedidos no contiene datos de los empleados. La consulta produce una lista de empleados y sus ventas totales.)

Si empleamos la clusula INNER en la consulta se seleccionarn slo aquellos registros de la tabla de la que hayamos escrito a la izquierda de INNER JOIN que contengan al menos un registro de la tabla que hayamos escrito a la derecha. Para solucionar esto tenemos dos clusulas que sustituyen a la palabra clave INNER, estas clusulas son LEFT y RIGHT. LEFT toma todos

los registros de la tabla de la izquierda aunque no tengan ningn registro en la tabla de la izquierda. RIGHT realiza la misma operacin pero al contrario, toma todos los registros de la tabla de la derecha aunque no tenga ningn registro en la tabla de la izquierda. La sintaxis expuesta anteriormente pertenece a ACCESS, en donde todas las sentencias con la sintaxis funcionan correctamente. Los manuales de SQLSERVER dicen que esta sintaxis es incorrecta y que hay que aadir la palabra reservada OUTER: LEFT OUTER JOIN y RIGHT OUTER JOIN. En la prctica funciona correctamente de una u otra forma. No obstante, los INNER JOIN ORACLE no es capaz de interpretarlos, pero existe una sintaxis en formato ANSI para los INNER JOIN que funcionan en todos los sistemas. Tomando como referencia la siguiente sentencia:

SELECT Facturas.*, Albaranes.* FROM Facturas INNER JOINAlbaranes ON Facturas.IdAlbaran = Albaranes.IdAlbaran WHERE Facturas.IdCliente = 325

La transformacin de esta sentencia a formato ANSI sera la siguiente:

SELECT Facturas.*, Albaranes.* FROM Facturas, Albaranes WHERE Facturas.IdAlbaran = Albaranes.IdAlbaran AND Facturas.IdCliente = 325

Como se puede observar los cambios realizados han sido los siguientes: 1. Todas las tablas que intervienen en la consulta se especifican en la

clusula FROM. 2. Las condiciones que vinculan a las tablas se especifican en la clusula

WHERE y se vinculan mediante el operador lgico AND. Referente a los OUTER JOIN, no funcionan en ORACLE y adems conozco una sintaxis que funcione en los tres sistemas. La sintaxis en ORACLE es igual a la sentencia anterior pero aadiendo los caracteres (+) detrs del nombre de

la tabla en la que deseamos aceptar valores nulos, esto equivale a un LEFT JOIN:

SELECT Facturas.*, Albaranes.* FROM Facturas, Albaranes WHERE Facturas.IdAlbaran = Albaranes.IdAlbaran (+) AND Facturas.IdCliente = 325

Y esto a un RIGHT JOIN:

SELECT Facturas.*, Albaranes.* FROM Facturas, Albaranes WHERE Facturas.IdAlbaran (+) = Albaranes.IdAlbaran AND Facturas.IdCliente = 325

En SQL-SERVER se puede utilizar una sintaxis parecida, en este caso no se utiliza los caracteres (+) sino los caracteres =* para el LEFT JOIN y *= para el RIGHT JOIN.

CONSULTAS DE AUTOCOMBINACIN La autocombinacin se utiliza para unir una tabla consigo misma, comparando valores de dos columnas con el mismo tipo de datos. La sintaxis en la siguiente:

SELECT alias1.columna, alias2.columna, ... FROM tabla1 AS alias1, tabla2 AS alias2 WHERE alias1.columna = alias2.columna AND otras condiciones

Por ejemplo, para visualizar el nmero, nombre y puesto de cada empleado, junto con el nmero, nombre y puesto del supervisor de cada uno de ellos se utilizara la siguiente sentencia:

SELECT t.num_emp, t.nombre, t.puesto, t.num_sup,s.nombre, s.puesto FROM empleados AS t, empleados AS s WHERE t.num_sup = s.num_emp

CONSULTAS DE COMBINACIONES NO COMUNES

La mayora de las combinaciones estn basadas en la igualdad de valores de las columnas que son el criterio de la combinacin. Las no comunes se basan en otros operadores de combinacin, tales como NOT, BETWEEN, <>, etc. Por ejemplo, para listar el grado salarial, nombre, salario y puesto de cada empleado ordenando el resultado por grado y salario habra que ejecutar la siguiente sentencia: SELECT grados.grado,empleados.nombre, empleados.salario, empleados.puesto FROM empleados, grados WHERE empleados.salario BETWEEN grados.salarioinferior AND grados.salariosuperior ORDER y grados.grado, empleados.salario

Para listar el salario medio dentro de cada grado salarial habra que lanzar esta otra sentencia:

SELECT grados.grado, AVG(empleados.salario) FROM empleados, grados WHERE empleados.salario BETWEEN grados.salarioinferior AND grados.salariosuperior GROUP y grados.grado

CROSS JOIN (SQL-SERVER)

Se utiliza en SQL-SERVER para realizar consultas de unin. Supongamos que tenemos una tabla con todos los autores y otra con todos los libros. Si

deseramos obtener un listado combinar ambas tablas de tal forma que cada autor apareciera junto a cada ttulo, utilizaramos la siguiente sintaxis:

SELECT Autores.Nombre, Libros.Titulo FROM Autores CROSS JOIN Libros

SELF JOIN SELF JOIN es una tcnica empleada para conseguir el producto cartesiano de una tabla consigo misma. Su utilizacin no es muy frecuente, pero pongamos algn ejemplo de su utilizacin. Supongamos la siguiente tabla (El campo autor es numrico, aunque para ilustrar el ejemplo utilice el nombre):

Autores Cdigo (Cdigo del libro) B0012 B0012 B0012 C0014 C0014 D0120 D0120 Autor (Nombre del Autor) 1. Francisco Lpez 2. Javier Alonso 3. Marta Rebolledo 1. Francisco Lpez 2. Javier Alonso 2. Javier Alonso 3. Marta Rebolledo

Queremos obtener, para cada libro, parejas de autores:

SELECT A.Codigo, A.Autor, B.Autor FROM Autores A, Autores B WHERE A.Codigo = B.Codigo

El resultado es el siguiente:

Cdigo B0012 B0012 B0012 B0012 B0012 B0012 B0012 B0012 B0012 C0014 C0014 C0014 C0014 D0120 D0120 D0120 D0120

Autor 1. Francisco Lpez 1. Francisco Lpez 1. Francisco Lpez 2. Javier Alonso 2. Javier Alonso 2. Javier Alonso 3. Marta Rebolledo 3. Marta Rebolledo 3. Marta Rebolledo 1. Francisco Lpez 1. Francisco Lpez 2. Javier Alonso 2. Javier Alonso 2. Javier Alonso 2. Javier Alonso 3. Marta Rebolledo 3. Marta Rebolledo

Autor 1. Francisco Lpez 2. Javier Alonso 3. Marta Rebolledo 2. Javier Alonso 1. Francisco Lpez 3. Marta Rebolledo 3. Marta Rebolledo 2. Javier Alonso 1. Francisco Lpez 1. Francisco Lpez 2. Javier Alonso 2. Javier Alonso 1. Francisco Lpez 2. Javier Alonso 3. Marta Rebolledo 3. Marta Rebolledo 2. Javier Alonso

Como podemos observar, las parejas de autores se repiten en cada uno de los libros, podemos omitir estas repeticiones de la siguiente forma

SELECT A.Codigo, A.Autor, B.Autor FROM Autores A, Autores B WHERE A.Codigo = B.Codigo AND A.Autor < B.Autor

El resultado ahora es el siguiente: Cdigo B0012 B0012 C0014 D0120 Autor 1. Francisco Lpez 1. Francisco Lpez 1. Francisco Lpez 2. Javier Alonso Autor 2. Javier Alonso 3. Marta Rebolledo 2. Javier Alonso 3. Marta Rebolledo

Ahora tenemos un conjunto de resultados en formato Autor - CoAutor. Si en la tabla de empleados quisiramos extraer todas las posibles parejas que podemos realizar, utilizaramos la siguiente sentencia:

SELECT Hombres.Nombre, Mujeres.Nombre FROM Empleados Hombre, Empleados Mujeres WHERE Hombre.Sexo = 'Hombre' AND Mujeres.Sexo = 'Mujer' AND Hombres.Id <>Mujeres.Id

Para concluir supongamos la tabla siguiente:

Empleados Id 1 2 3 4 5 6 Marcos Lucas Ana Eva Juan Antonio Nombre 6 1 2 1 6 SuJefe

Queremos obtener un conjunto de resultados con el nombre del empleado y el nombre de su jefe:

SELECT Emple.Nombre, Jefes.Nombre FROM Empleados Emple, Empleados Jefe WHERE Emple.SuJefe = Jefes.Id

FULL JOIN Este tipo de operador se utiliza para devolver todas las filas de una combinacin tengan o no correspondencia. Es el equivalente a la utilizacin de LEFT JOIN y RIGHT JOIN a la misma vez. Mediante este operador se obtendrn por un lado las filas que tengan correspondencia en ambas tablas y tambin aquellas que no tengan correspondencia sean de la tabla que sean. Si desearamos obtener un listado que incluyera todos los autores con sus libros correspondientes, pero adems todos los autores que no han escrito ningn libro y todos aquellos libros sin autor (devemos suponer que no existe un autor llamado annimo):

SELECT Autores.*, Libros.* FROM Autores FULL Libros ON Autores.IdAutor = Libros.IdAutor

CONSULTAS DE UNIN EXTERNAS

Bases de datos-SQL-Sentencias SQL-Consultas de Unin Externas Se utiliza la operacin UNION para crear una consulta de unin, combinando los resultados de dos o ms consultas o tablas independientes. Su sintaxis es:

[TABLE] consulta1 UNION [ALL] [TABLE] consulta2 [UNION [ALL] [TABLE] consultan [ ... ]]

En donde: consulta 1,consulta 2, Son instrucciones SELECT, el nombre de una consulta almacenada o el nombre de una tabla

consulta n

almacenada precedido por la palabra clave TABLE.

Puede combinar los resultados de dos o ms consultas, tablas e instrucciones SELECT, en cualquier orden, en una nica operacin UNION. El ejemplo siguiente combina una tabla existente llamada Nuevas Cuentas y una instruccin SELECT:

TABLE NuevasCuentas UNION ALL SELECT * FROM Clientes WHERE CantidadPedidos > 1000

Si no se indica lo contrario, no se devuelven registros duplicados cuando se utiliza la operacin UNION, no obstante puede incluir el predicado ALL para asegurar que se devuelven todos los registros. Esto hace que la consulta se ejecute ms rpidamente. Todas las consultas en una operacin UNION deben pedir el mismo nmero de campos, no obstante los campos no tienen porqu tener el mismo tamao o el mismo tipo de datos. Se puede utilizar una clusula GROUP y y/o HAVING en cada argumento consulta para agrupar los datos devueltos. Puede utilizar una clusula ORDER y al final del ltimo argumento consulta para visualizar los datos devueltos en un orden especfico.

SELECT NombreCompania, Ciudad FROM Proveedores WHERE Pais = 'Brasil' UNION SELECT NombreCompania, Ciudad FROM Clientes WHERE Pais = 'Brasil'

Recupera los nombres y las ciudades de todos proveedores y clientes de Brasil

SELECT NombreCompania, Ciudad FROM Proveedores WHERE Pais = 'Brasil' UNION SELECT NombreCompania, Ciudad FROM Clientes WHERE Pais = 'Brasil' ORDER y Ciudad

Recupera los nombres ylas ciudades de todos proveedores yclientes radicados en Brasil, ordenados por el nombre de la ciudad

SELECT NombreCompania, Ciudad FROM Proveedores WHERE Pais = 'Brasil' UNION SELECT NombreCompania, Ciudad FROM Clientes WHERE Pais = 'Brasil' UNION SELECT Apellidos, Ciudad FROM Empleados WHERE Region = 'Amrica del Sur'

Recupera los nombres y las ciudades de todos los proveedores y clientes de brasil y los apellidos y las ciudades de todos los empleados de Amrica del Sur

TABLE Lista_Clientes UNION TABLE ListaProveedores

Recupera los nombres y cdigos de todos los proveedores y clientes

REFERENCIAS CRUZADAS Bases de datos-SQL-Sentencias SQL-Referencias Cruzadas

ACCESS Una consulta de referencias cruzadas es aquella que nos permite visualizar los datos en filas y en columnas, estilo tabla, por ejemplo: Producto / Ao Pantalones Camisas Zapatos 1996 1.250 8.560 4.369 1997 3.000 1.253 2.563

Si tenemos una tabla de productos y otra tabla de pedidos, podemos visualizar en total de productos pedidos por ao para un artculo determinado, tal y como

se visualiza en la tabla anterior. La sintaxis para este tipo de consulta es la siguiente:

TRANSFORM funcin agregada instruccin SELECT PIVOT campo PIVOT [IN (valor1[, valor2[, ...]])]

En donde: Funcin agregada instruccin SELECT Es una funcin SQL agregada que opera sobre los datos seleccionados. Es una instruccin SELECT. Es el campo o expresin que desea utilizar para crear campo PIVOT las cabeceras de la columna en el resultado de la consulta. valor1, valor2 Son valores fijos utilizados para crear las cabeceras de la columna.

Para resumir datos utilizando una consulta de referencia cruzada, se seleccionan los valores de los campos o expresiones especificadas como cabeceras de columnas de tal forma que pueden verse los datos en un formato ms compacto que con una consulta de seleccin. TRANSFORM es opcional pero si se incluye es la primera instruccin de una cadena SQL. Precede a la instruccin SELECT que especifica los campos utilizados como encabezados de fila y una clusula GROUP y que especifica el agrupamiento de las filas. Opcionalmente puede incluir otras clusulas como por ejemplo WHERE, que especifica una seleccin adicional o un criterio de ordenacin. Los valores devueltos en campo PIVOT se utilizan como encabezados de columna en el resultado de la consulta. Por ejemplo, al utilizar las cifras de ventas en el mes de la venta como PIVOT en una consulta de referencia cruzada se crearan 12 columnas. Puede restringir el campo PIVOT para crear

encabezados a partir de los valores fijos (valor1, valor2) listados en la clusula opcional IN. Tambin puede incluir valores fijos, para los que no existen datos, para crear columnas adicionales. Ejemplos

TRANSFORM SUM(Cantidad) AS Ventas SELECT Producto, Cantidad FROM Pedidos WHERE Fecha BETWEEN #01-01-1998# AND #12-31-1998# GROUP y Producto ORDER y Producto PIVOT DatePart("m", Fecha)

Crea una consulta de tabla de referencias cruzadas que muestra las ventas de productos por mes para un ao especfico. Los meses aparecen de izquierda a derecha como columnas y los nombres de los productos aparecen de arriba hacia abajo como filas.

TRANSFORM SUM(Cantidad) AS Ventas SELECT Compania FROM Pedidos WHERE Fecha BETWEEN #01-01-1998# AND #12-31-1998# GROUP y Compania ORDER y Compania PIVOT "Trimestre " & DatePart("q", Fecha) IN ('Trimestre1', 'Trimestre2', 'Trimestre 3', 'Trimestre 4')

Crea una consulta de tabla de referencias cruzadas que muestra las ventas de productos por trimestre de cada proveedor en el ao indicado. Los trimestres aparecen de izquierda a derecha como columnas y los nombres de los proveedores aparecen de arriba hacia abajo como filas.

Un caso prctico:

Se trata de resolver el siguiente problema: tenemos una tabla de productos con dos campos, el cdigo y el nombre del producto, tenemos otra tabla de pedidos en la que anotamos el cdigo del producto, la fecha del pedido y la cantidad pedida. Deseamos consultar los totales de producto por ao, calculando la media anual de ventas. Estructura y datos de las tablas:

ARTICULOS ID 1 2 3 Nombre Zapatos Pantalones Blusas 1 2 3 1 2 3 1 2 3 1 2 3 ID

PEDIDOS Fecha 11/11/1996 11/11/1996 11/11/1996 12/10/1996 04/10/1996 05/08/1996 01/01/1997 02/08/1997 05/10/1997 12/12/1997 15/12/1997 17/10/1997 250 125 520 50 250 100 40 60 70 8 520 1.250 Cantidad

Para resolver la consulta planteamos la siguiente consulta:

TRANSFORM SUM(Pedidos.Cantidad) AS Resultado SELECT Nombre AS Producto, Pedidos.Id AS Cdigo, SUM(Pedidos.Cantidad) AS TOTAL, AVG(Pedidos.Cantidad) AS Media FROM Pedidos, Artculos

WHERE Pedidos.Id = Artculos.Id GROUP y Pedidos.Id, Artculos.Nombre PIVOT year(Fecha)

Y Obtenemos el siguiente resultado: Producto Zapatos Pantalones Blusas 1 2 3 Cdigo Total 348 955 1940 87 238,75 485 Media 1996 300 375 620 1997 48 580 1320

Comentarios a la consulta:

La clusula TRANSFORM indica el valor que deseamos visualizar en las columnas que realmente pertenecen a la consulta, en este caso 1996 y 1997, puesto que las dems columnas son opcionales. SELECT especifica el nombre de las columnas opcionales que deseamos visualizar, en este caso Producto, Cdigo, Total y Media, indicando el nombre del campo que deseamos mostrar en cada columna o el valor de la misma. Si incluimos una funcin de clculo el resultado se har basndose en los datos de la fila actual y no al total de los datos. FROM especifica el origen de los datos. La primera tabla que debe figurar es aquella de donde deseamos extraer los datos, esta tabla debe contener al menos tres campos, uno para los ttulos de la fila, otros para los ttulos de la columna y otro para calcular el valor de las celdas. En este caso en concreto se deseaba visualizar el nombre del producto, como en la tabla de pedidos slo figuraba el cdigo del mismo se aadi una nueva columna en la clusula SELECT llamada Producto que se corresponda con el campo Nombre de la tabla de artculos. Para vincular el cdigo del artculo de la tabla de pedidos con el nombre del mismo de la tabla artculos se insert la clusula INNER JOIN. La clusula GROUP y especifica el agrupamiento de los registros, contrariamente a los manuales de instruccin esta clusula no es opcional ya

que debe figurar siempre y debemos agrupar los registros por el campo del cual extraemos la informacin. En este caso existen dos campos de los que extraemos la informacin: pedidos.cantidad y artculos.nombre, por ello agrupamos por los campos. Para finalizar la clusula PIVOT indica el nombre de las columnas no opcionales, en este caso 1996 y 1997 y como vemos a el dato que aparecer en las columnas, en este caso empleamos el ao en que se produjo el pedido, extrayndolo del campo pedidos.fecha.

Otras posibilidades de fecha de la clusula PIVOT son las siguientes: 1. Para agrupamiento por Trimestres:

PIVOT "Tri " & DatePart("q",[Fecha]); 2. Para agrupamiento por meses (sin tener en cuenta el ao)

PIVOT Format([Fecha],"mmm") IN ("Ene", "Feb", "Mar", "Abr", "May", "Jun", "Jul", "Ago", "Sep", "Oct", "Nov", "Dic"); 3. Para agrupar por das

PIVOT Format([Fecha],"Short Date");

CRITERIOS DE SELECCIN Bases de datos-SQL-Sentencias SQL-Criterios de Seleccin

En el apartado anterior se vio la forma de recuperar los registros de las tablas, las formas empleadas devolvan todos los registros de la mencionada tabla. A lo largo de este apartado se estudiarn las posibilidades de filtrar los registros con el fin de recuperar solamente aquellos que cumplan unas condiciones preestablecidas. Antes de comenzar el desarrollo de este apartado hay que recalcar tres detalles de vital importancia. El primero de ellos es que cada vez que se desee

establecer una condicin referida a un campo de texto la condicin de bsqueda debe ir encerrada entre comillas simples; la segunda es que no es posible establecer condiciones de bsqueda en los campos memo y; la tercera y ltima hace referencia a las fechas. A da de hoy no he sido capaz de encontrar una sintaxis que funcione en todos los sistemas, por lo que se hace necesario particularizarlas segn el banco de datos: Banco de Datos SQL-SERVER ORACLE ACCESS Sintaxis Fecha = #mm-dd-aaaa# Fecha = to_date('yyyyDDMM','aaaammdd',) Fecha = #mm-dd-aaaa# EJEMPLO Banco de Datos SQL-SERVER ORACLE ACCESS Ejemplo (para grabar la fecha 18 de mayo de 1969) Fecha = #05-18-1969#

Fecha = 19690518 Fecha = to_date('yyyyDDMM', '19690518') Fecha = #05-18-1969#

Referente a los valores lgicos TRUE o FALSE cabe destacar que no son reconocidos en ORACLE, ni en este sistema de bases de datos ni en SQLSERVER existen los campos de tipo "SI/NO" de ACCESS; en estos sistemas se utilizan los campos BIT que permiten almacenar valores de 0 1. Internamente, ACCESS, almacena en estos campos valores de 0 -1, as que todo se complica bastante, pero aprovechando la coincidencia del 0 para los valores FALSE, se puede utilizar la sintaxis siguiente que funciona en todos los casos: si se desea saber si el campo es falso "... CAMPO = 0" y para saber los verdaderos "CAMPO <> 0". OPERADORES LGICOS Los operadores lgicos soportados por SQL son: AND, OR, XOR, EQV, IMP, IS y NOT. A excepcin de los dos ltimos todos poseen la siguiente sintaxis:

<expresin1> operador <expresin2> En donde expresin1 y expresin2 son las condiciones a evaluar, el resultado de la operacin vara en funcin del operador lgico. La tabla adjunta muestra los diferentes posibles resultados:

<expresin1> Verdad Verdad Falso Falso Verdad Verdad Falso Falso Verdad Verdad Falso Falso Verdad Verdad Falso Falso Verdad Verdad Verdad

Operador AND AND AND AND OR OR OR OR XOR XOR XOR XOR EQV EQV EQV EQV IMP IMP IMP

<expresin2> Falso Verdad Verdad Falso Falso Verdad Verdad Falso Verdad Falso Verdad Falso Verdad Falso Verdad Falso Verdad Falso NULL

Resultado Falso Verdad Falso Falso Verdad Verdad Verdad Falso Falso Verdad Verdad Falso Verdad Falso Falso Verdad Verdad Falso NULL

Falso Falso Falso NULL NULL NULL

IMP IMP IMP IMP IMP IMP

Verdad Falso NULL Verdad Falso NULL

Verdad Verdad Verdad Verdad NULL NULL

Si a cualquiera de las anteriores condiciones le anteponemos el operador NOT el resultado de la operacin ser el contrario al devuelto sin el operador NOT.

El ltimo operador denominado IS se emplea para comparar dos variables de tipo objeto <Objeto1> IS <Objeto2>. este operador devuelve verdad si los dos objetos son iguales.

SELECT * FROM Empleados WHERE Edad > 25 AND Edad < 50

SELECT * FROM Empleados WHERE (Edad > 25 AND Edad < 50) OR Sueldo = 100

SELECT * FROM Empleados WHERE NOT Estado = 'Soltero'

SELECT * FROM Empleados WHERE (Sueldo > 100 AND Sueldo < 500) OR (Provincia = 'Madrid' AND Estado = 'Casado')

Valores Nulos

En muchas ocasiones es necesario emplear como criterio de seleccion valores nulos en los campos. Podemos emplear el operacion IS NULL para realizar esta operacin. Por ejemplo:

SELECT * FROM Empleados WHERE DNI IS NULL

Este operador no est reconocido en ACCESS y por ello hay que utilizar la siguiente sintaxis:

SELECT * FROM Empleados WHERE ISNULL(DNI)=TRUE

Intervalos de Valores

Para indicar que deseamos recuperar los registros segn el intervalo de valores de un campo emplearemos el operador BETWEEN cuya sintaxis es: campo [NOT] BETWEEN valor1 AND valor2 (la condicin NOT es opcional) En este caso la consulta devolvera los registros que contengan en "campo" un valor incluido en el intervalo valor1, valor2 (ambos inclusive). Si anteponemos la condicin NOT devolver aquellos valores no incluidos en el intervalo.

SELECT * FROM Pedidos WHERE CodPostal BETWEEN 28000 AND 28999

Devuelve los pedidos realizados en la provincia de Madrid

El Operador LIKE

Se utiliza para comparar una expresin de cadena con un modelo en una expresin SQL. Su sintaxis es:

Expresin LIKE modelo

En donde expresin es una cadena modelo o campo contra el que se compara expresin. Se puede utilizar el operador LIKE para encontrar valores en los

campos que coincidan con el modelo especificado. Por modelo puede especificar un valor completo (Ana Mara), o se puede utilizar una cadena de caracteres comodn como los reconocidos por el sistema operativo para encontrar un rango de valores (LIKE An*). El operador LIKE se puede utilizar en una expresin para comparar un valor de un campo con una expresin de cadena. Por ejemplo, si introduce LIKE C* en una consulta SQL, la consulta devuelve todos los valores de campo que comiencen por la letra C. En una consulta con parmetros, puede hacer que el usuario escriba el modelo que se va a utilizar. El ejemplo siguiente devuelve los datos que comienzan con la letra P seguido de cualquier letra entre A y F y de tres dgitos:

LIKE 'P[A-F]###'

Este ejemplo devuelve los campos cuyo contenido empiece con una letra de la A a la D seguidas de cualquier cadena.

LIKE '[A-D]*'

En la tabla siguiente se muestra cmo utilizar el operador LIKE para comprobar expresiones con diferentes modelos. ACCESS Tipo de coincidencia Varios caracteres Carcter especial Varios caracteres Un solo carcter Un solo dgito Modelo Planteado 'a*a' 'a[*]a' 'ab*' 'a?a' 'a#a' 'aa', 'aBBBa' 'a*a' 'abcdefg', 'abc' 'aaa', 'a3a', 'aBa' 'a0a', 'a1a', 'a2a' Coincide 'aBa', No coincide 'aBC' 'aaa' 'cab', 'aab' 'aBBBa' 'aaa', 'a10a'

Rango de caracteres Fuera de un rango Distinto de un dgito Combinada

'[a-z]' '[!a-z]' '[!0-9]' 'a[!b-m]#'

'f', 'p', 'j' '9', '&', '%' 'A', 'a', '&', '~' 'An9', 'az0', 'a99'

'2', '&' 'b', 'a' '0', '1', '9' 'abc', 'aj0'

SQL-SERVER Ejemplo LIKE 'A%' LIKE '_NG' Descripcin Todo lo que comience por A Todo lo que comience por cualquier carcter y luego siga NG

LIKE '[AF]%' Todo lo que comience por A F LIKE F]%' LIKE '[A^B]%' '[A- Todo lo que comience por cualquier letra comprendida entre la A y la F Todo lo que comience por A y la segunda letra no sea una B

En determinado motores de bases de datos, esta clusula, no reconoce el asterisco como carcter comodn y hay que sustituirlo por el carcter tanto por ciento (%).

El Operador IN

Este operador devuelve aquellos registros cuyo campo indicado coincide con alguno de los en una lista. Su sintaxis es: expresin [NOT] IN(valor1, valor2, . . .)

SELECT * FROM Pedidos WHERE Provincia IN ('Madrid', 'Barcelona', 'Sevilla')

LA CLUSULA WHERE

La clusula WHERE puede usarse para determinar qu registros de las tablas enumeradas en la clusula FROM aparecern en los resultados de la instruccin SELECT. Despus de escribir esta clusula se deben especificar las condiciones expuestas en los apartados anteriores. Si no se emplea esta clusula, la consulta devolver todas las filas de la tabla. WHERE es opcional, pero cuando aparece debe ir a continuacin de FROM.

SELECT Apellidos, Salario FROM Empleados WHERE Salario = 21000

SELECT IdProducto, Existencias FROM Productos WHERE Existencias <= NuevoPedido

SELECT * FROM Pedidos WHERE FechaEnvio = #05-30-1994#

SELECT Apellidos, Nombre FROM Empleados WHERE Apellidos = 'King'

SELECT Apellidos, Nombre FROM Empleados WHERE Apellidos LIKE 'S*'

SELECT Apellidos, Salario FROM Empleados WHERE Salario BETWEEN 200 AND 300

SELECT Apellidos, Salario FROM Empleados WHERE Apellidos BETWEEN 'Lon' AND 'Tol'

SELECT IdPedido, FechaPedido FROM Pedidos WHERE FechaPedido BETWEEN #01-01-1994# AND #12-31-1994#

SELECT Apellidos, Nombre, Ciudad FROM Empleados WHERE Ciudad IN ('Sevilla', 'Los Angeles', 'Barcelona')

AGRUPAMIENTO DE REGISTROS

Bases de datos-SQL-Sentencias SQL-Agrupamiento de Registros

GROUP BY Combina los registros con valores idnticos, en la lista de campos especificados, en un nico registro. Para cada registro se crea un valor sumario si se incluye una funcin SQL agregada, como por ejemplo SUM o COUNT, en la instruccin SELECT. Su sintaxis es: SELECT campos FROM tabla WHERE criterio GROUP BY campos del grupo GROUP BY es opcional. Los valores de resumen se omiten si no existe una funcin SQL agregada en la instruccin SELECT. Los valores NULL en los campos GROUP BY se agrupan y no se omiten. No obstante, los valores NULL no se evalan en ninguna de las funciones SQL agregadas. Se utiliza la clusula WHERE para excluir aquellas filas que no desea agrupar, y la clusula HAVING para filtrar los registros una vez agrupados. A menos que contenga un dato Memo u Objeto OLE, un campo de la lista de campos GROUP BY puede referirse a cualquier campo de las tablas que aparecen en la clusula FROM, incluso si el campo no esta incluido en la instruccin SELECT, siempre y cuando la instruccin SELECT incluya al menos una funcin SQL agregada. Todos los campos de la lista de campos de SELECT deben o bien incluirse en la clusula GROUP BY o como argumentos de una funcin SQL agregada.

SELECT IdFamilia, SUM(Stock) AS StockActual FROM Productos GROUP y IdFamilia

Una vez que GROUP BY ha combinado los registros, HAVING muestra cualquier registro agrupado por la clusula GROUP BY que satisfaga las condiciones de la clusula HAVING. HAVING es similar a WHERE, determina qu registros se seleccionan. Una vez que los registros se han agrupado utilizando GROUP BY, HAVING determina cuales de ellos se van a mostrar.

SELECT IdFamilia, SUM(Stock) AS StockActual FROM Productos GROUP y IdFamilia HAVING StockActual > 100 AND NombreProducto LIKE BOS*

AVG Calcula la media aritmtica de un conjunto de valores contenidos en un campo especificado de una consulta. Su sintaxis es la siguiente

AVG(expr)

En donde expr representa el campo que contiene los datos numricos para los que se desea calcular la media o una expresin que realiza un clculo utilizando los datos de dicho campo. La media calculada por AVG es la media aritmtica (la suma de los valores dividido por el nmero de valores). La funcin AVG no incluye ningn campo NULL en el clculo.

SELECT AVG(Gastos) AS Promedio FROM Pedidos WHERE Gastos > 100

COUNT Calcula el nmero de registros devueltos por una consulta. Su sintaxis es la siguiente:

COUNT(expr)

En donde expr contiene el nombre del campo que desea contar. Los operandos de expr pueden incluir el nombre de un campo de una tabla, una constante o una funcin (la cual puede ser intrnseca o definida por el usuario pero no otras de las funciones agregadas de SQL). Puede contar cualquier tipo de datos incluso texto.

Aunque expr puede realizar un clculo sobre un campo, COUNT simplemente cuenta el nmero de registros sin tener en cuenta qu valores se almacenan en los registros. La funcin COUNT no cuenta los registros que tienen campos NULL a menos que expr sea el carcter comodn asterisco (*). Si utiliza un asterisco, COUNT calcula el nmero total de registros, incluyendo aquellos que contienen campos NULL. COUNT(*) es considerablemente ms rpida que COUNT(Campo). No se debe poner el asterisco entre dobles comillas ('*').

SELECT COUNT(*) AS Total FROM Pedidos Si expr identifica a mltiples campos, la funcin COUNT cuenta un registro slo si al menos uno de los campos no es NULL. Si todos los campos especificados son NULL, no se cuenta el registro. Hay que separar los nombres de los campos con ampersand (&).

SELECT COUNT(FechaEnvo & Transporte) AS Total FROM Pedidos

Podemos hacer que el gestor cuente los datos diferentes de un determinado campo

SELECT COUNT(DISTINCT Localidad) AS Total FROM Pedidos

MAX, MIN Devuelven el mnimo o el mximo de un conjunto de valores contenidos en un campo especifico de una consulta. Su sintaxis es:

MIN(expr) MAX(expr)

En donde expr es el campo sobre el que se desea realizar el clculo. Expr pueden incluir el nombre de un campo de una tabla, una constante o una

funcin (la cual puede ser intrnseca o definida por el usuario pero no otras de las funciones agregadas de SQL).

SELECT MIN(Gastos) AS ElMin FROM Pedidos WHERE Pais = 'Espaa'

SELECT MAX(Gastos) AS ElMax FROM Pedidos WHERE Pais = 'Espaa'

STDEV, STDEVP Devuelve estimaciones de la desviacin estndar para la poblacin (el total de los registros de la tabla) o una muestra de la poblacin representada (muestra aleatoria). Su sintaxis es:

STDEV(expr) STDEVP(expr)

En donde expr representa el nombre del campo que contiene los datos que desean evaluarse o una expresin que realiza un clculo utilizando los datos de dichos campos. Los operandos de expr pueden incluir el nombre de un campo de una tabla, una constante o una funcin (la cual puede ser intrnseca o definida por el usuario pero no otras de las funciones agregadas de SQL). STDEVP evala una poblacin, y STDEV evala una muestra de la poblacin. Si la consulta contiene menos de dos registros (o ningn registro para STDEVP), estas funciones devuelven un valor NULL (el cual indica que la desviacin estndar no puede calcularse).

SELECT STDEV(Gastos) AS Desviacin FROM Pedidos WHERE Pas = 'Espaa'

SELECT STDEVP(Gastos) AS Desviacin FROM Pedidos WHERE Pas = 'Espaa'

SUM Devuelve la suma del conjunto de valores contenido en un campo especifico de una consulta. Su sintaxis es:

SUM(expr)

En donde expr representa el nombre del campo que contiene los datos que desean sumarse o una expresin que realiza un clculo utilizando los datos de dichos campos. Los operandos de expr pueden incluir el nombre de un campo de una tabla, una constante o una funcin (la cual puede ser intrnseca o definida por el usuario pero no otras de las funciones agregadas de SQL).

SELECT SUM(PrecioUnidad * Cantidad) AS Total FROM DetallePedido

VAR, VARP Devuelve una estimacin de la varianza de una poblacin (sobre el total de los registros) o una muestra de la poblacin (muestra aleatoria de registros) sobre los valores de un campo. Su sintaxis es:

VAR(expr) VARP(expr)

VARP evala una poblacin, y VAR evala una muestra de la poblacin. Expr el nombre del campo que contiene los datos que desean evaluarse o una expresin que realiza un clculo utilizando los datos de dichos campos. Los operandos de expr pueden incluir el nombre de un campo de una tabla, una constante o una funcin (la cual puede ser intrnseca o definida por el usuario pero no otras de las funciones agregadas de SQL) Si la consulta contiene menos de dos registros, VAR y VARP devuelven NULL (esto indica que la varianza no puede calcularse). Puede utilizar VAR y VARP en una expresin de consulta o en una Instruccin SQL.

SELECT VAR(Gastos) AS Varianza FROM Pedidos WHERE Pas = 'Espaa'

SELECT VARP(Gastos) AS Varianza FROM Pedidos WHERE Pas = 'Espaa'

COMPUTE de SQL-SERVER Esta clusula aade una fila en el conjunto de datos que se est recuperando, se utiliza para realizar clculos en campos numricos. COMPUTE acta siempre sobre un campo o expresin del conjunto de resultados y esta expresin debe figurar exactamente igual en la clusula SELECT y siempre se debe ordenar el resultado por la misma o al memos agrupar el resultado. Esta expresin no puede utilizar ningn ALIAS.

SELECT IdCliente, COUNT(IdPedido) FROM Pedidos GROUP y IdPedido HAVING COUNT(IdPedido) > 20 COMPUTE SUM(COUNT(IdPedido))

SELECT IdPedido, (PrecioUnidad * Cantidad - Descuento) FROM [Detalles de Pedidos] ORDER y IdPedido COMPUTE SUM((PrecioUnidad * Cantidad - Descuento)) // Calcula el Total y IdPedido // Calcula el Subtotal 1.3.3.1. 1.3.3.2. TCNICA DIDCTICA Exposicin del profesor. MATERIAL DE APOYO

1.3.4. ACTIVIDADES DE APRENDIZAJE 1.3.4.1. ACTIVIDAD DE APRENDIZAJE 1 A3-EC1 Sentencias SQL Tablas Multiples 1.3.4.1.1. INSTRUCCIONES Encontrar la solucion SQL para los siguientes planteamientos: 1. Mostrar todas las compras del cliente Germn Gomz Lizalde

2. Mostrar todos los pagos que ha realizado el cliente Jazmn Perez Perez. 3. Mostrar todos los pagos que ha realizado el cliente Jazmn Perez Perez pero solo en su ultimo credito. 4. Mostrar todos los productos en los cuales solo haya 5 piezas o menos. 5. Mostrar el total de ventas del da de hoy.

a) b) c) d) e) f)

Valor actividad: 10 Puntos Producto esperado: 5 sentencias SQL validas para SQL Server 2000 Fecha inicio: Fecha entrega: Forma de entrega: Documento Tipo de Actividad: Individual 1.3.4.1.2. CRITERIO DE EVALUACIN DE LA ACTIVIDAD 1
ACTIVIDAD DESARROLLO Realizar las sentencias SQL, y validarlas con el manejador SQL Server 2000, para cerciorarse de que la respuesta es correcta. Total PONDERACIN

Sentencias SQL Tablas Multiples

10 puntos

10 puntos

1.3.5. RESULTADO DE APRENDIZAJE Comprobar que la sintaxis principalmente de las sentencias SQL es correcta y adems de verificar las ventajas que el lenguaje SQL ofrece. 1.3.6. BIBLIOGRAFA Este manual 1.3.7. DOCUMENTOS Manual SQL Server 2000 Standard final

1.4.

CONSULTAS ANIDADAS O CONSULTAS AVANZADAS O SUBCONSULTAS

1.4.1. OBJETIVO DE APRENDIZAJE Aprender a crear consultas anidadas, para poder realizar tareas mas complajas requeridas para la administracin de una base de datos. 1.4.2. RECURSOTIEMPO DEL TEMA 5 horas. 1.4.3. DESARROLLO

Bases de datos-SQL-Sentencias SQL-Subconsultas

Una subconsulta es una instruccin SELECT anidada dentro de una instruccin SELECT, SELECT...INTO, INSERT...INTO, DELETE, o UPDATE o dentro de otra subconsulta. Puede utilizar tres formas de sintaxis para crear una subconsulta:

Comparacin [ANY | ALL | SOME] (instruccin sql) Expresin [NOT] IN (instruccin sql) [NOT] EXISTS (instruccin sql)

En donde: comparacin Es una expresin y un operador de comparacin que compara la expresin con el resultado de la subconsulta. Es una expresin por la que se busca el conjunto resultante de la subconsulta. Es una instruccin SELECT, que sigue el mismo formato y reglas que cualquier otra instruccin SELECT. Debe ir entre parntesis.

expresin

instruccin SQL

Se puede utilizar una subconsulta en lugar de una expresin en la lista de campos de una instruccin SELECT o en una clusula WHERE o HAVING. En una subconsulta, se utiliza una instruccin SELECT para proporcionar un conjunto de uno o ms valores especificados para evaluar en la expresin de la clusula WHERE o HAVING. Se puede utilizar el predicado ANY o SOME, los cuales son sinnimos, para recuperar registros de la consulta principal, que satisfagan la comparacin con cualquier otro registro recuperado en la subconsulta. El ejemplo siguiente devuelve todos los productos cuyo precio unitario es mayor que el de cualquier producto vendido con un descuento igual o mayor al 25 por ciento:

SELECT * FROM Productos WHERE PrecioUnidad ANY ( SELECT PrecioUnidad FROM DetallePedido WHERE Descuento = 0 .25 )

El predicado ALL se utiliza para recuperar nicamente aquellos registros de la consulta principal que satisfacen la comparacin con todos los registros recuperados en la subconsulta. Si se cambia ANY por ALL en el ejemplo anterior, la consulta devolver nicamente aquellos productos cuyo precio unitario sea mayor que el de todos los productos vendidos con un descuento igual o mayor al 25 por ciento. Esto es mucho ms restrictivo. El predicado IN se emplea para recuperar nicamente aquellos registros de la consulta principal para los que algunos registros de la subconsulta contienen un valor igual. El ejemplo siguiente devuelve todos los productos vendidos con un descuento igual o mayor al 25 por ciento:

SELECT * FROM Productos WHERE IDProducto IN ( SELECT IDProducto FROM DetallePedido WHERE Descuento = 0.25 )

Inversamente se puede utilizar NOT IN para recuperar nicamente aquellos registros de la consulta principal para los que no hay ningn registro de la subconsulta que contenga un valor igual. El predicado EXISTS (con la palabra reservada NOT opcional) se utiliza en comparaciones de verdad/falso para determinar si la subconsulta devuelve algn registro. Supongamos que deseamos recuperar todos aquellos clientes que hayan realizado al menos un pedido:

SELECT Clientes.Compaa, Clientes.Telfono FROM Clientes WHERE EXISTS ( SELECT FROM Pedidos WHERE Pedidos.IdPedido = Clientes.IdCliente )

Esta consulta es equivalente a esta otra:

SELECT Clientes.Compaa, Clientes.Telfono FROM Clientes WHERE IdClientes IN ( SELECT Pedidos.IdCliente FROM Pedidos )

Se puede utilizar tambin alias del nombre de la tabla en una subconsulta para referirse a tablas listadas en la clusula FROM fuera de la subconsulta. El ejemplo siguiente devuelve los nombres de los empleados cuyo salario es igual o mayor que el salario medio de todos los empleados con el mismo ttulo. A la tabla Empleados se le ha dado el alias T1:

SELECT Apellido, Nombre, Titulo, Salario FROM Empleados AS T1 WHERE Salario = ( SELECT AVG(Salario) FROM Empleados WHERE T1.Titulo = Empleados.Titulo ) ORDER y Titulo

En el ejemplo anterior, la palabra reservada AS es opcional.

SELECT Apellidos, Nombre, Cargo, Salario FROM Empleados WHERE Cargo LIKE 'Agente Ven*' AND Salario ALL ( SELECT Salario FROM Empleados WHERE Cargo LIKE '*Jefe*' OR Cargo LIKE '*Director*' )

Obtiene una lista con el nombre, cargo y salario de todos los agentes de ventas cuyo salario es mayor que el de todos los jefes y directores.

SELECT DISTINCT NombreProducto, Precio_Unidad FROM Productos WHERE PrecioUnidad = ( SELECT PrecioUnidad FROM Productos WHERE NombreProducto = 'Almbar anisado' )

Obtiene una lista con el nombre y el precio unitario de todos los productos con el mismo precio que el almbar anisado.

SELECT DISTINCT NombreContacto, NombreCompania, CargoContacto, Telefono FROM Clientes WHERE IdCliente IN ( SELECT DISTINCT IdCliente FROM Pedidos WHERE FechaPedido <#07/01/1993# )

Obtiene una lista de las compaas y los contactos de todos los clientes que han realizado un pedido en el segundo trimestre de 1993.

SELECT Nombre, Apellidos FROM Empleados AS E WHERE EXISTS ( SELECT * FROM Pedidos AS O WHERE O.IdEmpleado = E.IdEmpleado )

Selecciona el nombre de todos los empleados que han reservado al menos un pedido.

SELECT DISTINCT Pedidos.Id_Producto, Pedidos.Cantidad, ( SELECT Productos.Nombre FROM Productos WHERE Productos.IdProducto = Pedidos.IdProducto ) AS ElProducto FROM Pedidos WHERE Pedidos.Cantidad = 150 ORDER y Pedidos.Id_Producto

Recupera el Cdigo del Producto y la Cantidad pedida de la tabla pedidos, extrayendo el nombre del producto de la tabla de productos.

SELECT NumVuelo, Plazas FROM Vuelos WHERE Origen = 'Madrid' AND EXISTS ( SELECT T1.NumVuelo FROM Vuelos AS T1 WHERE T1.PlazasLibres > 0 AND T1.NumVuelo=Vuelos.NumVuelo)

Recupera nmeros de vuelo y capacidades de aquellos vuelos con destino Madrid y plazas libres

Supongamos ahora que tenemos una tabla con los identificadores de todos nuestros productos y el stock de cada uno de ellos. En otra tabla se encuentran todos los pedidos que tenemos pendientes de servir. Se trata de averiguar que productos no se podemos servir por falta de stock.

SELECT PedidosPendientes.Nombre FROM PedidosPendientes GROUP y PedidosPendientes.Nombre

HAVING SUM(PedidosPendientes.Cantidad < (SELECT Productos.Stock FROM Productos WHERE Productos.IdProducto = PedidosPendientes.IdProducto ) )

Supongamos que en nuestra tabla de empleados deseamos buscar todas las mujeres cuya edad sea mayor a la de cualquier hombre:

SELECT Empleados.Nombre FROM Empleados WHERE Sexo = 'M' AND Edad > ANY (SELECT Empleados.Edad FROM Empleados WHERE Sexo ='H')

lo que sera lo mismo:

SELECT Empleados.Nombre FROM Empleados WHERE Sexo = 'M' AND Edad > (SELECT MAX( Empleados.Edad )FROM Empleados WHERE Sexo ='H')

La siguiente tabla muestra algn ejemplo del operador ANY y ALL Valor 1 3 3 3 3 3 Operador > ANY = ANY = ANY > ALL < ALL Valor 2 (2,5,7) (2,5,7) (2,3,5,7) (2,5,7) (5,6,7) Resultado Cierto Falso Cierto Falso Falso

El operacin =ANY es equivalente al operador IN, ambos devuelven el mismo resultado. Para concluir este apartado comentar que: la clusula EXISTS se puede emplear para generar la interseccin entre dos consultas y, por tanto, la clusula NOT EXISTS para generar la diferencia entre consultas 1.4.3.1. 1.4.3.2. TCNICA DIDCTICA Exposicin del profesor. MATERIAL DE APOYO

1.4.4. ACTIVIDADES DE APRENDIZAJE 1.4.4.1. ACTIVIDAD DE APRENDIZAJE 1 A4-ER1 Examen Rpido. 1.4.4.1.1. INSTRUCCIONES Formular 5 preguntas acerca de subconsultas y dictrselas a los alumnos(as) para que se contesten. a) b) c) d) e) f) Valor actividad: 10 Puntos Producto esperado: Contestar preguntas de manera escrita Fecha inicio: Fecha entrega: Forma de entrega: Documento Tipo de Actividad: Individual 1.4.4.1.2. CRITERIO DE EVALUACIN DE LA ACTIVIDAD 1
ACTIVIDAD Examen Rpido de subconsultas DESARROLLO Formular las 5 preguntas de subconsultas y dictrselas a los alumnos para proceder a contestarlas. Total PONDERACIN 10 puntos 10 Puntos

1.4.5. RESULTADO DE APRENDIZAJE Verificar que el tema se este entendiendo, para medir el nivel de aprendizaje y tomar acciones en base a los resultados. 1.4.6. BIBLIOGRAFA Ayuda de SQL Server 2000 1.4.7. DOCUMENTOS Manual SQL Server 2000 Standard final

1.5.

PROCEDIMIENTOS ALMACENADOS

1.5.1. OBJETIVO DE APRENDIZAJE Manejar procedimientos para reducir errores en las acciones provocadas en muchas ocaciones por los usuarios de Bases de Datos. 1.5.2. RECURSOTIEMPO DEL TEMA 6 horas 1.5.3. DESARROLLO

La caracterstica primordial de los procedimientos almacenados es que se optimizan en el momento de su creacin. Esto supone que, a diferencia de lo que sucede con las sentencias SQL que se envan el gestor de manera interactiva, los procedimientos almacenados pasan previamente por un proceso de normalizacin. Cuando se crea un procedimiento almacenado el procesador de consultas del gestor crea una versin del mismo con una cierta estructura normalizada, y la almacena en una de las tablas de sistema. Las siguientes ejecuciones de dicho procedimiento, no necesitarn consumir el tiempo necesario para llevar a cabo este proceso de normalizacin, con lo que su ejecucin ser ms rpida. Por otra parte, cuando el procedimiento se ejecuta por vez primera, se produce su compilacin y la optimizacin del acceso del procedimiento a los datos. Este proceso optimizado se mantiene en memoria para posteriores ejecuciones con el consiguiente ahorro adicional de tiempo y recursos.

Existen dos maneras de crear procedimientos almacenados: utilizando la sentencia CREATE PROCEDURE y mediante Enterprise Manager La sentencia CREATE PROCEDURE La sentencia Transact-SQL que permite crear procedimientos almacenados es CREATE PROCEDURE. Permite crear un procedimiento almacenado a partir de una determinada coleccin de sentencias SQL ligadas por sentencias adicionales de control de flujo La sintaxis de esta sentencia es la siguiente: Sintaxis CREATE PROCEDURE

CREATE PROCEDURE [propietario.] nombre de procedimiento[;nmero] [(lista de parmetros) ] [{FOR REPLICATION} | {WITH RECOMPILE} [{[WITH] | [,]} ENCRYPTION]] AS sentencias SQL

PARAMETROS Como hemos comentado anteriormente, los procedimientos almacenados permiten que su ejecucin pueda ser adaptada a la situacin y mbito en el que sean llamados. Para ello, al igual que las funciones y procedimientos en lenguajes de programacin estructurada, pueden recibir parmetros. As el procedimiento recibir datos diversos en funcin de la situacin en la que la llamada se realice. La definicin de parmetros se lleva a cabo en el momento de la creacin del procedimiento almacenado. Cuando el usuario solicite la ejecucin de un procedimiento definido con parmetros deber suministrar valores para ellos La sintaxis de definicin de un parmetro es la siguiente:

Sintaxis de definicin de parmetros @nombre_de _parmetro tipo_de_datos [= valor por defecto] [OUTPUT]

Puede especificarse un valor por defecto para cada parmetro. La manera de especificar un valor por defecto es colocar despus del nombre de parmetro el signo = seguido por la constante que se utilizar como valor. De igual modo, tambin es posible definir ciertos parmetros como de retorno. Este tipo de parmetros se especifican como cualquier otro, con la salvedad de que sus nombres aparecen seguidos por la palabra clave OUTPUT. Cuando el procedimiento se ejecute devolver en esos parmetros los valores que hayan

tomado en el interior del mismo. Estos valores podrn ser almacenados en variables y utilizados posteriormente.

RECOMPILE: Procedimientos de recompilacin forzosa

Imaginemos que generamos un procedimiento almacenado cuyos parmetros puedan ser de tipos muy diversos. Esto supondr que sea comn que la optimizacin que se ha llevado a cabo en primera instancia, no sea vlida para otras ejecuciones del procedimiento. Por otra parte, es comn que frecuentemente se aadan nuevos ndices que hagan que la optimizacin de la consulta deje tambin de ser vlida. El rendimiento en este tipo de situaciones no es el ms adecuado, pues se ralentizan las operaciones. Es en estos casos necesario que el procedimiento almacenado se recompila cada vez que se ejecuta, desoyendo o

deshabilitando la caracterstica de optimizacin nica que antes hemos presentado. La clusula que permite indicar que el procedimiento debe ser recompilado en cada ejecucin es WITH RECOMPILE

Sentencias SQL del procedimiento almacenado

El cuerpo del procedimiento estar integrado por un conjunto de sentencias SQL que realizarn las tareas que esperamos del mismo y que se especificarn en la definicin del procedimiento siguiendo a la clusula AS En general podemos decir que en un procedimiento almacenado pueden incluirse cualquier nmero y tipo de sentencias Transact SQL. Sin embargo, es necesario comentar algunas restricciones respecto a la creacin de objetos No pueden incluirse las siguientes sentencias CREATE

CREATE VIEW CREATE TRIGGER CREATE DEFAULT CREATE PROCEDURE CREATE RULE

Creacin de procedimientos almacenados mediante Enterprise Manager Hasta este momento hemos presentado la sintaxis de la sentencia Transact SQL que permite crear procedimientos almacenados. A continuacin recordaremos el procedimiento necesario para crear un procedimiento almacenado mediante Enterprise Manager Para ello debern seguirse los siguientes pasos:

Acceder a la ventana Server Manager y al nodo Stored Procedures Una vez accedido pulsar el botn derecho del ratn y elegir la orden de men New Stored PROCEDURE.

Especificar

la

misma

sentencia

de

creacin

de

procedimiento

almacenado que pusimos antes como ejemplo.


Pulsar el botn SAVE Object. En la ventana Server Manager aparecer el nuevo procedimiento almacenado.

Una vez creado el procedimiento, esto es, una vez definido, SQL Server generar el siguiente cdigo.

Cdigo generado tras la creacin del procedimiento

IF EXISTS (SELECT * FROM sysobjects WHERE id = object_id('dbo.infousuarios') AND sysstat & 0xf = 4) DROP PROCEDURE dbo.infousuarios GO CREATE PROCEDURE infousuarios AS SELECT * FROM sysusers GO Las lneas adicionales evitarn que se intenten crear dos procedimientos con el mismo nombre.

ELIMINACIN DE PROCEDIMIENTOS ALMACENADOS

La sentencia DROP PROCEDURE sirve para eliminar del catlogo un procedimiento almacenado y su sintaxis y uso resulta totalmente anlogo a las que se utilizan para eliminar cualquier otro objeto de una base de datos

EJECUCIN DE PROCEDIMIENTOS ALMACENADOS

Una vez se ha creado un procedimiento almacenado, se encontrar en disposicin de ser ejecutado. Si en la primera lnea de una secuencia de sentencias Transact_SQL aparece el nombre de un procedimiento

almacenado, SQL Server lo ejecutar. En el resto de situaciones deberemos utilizar la sentencia EXECUTE Esta sentencia se utiliza para la ejecucin de todo tipo de procedimientos almacenados, tanto de sistema, como de usuario. Por otra parte tambin permite la ejecucin de una cadena de caracteres que contiene una cierta sentencia Transact_SQL Su sintaxis es la siguiente: SINTAXIS EXECUTE PARA PROCEDIMIENTOS ALMACENADOS

EXEC[ute] {[@valor de retorno =]{[[[nombreproc[;num]|@variablenombre} [[@parmetro =] {valor | @variable [OUTPUT]] [, [@parmetro =] {valor | @variable [OUTPUT]}]...] [WITH RECOMPILE]] El procedimiento que se ejecutar es el especificado en nombreproc. El nombre del procedimiento puede estar contenido en una variable como aqu @variablenombre.

VALOR DE RETORNO Como hemos comentado anteriormente, los procedimientos almacenados pueden, opcionalmente devolver un valor. Si esto es as, este valor retornado deber ser almacenado en una variable que en la sintaxis hemos presentado como @valor de retorno.

INFORMACIN RETORNADA POR UN PROCEDIMIENTO ALMACENADO

Los procedimientos almacenados pueden retornar informacin al procedimiento que los llam o al usuario que solicita su ejecucin bsicamente de dos modos:

Mediante el retorno de un valor de estado. Mediante parmetros de retorno. VALOR DE ESTADO (STATUS VALUE)

Es una prctica comn la mayora de lenguajes de programacin el hacer que los procedimientos o funciones retornen un valor que permita testear cual ha sido el modo o resultado con el que la ejecucin de dicha funcin ha concluido. Generalmente dichos valores son definidos de antemano de manera que un mero anlisis del valor de estado permita conocer qu ha sucedido. Los procedimientos almacenados SQL Server devuelven tambin un valor de estado o status value. Este valor puede ser almacenado en una variable de manera que pueda examinarse posteriormente para valorar el xito de su ejecucin o el motivo de su fracaso. Veamos un ejemplo tomando como base la base de datos ESCUELA, con las siguientes tablas:

Devolucin de valor de estado definido por el usuario Este procedimiento devuelve 100 si la calificacin del alumno es menor que 70 y 200 en caso contrario

CREATE PROCEDURE APROBADO AS


IF (SELECT Cal FROM Calificacion WHERE Matricula = 2004001 AND CvMat = 100) > 70

RETURN 100 ELSE RETURN 200 GO Podramos definir un nuevo procedimiento almacenado que utilice a este primero

Utilizacin del procedimiento almacenado Este procedimiento presenta un mensaje indicando si un determinado alumno est aprobado o no, utilizando el procedimiento aprobado

CREATE PROCEDURE MOSTRARMENSAJE AS DECLARE @ValorDeRetorno INT EXECUTE @ValorDeRetorno = APROBADO IF (@ValorDeRetorno = 100) PRINT 'APROBADO' ELSE

PRINT 'REPROBADO' GO

RETORNO DE PARMETROS

En el momento de la creacin y definicin de un procedimiento almacenado puede especificarse que alguno, o todos, los parmetros que dicho procedimiento aceptar sean considerados parmetros de retorno. Veamos un ejemplo de uso de procedimiento almacenado con paso de parmetros PASO DE PARMETROS Este procedimiento realiza la suma de dos variables enteras y devuelve una variable entera como un parmetro de salida.

Este ejemplo solo suma dos numeros enteros y regresa el resultado. CREATE PROCEDURE suma @sum1 int, @sum2 int, @res int OUTPUT AS SELECT @res = @ sum1 + @sum2 RETURN 0 Veamos un ejemplo de utilizacin

Uso de procedimiento almacenado con parmetros

DECLARE @resultado int DECLARE @retorno int

EXECUTE @retorno = suma 2, 2, @resultado OUTPUT En este punto @retorno valdr 0 y @resultado tendr como valor 4.

Este es otro ejemplo con la tabla de Calificacin.

CREATE PROCEDURE PROMEDIO @Matric INT, @Prom FLOAT OUTPUT AS

SELECT @Prom = AVG(Cal) FROM Calificacion WHERE Matricula = @Matric RETURN 0 GO

Y esta seria la Consulta a realizar

DECLARE @Matric FLOAT DECLARE @Prom int EXECUTE @Matric = PROMEDIO 2004001, @Prom OUTPUT PRINT @Prom

1.5.3.1. 1.5.3.2.

TCNICA DIDCTICA Exposicin del profesor. MATERIAL DE APOYO

1.5.4. ACTIVIDADES DE APRENDIZAJE 1.5.4.1. ACTIVIDAD DE APRENDIZAJE 1 A5-EC2 Procedimientos Almacenados. 1.5.4.1.1. INSTRUCCIONES Realizar los siguientes procedimientos almacenados: 1. Cacular las ventas del da de hoy 2. Calcular cuantos pagos ha hecho un cliente.

3. Calcular el total de las compras en un mes.

a) Valor actividad: 10 Puntos b) Producto esperado: Mostrar la sentencia SQL de los procedimientos almacenados anteriores c) Fecha inicio: d) Fecha entrega: e) Forma de entrega: Documento f) Tipo de Actividad: Equipo (3 gentes) 1.5.4.1.2. CRITERIO DE EVALUACIN DE LA ACTIVIDAD 1
DESARROLLO Los alumnos deben de checar la solucion para cada Procedimientos almacenados planteamiento, en SQL Server 2000. y entregar la solucin en papel. Total ACTIVIDAD PONDERACIN

10 puntos

10 puntos

1.5.5. RESULTADO DE APRENDIZAJE Conocer de cerca la utilidad que tienen los procedimientos almacenados. 1.5.6. BIBLIOGRAFA Ayuda de SQL Server 2000 1.5.7. DOCUMENTOS Manual SQL Server 2000 Standard final 1.6. TRIGGERS

1.6.1. OBJETIVO DE APRENDIZAJE Entender la ventaja de manejar ciertas acciones dentro de una base de datos con procedimientos de disparo (autoejecutables). 1.6.2. RECURSOTIEMPO DEL TEMA 7 horas 1.6.3. DESARROLLO Un TRIGGER no es ms que un tipo especial de procedimiento almacenado. En lugar de ejecutarse como respuesta a una llamada, se ponen en funcionamiento automticamente como respuesta a ciertas modificaciones de los datos, cuya naturaleza se especifica en el momento de la creacin del TRIGGER.

La utilidad de los TRIGGERS es mltiple. Quiz la ms ampliamente utilizada es la de establecer reglas de consistencia entre los datos presentes en las diferentes tablas de nuestra base de datos. Los TRIGGERS son una herramienta poderosa para centralizar en la base de datos la toma de las decisiones de negocio que se asocian a los datos de la misma. De esta manera se descarga en gran medida a las aplicaciones cliente de la tarea de revisar las acciones de actualizacin de datos. Como hemos dicho, las acciones que motivarn que un TRIGGER se ponga en ejecucin, es decir aquellas acciones que disparan el TRIGGER, son modificaciones que puedan llevarse a cabo en los datos, tanto la adicin de datos nuevos como la eliminacin de datos existentes. Dichas modificaciones se llevan a cabo, evidentemente, mediante la ejecucin de las sentencias UPDATE, DELETE o INSERT. Supongamos el caso en el que existan dos tablas Existencias y Ventas de manera que cada vez que se produce una nueva venta deben actualizarse las unidades que an quedan en existencias. La solucin a este problema, si se sigue la filosofa de toma de decisiones mediante TRIGGERS que Microsoft recomienda utilizar con SQL Server, es dejar que sea la propia base de datos la que se encargue de realizar las actualizaciones de manera automtica. Es posible definir un TRIGGER que realice las tareas descritas y que se ponga en ejecucin inmediatamente despus a la operacin de borrado o insercin. As, cuando dicha accin de modificacin se complete, el TRIGGER adecuado se disparar. Pueden definirse TRIGGERS que respondan a una o varias de estas acciones, es decir, puede definirse un TRIGGER que responda tanto a una operacin INSERT, como a una DELETE. De este modo, los TRIGGERS pueden utilizarse para resolver, entre otras, las siguientes situaciones:

Preservar la integridad referencial. En el caso en que dos o ms tablas en una base de datos se hallen ligadas por claves ajenas no ser posible modificar datos en la tabla primaria sin modificar aquellos que se

hallen vinculados a l en la tabla subordinada. Utilizando TRIGGERS podemos controlar este proceso forzando a que los registros dependientes sean eliminados cuando llevamos a cabo un DELETE en la tabla principal.

Establecimiento

de

condiciones

complejas:

Los

TRIGGERS

permiten, como veremos ms adelante, especificar condiciones para que los datos de una o varias columnas sean considerados vlidos.

Respuesta a cambios de estado de la tabla: Los TRIGGERS permiten examinar el estado de la tabla antes y despus de que una determinada tarea de modificacin haya sido llevada a cabo y obrar en consecuencia.

La sentencia Transact-SQL que permite crear TRIGGERS es CREATE TRIGGER. SINTAXIS CREATE TRIGGER

CREATE TRIGGER [propiet.] nombretrigger ON [propiet.]nombretabla FOR {INSERT, UPDATE, DELETE} [WITH ENCRyPTION] AS sentenciasSQL Acciones que desatan la ejecucin del TRIGGER El TRIGGER se ejecuta como respuesta a la aplicacin de ciertas sentencias de modificacin sobre la tabla asociada al mismo. Estas sentencias se especifican en la clusula FOR UPDATE/INSERTDELETE Cuando se lleven a cabo la o las acciones que se especifiquen en la definicin del TRIGGER sobre la tabla, las sentencias que lo conforman se ejecutarn. De esta manera, pueden definirse hasta tres TRIGGERS diferentes para cada tabla, uno por cada accin INSERT, UPDATE o DELETE. En cualquier caso, es posible especificar en un slo TRIGGER, cualquier combinacin de las tres acciones disponibles.

SENTENCIAS SQL DEL TRIGGER

El cuerpo del TRIGGER constar de una serie de sentencias SQL que realizarn las tareas que esperamos del mismo y una serie de condiciones que determinarn de manera adicional si las acciones del TRIGGER deben ser llevadas o no cabo. En general podemos decir que en un TRIGGER, como en cualquier procedimiento almacenado, pueden incluirse cualquier nmero y tipo de sentencias Transact SQL. Sin embargo, y por su propia naturaleza, la de responder a una accin ejecutando otras, no es posible incluir en las sentencias del TRIGGER la sentencia SELECT. No son estas las nicas restricciones aplicables a las sentencias ejecutables en un TRIGGER. Concretamente las siguientes sentencias no pueden utilizarse.

Sentencias de creacin: No puede incluirse ninguna sentencia CREATE.

Sentencias de eliminacin de objetos: No pueden eliminarse objetos, por lo que no est permitido utilizar ninguna de las sentencias de la familia DROP

Sentencias de modificacin de objetos: No puede alterarse la estructura de tablas ni bases de datos mediante las sentencias ALTER DATABASE, ALTER TABLE

Sentencias de borrado de filas: No puede utilizarse la sentencia TRUNCATE TABLE para borrar todas las filas de una tabla.

Permisos: No pueden otorgarse ni retirarse permisos, por lo que no son utilizables GRANT y REVOKE

Veamos un ejemplo de un sencillo TRIGGER que presenta un mensaje cada vez que se aade un nuevo autor a la tabla authors de la base de datos pubs

CREACIN DE TRIGGERS MEDIANTE ENTERPRISE MANAGER

Tambin es posible crear TRIGGERS mediante Enterprise Manager. A pesar de ser un objeto ms de la base de datos, los TRIGGERS no aparecen en la

ventana Server Manager, por lo que debern ser creados utilizando opciones de men. Concreatamente debern seguirse los siguientes pasos:

Pulsar el men Manage TRIGGERS, una vez seleccionada en la ventana Server Manager una base de datos.

Seleccionar la tabla a la que se desee asociar un TRIGGER, de la lista desplegable adjunta.

Escoger New Escribir las sentencias de creacin del TRIGGER ELIMINACIN DE TRIGGERS

Para eliminar un TRIGGER puede utilizarse la sentencia DROP TRIGGER, anlogamente al resto de objetos. Puede eliminarse ms de un TRIGGER de manera simultnea pasando a la sentencia sus nombres separados por comas. SINTAXIS DROP TRIGGER DROP TRIGGER [prop.]nombretrigger1 [, [prop.]nombretrigger2...]

Utilizacin de TRIGGERS para validar actualizaciones de tablas

Una de las principales utilidades de los TRIGGERS es la de controlar que las operaciones de actualizacin que se llevan a cabo sobre una tabla sean coherentes. De este modo podemos centralizar en la base de datos los procesos de validacin de datos, tanto al aadir nuevos registros como en su eliminacin.

Las tablas Inserted y Deleted En multitud de ocasiones las operaciones de actualizacin de la tabla que suponen insercin y borrado de filas se llevan a cabo en cadena, normalmente por la propia naturaleza de las sentencias implicadas.

En este tipo de situaciones el TRIGGER que deba responder a estas acciones puede necesitar valorar qu cambios se han producido sobre la tabla de manera que se pueda obrar en consecuencia. Para ello se necesitara disponer de algn modo de informacin del estado de la tabla antes y despus de las modificaciones efectuadas. Para ello SQL Server proporciona dos tablas temporales denominadas Para conocer el nmero de filas modificadas por una sentencia de actualizacin determinada es posible acudir a la variable global @@rowcount. Esta variable contiene el nmero de filas modificadas. INSERCIN MLTIPLE La tabla inserted almacena una copia de las filas que se han aadido durante la ejecucin de una sentencia INSERT o UPDATE sobre una tabla que tiene asociado un TRIGGER. BORRADO MLTIPLE La tabla deleted almacena una copia de las filas eliminadas durante una sentencia DELETE o UPDATE. Evidentemente, una vez realizada la loperacin de borrado, las filas desaparecern de la tabla asociada al TRIGGER y slo aparecern en la tabla deleted TRIGGERS y TRANSACCIONES Los TRIGGERS pueden descartar las transacciones en el marco de las cuales se ejecutan. Es decir, los TRIGGERS pueden ser ejecutados en respuesta a una accin que se haya inmersa en una transaccin. Si uno de estos TRIGGERS contiene la sentencia ROLLBACK TRANSACTION, que

recordemos tiene como resultado el descartar las operaciones realizadas en la transaccin en curso, la transaccin completa en la que dicho TRIGGER se ejecuta ser descartada. Veamos un ejemplo en que la operacin UPDATE tiene asociado un TRIGGER que, por cualquier circunstancia que no nos detendremos a concretar, provoca

que la transaccin en curso sea descartada mediante ROLLBACK. En el ejemplo que sigue la operacin INSERT no se ejecutar, pues la transaccin se dar por finalizada despus de la sentencia UPDATE.

TRANSACCIONES y TRIGGERS

BEGIN TRANSACTION UPDATE alumnos SET nota = nota + 1 WHERE notapracticas = 10 INSERT alumnos VALUES ('Javier Mrquez', Grupo3, 5.5, 6.3, '6/11/96') END TRANSACTION

UN EJEMPLO COMPLETO Para ilustrar los conceptos expuestos en este artculo vamos a presentar un pequeo ejemplo en el que se utilizan tanto procedimientos almacenados como TRIGGERS. Nos proponemos informatizar una biblioteca creando una base de datos que mantenga informacin de los volmenes existentes en su fondo, de los socios inscritos y de los prstamos efectuados. Evidentemente, nuestro objetivo es simplemente ilustrar el sentido y necesidad de procedimientos almacenados y TRIGGERS por lo que el diseo se ha simplificado al mximo evitando cualquier tipo de consideracin sobre el modelo de datos. CREACIN DE LA BASE DE DATOS El primer paso ser definir siquiera burdamente las tablas necesarias. Del ms sencillo anlisis resulta que es necesario, al menos, definir una tabla libros, una segunda autores, una tercera socios, y una cuarta prestamos, que servir para almacenar cada accin de prstamo que se lleve a cabo.

La definicin de las tablas podemos realizarla mediante Enterprise Manager o utilizando sentencias Transact SQL. Por simplicidad haremos uso de las herramientas visuales de Enterprise Manager, tal y como podemos ver en la figura A.6. Las sentencias Transact_Sql mnimas equivalentes seran

Tabla libros:

CREATE TABLE libros (registro smallint signatura char(20), titulo varchar(50), nombreautor varchar(50) editorial varchar(20), fechaentrada datetime)

Tabla autores:

CREATE TABLE autores (idautor smallint nombreautor varchar(50), nacionalidad varchar(20))

Tabla socios:

CREATE TABLE socios

(idsocio smallint nombresocio varchar(50), edad smallint, direccion varchar(20), telfono varchar(10))

Tabla prestamos:

CREATE TABLE prestamos (idprestamo smallint idautor smallint, idsocio smallint, fechaprestamo datetime)

DEFINICIN DE PROCEDIMIENTOS ALMACENADOS

Se supone que la base de datos estar disponible al pblico que visite la biblioteca para que puedan consultar por su cuenta, por ejemplo, los libros de un determinado autor. La manera de hacer posibles estas consultas generalmente ser mediante la programacin de una pequea aplicacin cliente que enviar a SQL Server las peticiones de datos. Parece evidente que la consulta Libros de un autor ser muy frecuente, de manera que ser adecuado y adecuado definir en la base de datos un procedimiento almacenado que reciba como argumento el nombre del autor del que se desea conocer su obra completa. Este procedimiento se almacenar en SQL Server y su ejecucin ser solicitada por las aplicaciones cliente,

obteniendo un rendimiento mejor al que puede obtenerse con la simple realizacin de la consulta. Veamos una posible implementacin de este procedimiento.

Procedimiento ObraPorAutor

CREATE PROCEDURE ObraPorAutor @nautor varchar(50) AS SELECT titulo, editorial, cantidad FROM libros WHERE nombreautor = @nautor

DEFINICIN DE TRIGGERS

Existen mltiples situaciones en las que en este ejemplo sera interesante definir un TRIGGER. Una primera muestra sera la del control de prstamo. Imaginemos que deseamos evitar que cada socio pueda tener ms de un libro simultneamente en su poder. Cada vez que se realiza un prstamo nuevo la aplicacin cliente solicitar la insercin de una nueva fila en la tabla de prstamos. Podramos escribir un TRIGGER que tras cada insercin en esta tabla, buscase si existe alguna otra fila en la misma que corresponda a un prstamo al mismo socio, y que eliminase el nuevo prstamo si ya exista uno an no terminado. La aplicacin cliente podra recibir informacin en la que examinase si la insercin se haba realizado correctamente y presentar, si as se desea un mensaje explicativo. Pero, lo que es ms importante, los datos de la base de datos seran coherentes. Veamos este ejemplo:

Insercin condicional de un prstamo

CREATE TRIGGER prestamocondicional ON prestamos FOR INSERT AS IF (SELECT COUNT(*) FROM prestamos, inserted WHERE prestamos.idsocio = inserted. idsocio ) <> @@rowcount BEGIN DELETE * FROM prestamos WHERE prestamos. idprestamo = inserted. idprestamo END Otra posibilidad es la de gestionar la correspondencia entre la tabla libros y la tabla autores cuando se da de baja un ejemplar por prdida, sustraccin o cualquier otra circunstancia. En este caso el TRIGGER deber examinar, tras la eliminacin de un libro, si existe el autor del libro eliminado tiene an algn volumen en el fondo de la biblioteca, eliminando su entrada en la tabla autores si no es as. El TRIGGER sera similar al siguiente:

Eliminacin condicional de un autor

CREATE TRIGGER comprobarautor ON libros FOR DELETE AS IF

(SELECT COUNT(*) FROM libros WHERE libros.idautor = deleted. idautor ) > 0 BEGIN DELETE * FROM autores WHERE autores. idautor = deleted. idautor END Otro ejemplo con la base de datos ESCUELA, que se activa cada vez que deseo ingresar una calificacin nueva. Lo que que hace es checar si no hay alguna calificacin para ese alumno y esa misma matricula. CREATE TRIGGER ACTUALIZACAL ON Calificacion FOR INSERT AS IF (SELECT COUNT(Calificacion.Cal) FROM Calificacion, inserted WHERE Calificacion.Matricula = inserted.Matricula AND Calificacion.CvMat = inserted.CvMat) > 0 BEGIN DELETE FROM Calificacion WHERE Calificacion.Matricula = inserted.Matricula AND Calificacion.CvMat = inserted.CvMAt END

Cmo crear un desencadenador (Administrador corporativo)

Para crear un desencadenador 1. Expanda un grupo de servidores y, a continuacin, un servidor. 2. Expanda Bases de datos, expanda la base de datos a la que pertenece la tabla que va a contener el desencadenador y, a continuacin, haga clic en Tablas. 3. En el panel de detalles, haga clic con el botn secundario del mouse en la tabla en la que va a crear el desencadenador, seleccione Todas las tareas y haga clic en Administrar desencadenadores. 4. En el cuadro Nombre, haga clic en <nuevo>. 5. En el cuadro Texto, escriba el texto del desencadenador. Utilice Ctrl+Tab para aplicar una sangra al texto de un desencadenador. 6. Para comprobar la sintaxis, haga clic en Comprobar la sintaxis.

EJEMPLO: tomando como base el siguiente esquema

El siguiente TRIGGER lo que hace es disminuir las existencias en base a la cantidad de producto vendido.

CREATE TRIGGER Inventario ON VentaProducto FOR INSERT AS DECLARE @Cant INTEGER DECLARE @Exis INTEGER DECLARE @ClaveP INTEGER SELECT @Cant = Cantidad, @ClaveP = CvProd FROM VentaProducto SELECT @Exis = Existencias FROM Producto WHERE CvProd = @ClaveP

BEGIN
UPDATE Producto SET Existencias = @Exis- @cant WHERE CvProd = @ClaveP

END 1.6.3.1. 1.6.3.2. TCNICA DIDCTICA Exposicin del profesor. MATERIAL DE APOYO

1.6.4. ACTIVIDADES DE APRENDIZAJE 1.6.4.1. ACTIVIDAD DE APRENDIZAJE 1 A6-EC3 Procedimientos de disparo 1.6.4.1.1. INSTRUCCIONES Indicar la instruccin de los siguientes TRIGGERS: 1. Un disparo que actualice las Existencias de Producto con le realizacin de una venta. 2. Un disparo que actualice las Existencias de Producto con le realizacin de una compra. a) Valor actividad: 10 Puntos b) Producto esperado: Sentencias SQL de los dos plateamientos propuestos c) Fecha inicio: d) Fecha entrega: e) Forma de entrega: Documento f) Tipo de Actividad: Equipo (3 gentes) 1.6.4.1.2. CRITERIO DE EVALUACIN DE LA ACTIVIDAD 1
ACTIVIDAD Procedimientos de disparo DESARROLLO Entregar en papel la solucion y corroborar que funcionen con SQL Server 2000. Total PONDERACIN 10 puntos 10 puntos

1.6.5. RESULTADO DE APRENDIZAJE Validar cuestiones de integridad de datos y aprender a validar ciertas reglas de negocio que se pueden presentar. 1.6.6. BIBLIOGRAFA Ayuda de SQL Server 2000 1.6.7. DOCUMENTOS Manual SQL Server 2000 Standard final

1.7.

VISTAS

1.7.1. OBJETIVO DE APRENDIZAJE Aprender a crear Tablas Virtuales, las cuales son de mucha ayuda para ciertas necesidades. 1.7.2. RECURSOTIEMPO DEL TEMA 6 horas 1.7.3. DESARROLLO

La definicin ms simple de una vista es la que nos dice que una vista es una consulta a la que se da un nombre. Una vista es una tabla virtual que nos permite alcanzar tres objetivos: La confidencialidad de la informacin La transparencia de la estructura interna de la BD El control de las restricciones de integridad

Se denomina virtual porque no tiene existencia propia; ella parece y se comporta como una tabla para el usuario, pero consiste a nivel interno en una sentencia SQL, que esta catalogada en el diccionario de datos. Una vez que la vista se ha detenido, se puede acceder a ella exactamente igual que si fuese una tabla para ver su estructura o para seleccionar los datos que contiene. El mayor problema asociado a las vistas es determinar cuando los datos de una vista se pueden actualizar (insertar, borrar o modificar filas). Las tablas indicadas en la consulta que define una vista se denominan tablas base, y pueden a su vez ser vistas.

Puede utilizar las vistas para simplificar las consultas. Un modelo de datos normalizado puede estar formado por muchas tablas. Si los usuarios finales estn autorizados a consultar los datos de forma interactiva, probablemente desee simplificar el modelo de datos, incluso si los usuarios utilizan potentes herramientas de anlisis. Una simplificacin habitual consiste en realizar una combinacin en la definicin de la vista. En lugar de que el usuario realice la combinacin cada vez que escriba una consulta, trabajara utilizando una vista.

La sentencia utilizada para crear una vista es CREATE VIEW, cuya sintaxis general se muestra a continuacin.

CREATE VIEW nombre vista AS sentencia SELECT

Como ejemplo creamos una vista que encuentre todos los alumnos que cursan una materia de Ingles.

CREATE VIEW dbo.vista1 AS


SELECT Alumno.Nombre AS Alumno, Materia.Nombre AS Materia, Calificacin

FROM

Alumno INNER JOIN Calificacion

ON Alumno.Matricula = Calificacion.Matricula INNER JOIN Materia ON Calificacion.CvMat = Materia.CvMat WHERE Materia.Nombre = 'Ingles'

CONSULTA A TRAVS DE UNA VISTA

SELECT * FROM vista1 WHERE Alumno = 'xxxx'

La consulta anterior toma a la vista como una tabla propia de la Base de Datos, aunque en realidad no lo es, lo que paso fue que al momento de ejecutar la vista se creo una tabla virtual.

La sentencia utilizada para eliminar una vista es DROP VIEW, cuya sintaxis general se muestra a continuacin.

DROP VIEW nommbre_vista

La sentencia utilizada para modificar una vista es ALTER VIEW, cuya sintaxis es idntica a la sintaxis de la instruccin CREATE VIEW.

Ejemplo para modificar la vista1 creada arriba.

ALTER VIEW vista1 AS


SELECT Alumno.Nombre AS Alumno, Materia.Nombre AS Materia, Calificacin

FROM

Alumno INNER JOIN Calificacion

ON Alumno.Matricula = Calificacion.Matricula INNER JOIN Materia ON Calificacion.CvMat = Materia.CvMat WHERE Materia.Nombre = 'Fisica'

1.7.3.1. 1.7.3.2.

TCNICA DIDCTICA Exposicin del profesor. MATERIAL DE APOYO

1.7.4. ACTIVIDADES DE APRENDIZAJE 1.7.4.1. ACTIVIDAD DE APRENDIZAJE 1 A7-EC4 Vistas 1.7.4.1.1. INSTRUCCIONES Elaborar las siguientes vistas: 1. Crear una vista de los productos que surte un poroveedor. 2. Una vista para los pagos de los clientes por cada venta a credito

a) b) c) d) e) f)

Valor actividad: 10 Puntos Producto esperado: Dos tablas virtuales Fecha inicio: Fecha entrega: Forma de entrega: Documento Tipo de Actividad: Equipo (3 gentes) 1.7.4.1.2. CRITERIO DE EVALUACIN DE LA ACTIVIDAD 1
ACTIVIDAD Vista DESARROLLO Las sentencias deben de ser entregadas en papel y deben de ser corroboradas en SQL Server 2000 Total PONDERACIN 10 puntos 10 Puntos

1.7.5. RESULTADO DE APRENDIZAJE Hay ocasiones en que tenemos que crear una consulta y despus con los valores obtenidos de esta consulta se realizan otras acciones, este problema se puede solucionar con subconsultas, pero el que se utilicen Vistas nos da la posibilidad de poder manejar los resultados de esa consulta como una tabla virtual, precisamente esto se espera de este tema. 1.7.6. BIBLIOGRAFA Ayuda SQL Server 2000 1.7.7. DOCUMENTOS Manual SQL Server 2000 Standard final

UNIDAD TEMATICA 2. INTEGRIDAD DE DATOS y MANEJO DE INDICES INTEGRIDAD: consistencia o correccin de datos en la base de datos. Las reglas de integridad (RI) no son especficas para cada usuario.

1. Nos interesan las reglas de integridad especficas de una BD (reglas del negocio), adems de RI Entidad, RI Referencial... 2. Veremos las RI definidas sobre relaciones base, por estar restringidas a contener datos correctos (reflejar la realidad).

Veremos las RI definidas sobre relaciones base, por estar restringidas a contener datos correctos (reflejar la realidad). La regla los ttulos de las pelculas son nicos se aplica a la tabla base PELICULA, y a cualquier vista definida sobre sta Podemos definir RI sobre relaciones derivadas (sobre vistas)?

Sera deseable La vista heredara toda RI de sus relaciones base y podra aadir nuevas (clave candidata nueva para la vista, p.ej.)

Solo consideraremos RI sobre relaciones base (por simplicidad)

3. Nos interesa soporte de RI declarativo

No hablaremos de...

Procedimientos almacenados (stored procedures), ni de Procedimientos disparados (triggered procedures)

4. Una BD en un estado de integridad es correcta si:

No viola ninguna RI conocida por el SGBD, es decir, satisface AND lgico de todas las RI definidas en su esquema.

5. La integridad es importante en...


DISEO (estructuras de datos y reglas de integridad adecuadas) EJECUCIN (correccin de la informacin)

6. RI son mantenidas en el Catlogo del Sistema

El Subsistema de Integridad del SGBD:

Controla operaciones de usuario (INSERT,UPDATE,DELETE...) para asegurar que NO violan las reglas de integridad

COMPONENTES DE UNA REGLA DE INTEGRIDAD

A. Nombre

Regla almacenada en el Catlogo del Sistema bajo ese nombre. Aparecer en diagnsticos, producidos por el sistema como respuesta a intentos de violacin de la regla (mensajes de error al usuario)

B. Restriccin NOT EXISTS (SELECT * FROM ACTOR WHERE cache <= 0)


Expresin booleana. La regla

o Se satisface, la restriccin es TRUE o Es violada, la restriccin es FALSE

C. Respuesta a un intento de violacin de la regla Indica al SGBD qu hacer si se intenta una operacin que viola la RI Por defecto RECHAZAR (o rehusar) que implica... o Deshacer los posibles daos causados por la operacin o Mostrar informacin de diagnstico (mensaje) Podra ser un procedimiento de complejidad arbitraria: tratarErr(...)

CREACIN, DESTRUCCIN Y TIPOS DE REGLAS DE INTEGRIDAD

A. Creacin de una regla de integridad... (en cualquier momento) El SGBD comprueba: el estado actual de la BD satisface RI? S RI aceptada o El sistema la almacena en el catlogo o La regla es activada (entra en vigor) SGBD controlar todo INSERT y UPDATE de cach en ACTOR No RI rechazada

B. Destruccin de reglas de integridad El sistema elimina su definicin del catlogo

Las RIs pueden restringir los valores legales de... Dominio Atributo Relacin Base de Datos

2.1.

TIPOS DE INTEGRIDAD DE DATOS

2.1.1. OBJETIVO DE APRENDIZAJE Conocer las diferentes formas de integridad de datos que existen, para evitar por ejemplo redundancia de informacin o ausencia de la misma.

2.1.2. RECURSO TIEMPO DEL TEMA 1 hora 2.1.3. DESARROLLO RESTRICCIONES, REGLAS, VALORES PREDETERMINADOS Y DESENCADENADORES Las columnas de tablas tienen otras propiedades adems del tipo y el tamao de los datos. Estas propiedades forman una parte importante en la garanta de la integridad de los datos de una base de datos.

La integridad de los datos significa que todas las apariciones de una columna tienen un valor de datos correcto. Los valores de los datos tienen que ser del tipo de datos correcto y se tienen que encontrar en el dominio definido.

La integridad referencial indica que las relaciones entre las tablas se tienen que mantener de la forma adecuada. Los datos de una tabla slo tienen que apuntar a filas existentes de otra tabla; no pueden apuntar a filas inexistentes.

Los objetos que se utilizan para mantener ambos tipos de integridad son:

Restricciones Reglas Valores predeterminados Desencadenadores

La integridad de los datos garantiza la calidad de los datos de la base de datos. Por ejemplo, si se especifica para un empleado el valor de Clave de Empleado = 123, la base de datos no debe permitir que ningn otro empleado tenga el mismo valor de identificador. Si tiene una columna Sueldo para la que se prevea valores entre el $1,500.00 y el $5,00.00 la base de datos no debe

aceptar el valor $6,000.00. Si en la tabla hay una columna NumDep en la que se almacene el nmero de departamento del empleado, la base de datos slo debe permitir valores que correspondan a los nmeros de departamento de la compaa. Dos pasos importantes en el diseo de las tablas son la identificacin de valores vlidos para una columna y la determinacin de cmo forzar la integridad de los datos en la columna. Estas son las categoras de integridad de datos:

Integridad de entidad Integridad de dominio Integridad referencial Integridad definida por el usuario

Integridad de entidad La integridad de entidad define una fila como entidad nica para una tabla determinada. La integridad de entidad fuerza la integridad de la columna o columnas de los identificadores o la clave principal de una tabla (mediante ndices, restricciones UNIQUE, restricciones PRIMARY KEY o propiedades IDENTITY). Integridad de dominio La integridad de dominio viene dada por la validez de las entradas para una columna determinada. Puede forzar la integridad de dominio si restringe el tipo (mediante tipos de datos), el formato (mediante las reglas y las restricciones CHECK), o el intervalo de valores posibles (mediante restricciones FOREIGN KEY, restricciones CHECK, definiciones DEFAULT, definiciones NOT NULL y reglas). Integridad referencial La integridad referencial protege las relaciones definidas entre las tablas cuando se crean o se eliminan registros. En Microsoft SQL Server, 2000 la integridad referencial se basa en las relaciones entre claves externas y claves principales o entre claves externas y claves exclusivas (mediante restricciones

FOREIGN KEY, restricciones CHECK). La integridad referencial garantiza que los valores clave sean coherentes en las distintas tablas. Para conseguir esa coherencia, es preciso que no haya referencias a valores inexistentes y que, si cambia el valor de una clave, todas las referencias a ella se cambien en consecuencia en toda la base de datos. Cuando se fuerza la integridad referencial, SQL Server impide a los usuarios:

Agregar registros a una tabla relacionada si no hay ningn registro asociado en la tabla principal.

Cambiar valores en una tabla principal de manera que queden registros hurfanos en una tabla relacionada.

Eliminar registros de una tabla principal cuando hay registros relacionados coincidentes.

Por ejemplo, con las tablas Calificacin y Alumno de la base de datos ESCUELA, la integridad referencial se basa en la relacin entre la clave externa (Matricula) de la tabla Calificacin y la clave principal (Matricula) de la tabla Alumno.

Integridad definida por el usuario La integridad definida por el usuario le permite definir reglas de la compaa especficas que no pertenecen a ninguna otra categora de integridad. Todas las categoras de integridad son compatibles con la integridad definida por el usuario (todas las restricciones en columnas y tablas de CREATE TABLE, procedimientos almacenados y desencadenadores).

Ejemplo de una restriccin CHECK

El sueldo de un Docente debe ser mayor que 1000 y menor a 5000.

CREATE TABLE Docente ( Folio SMALLINT IDENTITY(1,1) PRIMARY KEY CLUSTERED, Nombre VARCHAR(50) NOT NULL

DEFAULT 'xxx', Sueldo FLOAT NOT NULL CHECK (Sueldo >= 1000 AND Sueldo <=5000) )

//explicacion de la restriccion CREATE TABLE Docente Crea la tabla Docente Folio SMALLINT IDENTITY(1,1) PRIMARY KEY CLUSTERED, Crea el campo Folio de tipo SMALLINT, IDENTITY crea una columna de identidad en una tabla. Esta propiedad se utiliza con las instrucciones CREATE TABLE y ALTER TABLE de Transact-SQL.

Sintaxis IDENTITY [ ( seed , increment ) ] Argumentos

seed
Es el valor que se utiliza para la primera fila cargada en la tabla.

Increment.

Se trata del valor incremental que se agrega al valor de identidad de la anterior fila cargada. Es necesario especificar la inicializacin y el incremento, o no especificar ninguno de los dos. Si no se especifica ninguno, el valor predeterminado es (1,1). PRIMARY KEY CLUSTERED es una restriccin que exige la integridad de entidad para una o varias columnas dadas a travs de un ndice nico. Slo se puede crear una restriccin PRIMARY KEY por cada tabla y CLUSTERED indica que se ha creado un indice agrupo (En temas posteriores se vera el tema de indices). Nombre VARCHAR(50) NOT NULL

DEFAULT 'xxx', Crea otro campo mas a la tabla que se llama Nombre el cual es de tipo

VARCHAR con 50 espacios, NOT NULL indica que el valor de este campo no puede ser nulo, DEFAULT xxx El valor por default que se le da al campo.

Sueldo FLOAT NOT NULL CHECK (Sueldo >= 1000 AND Sueldo <=5000) Crea otro campo que se llama Sueldo de tipo FLOTA no nulo,

CHECK(Sueldo >= 1000 AND Sueldo <=5000) indica que el valor de este campo tendra que ser mayor o igual que 1000 y menor o igual que 5000, lo que significa que esta institucin no paga menos de 1000 y no paga mas de 5000.

INTEGRIDAD DE ENTIDAD Restricciones UNIQUE

Si no se especifica CLUSTERED o NONCLUSTERED para una restriccin UNIQUE, de forma predeterminada se utiliza NONCLUSTERED.

Cada restriccin UNIQUE genera un ndice. El nmero de restricciones UNIQUE no puede hacer que el nmero de ndices de la tabla exceda de 249 ndices no agrupados y 1 ndice agrupado.

Utilizando la restriccin UNIQUE (Me limitare en los siguientes ejemplos a solo explicar el significado de las instrucciones nuevas...)

CREATE TABLE Empleado ( Clave SMALLINT PRIMARY KEY, Nombre VARCHAR(50) NOT NULL, Puesto VARCHAR(15) NOT NULL UNIQUE )

Puesto VARCHAR(15) NOT NULL UNIQUE, esta linea lo que provoca es que el valor del campo Puesto no se repita. En este ejemplo tambien se realiza la restriccin PRIMARY KEY, la cual indica que el campo Clave es la llave de la tabla Empleado.

INTEGRIDAD DE DOMINIO

Las definiciones DEFAULT se pueden:

Crear cuando se crea la tabla, durante el proceso de definicin de la misma.

Agregar a una tabla ya existente. Cada columna de una tabla puede contener una sola definicin DEFAULT.

Modificar o eliminar, si ya existen definiciones DEFAULT. Por ejemplo, puede modificar el valor que se inserta en una columna cuando no se escribe ningn valor.

Nota Para modificar una definicin DEFAULT mediante TransactSQL o SQL-DMO, antes deber eliminar la definicin DEFAULT existente y, a continuacin, volver a crearla con la nueva definicin. No se puede crear definiciones DEFAULT para columnas definidas con:

Un tipo de datos timestamp. Una propiedad IDENTITY o ROWGUIDCOL. Una definicin DEFAULT o un objeto DEFAULT ya existentes.

Nota El valor predeterminado debe ser compatible con el tipo de datos de la columna a la que se aplica la definicin DEFAULT. Por ejemplo, el valor predeterminado para una columna int debe ser un nmero entero, no una cadena de caracteres. Cuando se agrega una definicin DEFAULT a una columna existente en una tabla, Microsoft SQL Server 2000 aplica de forma predeterminada el nuevo valor predeterminado slo a las nuevas filas de datos que se agregan a la tabla; los datos existentes que se insertan mediante la definicin DEFAULT anterior no se ven afectados. No obstante, cuando agregue una nueva columna a una tabla ya existente, puede especificar que SQL Server inserte en la nueva columna el valor predeterminado (especificado mediante la definicin DEFAULT) en vez de un valor NULL para las filas existentes en la tabla. Cuando elimine una definicin DEFAULT, SQL Server insertar un valor NULL en vez del valor predeterminado si no se inserta ningn valor para las nuevas

filas de la columna. No obstante, no se realizan cambios en los datos existentes en la tabla.

ALTER TABLE Secretaria ADD ESTUDIO VARCHAR(20) DEFAULT 'Superior'

La instruccin anterior modifica la tebla Secretaria agregndole un campo mas ESTUDIO de 20 caracteres, adems por DEFAULT Superior. INTEGRIDAD REFERENCIAL le coloca el valor de

La integridad referencial entre tablas se exige de forma predeterminada cuando se crea una relacin en el diagrama de base de datos. Una relacin exigida garantiza que cada valor especificado en una columna de clave externa coincida con un valor existente en la columna de clave principal relacionada.

Restricciones FOREIGN KEY

Cuando en la columna de una restriccin FOREIGN KEY se introduce un valor distinto de NULL, el valor debe existir en la columna a la que se hace referencia; de lo contrario, se devuelve un mensaje de error de infraccin de clave externa.

Las restricciones FOREIGN KEY se aplican a la columna anterior a menos que se especifiquen columnas de origen.

Las restricciones FOREIGN KEY slo pueden hacer referencia a las tablas de la misma base de datos en el mismo servidor. La integridad referencial de las bases de datos cruzadas debe implementarse a travs de desencadenadores. Para obtener ms informacin, consulte CREATE TRIGGER.

Las restricciones FOREIGN KEY pueden hacer referencia a otras columnas de la misma tabla (una auto-referencia).

La clusula REFERENCES de una restriccin FOREIGN KEY en el nivel de columna puede enumerar slo una columna de referencia, que debe tener el mismo tipo de datos que la columna en la que se define la restriccin.

La clusula REFERENCES de una restriccin FOREIGN KEY en el nivel de tabla debe tener el mismo nmero de columnas de referencia que el nmero de columnas de la lista de columnas de restriccin. El tipo de datos de cada columna de referencia debe ser tambin el mismo que la columna correspondiente de la lista de columnas.

Es posible que no se pueda especificar CASCADE si una columna del tipo timestamp forma parte de la clave externa o de la clave a la que se hace referencia.

Se puede combinar CASCADE y NO ACTION en tablas que tengan relaciones referenciales entre s. Si SQL Server encuentra NO ACTION, termina y deshace las acciones CASCADE relacionadas. Cuando una instruccin DELETE hace que se combinen acciones CASCADE y NO ACTION, todas las acciones CASCADE se aplican antes de que SQL Server compruebe si hay clusulas NO ACTION.

Una tabla puede contener un mximo de 253 restricciones FOREIGN KEY. Las restricciones FOREIGN KEY no se exigen en tablas temporales. Una tabla puede hacer referencia a un mximo de 253 tablas distintas en sus restricciones FOREIGN KEY.

Las restricciones FOREIGN KEY slo pueden hacer referencia a las columnas de las restricciones PRIMARY KEY o UNIQUE de la tabla de referencia o a las columnas en UNIQUE INDEX de la tabla de referencia.

CREATE TABLE Secretaria ( CvSecre Nombre CvJefe SMALLINT PRIMARY KEY, VARCHAR(50) NOT NULL, SMALLINT

FOREIGN KEY (CvJefe) REFERENCES Empleado(Clave) )

Este ejemplo, crea una tabla nueva la cual se llama Secretaria y tiene su propia llave primaria, pero adems crea el campo CvJefe el cual hace referencia al campo Clave de la tabla Empleado creada en el ejemplo anterior.

2.1.3.1. 2.1.3.2.

TCNICA DIDCTICA Exposicin del profesor. MATERIAL DE APOYO

2.1.4. ACTIVIDADES DE APRENDIZAJE 2.1.4.1. ACTIVIDAD DE APRENDIZAJE 1 A8-ER2 Examen Rpido 2.1.4.1.1. INSTRUCCIONES Formular 5 preguntas del tema de Tipos de Integridad de Datos y dictrselas a los alumnos para que procedan a contestarlas. a) b) c) d) e) f) Valor actividad: 5 Puntos Producto esperado: Contestar preguntas de manera escrita Fecha inicio: Fecha entrega: Forma de entrega: Documento Tipo de Actividad: Individual 2.1.4.1.2. CRITERIO DE EVALUACIN DE LA ACTIVIDAD 1
ACTIVIDAD Examen Rpido DESARROLLO Formular preguntas y dictrselas a los alumnos para que se respondan. Total PONDERACIN 5 puntos 5 Puntos

2.1.5. RESULTADO DE APRENDIZAJE Repaso Rpido de los conceptos aprendidos. 2.1.6. BIBLIOGRAFA Ayuda de SQL Server 2000 2.1.7. DOCUMENTOS Manual SQL Server 2000 Standard final

2.2. USANDO RESTRICCIONES (CONSTRAINTS) 2.2.1. OBJETIVO DE APRENDIZAJE Entender algunas restricciones de SQL Server para declarar llaves, o caractersticas especificas del campo de una tabla. 2.2.2. RECURSOTIEMPO DEL TEMA 2 horas 2.2.3. DESARROLLO

Es una palabra clave opcional que indica el principio de la definicin de una restriccin PRIMARY KEY, NOT NULL, UNIQUE, FOREIGN KEY o CHECK. Las restricciones son propiedades especiales que exigen la integridad de los datos y pueden crear ndices para la tabla y sus columnas. constraint_name Es el nombre de una restriccin. Los nombres de restriccin deben ser nicos en una base de datos.

Ejemplo: CREATE TABLE Departamento ( CvDepto Nombre SMALLINT, VARCHAR(50) NOT NULL,

CONSTRAINT PK PRIMARY KEY (CvDepto) ) 2.2.3.1. 2.2.3.2. TCNICA DIDCTICA Exposicin del profesor. MATERIAL DE APOYO

2.2.4. ACTIVIDADES DE APRENDIZAJE 2.2.4.1. ACTIVIDAD DE APRENDIZAJE 1

A9-EC5 Restricciones CONSTRAINTS 2.2.4.1.1. INSTRUCCIONES Crear la tabla USUARIO con instrucciones SQL, a la cual se le colocan los siguientes campos: NomUsuario(llave primaria), Contrasea(no nula), Nivel.

a) b) c) d) e) f)

Valor actividad: 5 Puntos Producto esperado: Una tabla mas a la base de datos ESQUINITA Fecha inicio: Fecha entrega: Forma de entrega: Documento Tipo de Actividad: Individual 2.2.4.1.2. CRITERIO DE EVALUACIN DE LA ACTIVIDAD 1

DESARROLLO La tabla creada en la base de Restricciones CONSTRAINTS datos. Total

ACTIVIDAD

PONDERACIN 5 puntos 5 puntos

2.2.5. RESULTADO DE APRENDIZAJE Crear una tabla con instrucciones SQL y adems agregarle ciertas restricciones que van a darle mayor seguridad y evitar duplicaciones de informacin. 2.2.6. BIBLIOGRAFA Ayuda de SQL Server 2000 2.2.7. DOCUMENTOS Manual SQL Server 2000 Standard final 2.3. USANDO VALORES POR OMISIN Y REGLAS 2.3.1. OBJETIVO DE APRENDIZAJE Aplicar ciertas reglas de negocio desde el momento de creacin de las tablas de la base de datos. 2.3.2. RECURSO TIEMPO DEL TEMA 4 horas 2.3.3. DESARROLLO CREATE RULE Crea un objeto denominado regla. Cuando se enlaza una regla a una columna o un tipo de datos definido por el usuario, la regla especifica los valores aceptables que se pueden insertar en esa columna. Las reglas, que son una caracterstica de compatibilidad con versiones anteriores, realizan algunas de las mismas funciones que las restricciones CHECK. Las restricciones CHECK,

creadas mediante la palabra clave CHECK de ALTER o CREATE TABLE, son la forma preferida y estndar de restringir los valores de una columna (se pueden definir restricciones mltiples en una o mltiples columnas). Una columna o tipo de datos definido por el usuario slo puede tener una regla enlazada. Sin embargo, una columna puede tener una regla y una o ms restricciones CHECK asociadas a ella. Cuando esto es as, se evalan todas las restricciones. Sintaxis CREATE RULE rule AS condition_expression Argumentos rule Es el nombre de la nueva regla. Los nombres de reglas deben seguir las reglas de los identificadores. Especificar el propietario de la regla es opcional. condition_expression Son las condiciones que definen la regla. Una regla puede ser cualquier expresin vlida en una clusula WHERE y puede incluir elementos como operadores aritmticos, operadores relacionales y predicados (por ejemplo, IN, LIKE, BETWEEN). Una regla no puede hacer referencia a columnas u otros objetos de base de datos. Se pueden incluir funciones integradas que no hagan referencia a objetos de base de datos. condition_expresin Incluye una variable. El signo (@) precede a cada variable local. La expresin hace referencia al valor que se introduce con la instruccin UPDATE o INSERT. Se puede utilizar cualquier nombre o smbolo para representar el valor cuando se crea la regla, pero el primer carcter debe ser @. Observaciones La instruccin CREATE RULE no puede combinarse con otras instrucciones Transact-SQL en un nico proceso por lotes. Las reglas no se aplican a los datos ya existentes en la base de datos en el momento en que se crearon las reglas y no se pueden enlazar a los tipos de datos del sistema. Una regla slo se puede crear en la base de datos actual. Una vez creada la regla, ejecute sp_bindrule para enlazarla a una columna o a un tipo de datos definido por el usuario.

La regla debe ser compatible con el tipo de datos de la columna. Una regla no se puede enlazar a una columna text, image o timestamp. Asegrese de incluir las constantes de fecha y de caracteres entre comillas simples (') y de preceder las constantes binarias con 0x. Por ejemplo, "@valor LIKE A%" no se puede utilizar como regla para una columna numrica. Si la regla no es compatible con la columna a la que se ha enlazado, Microsoft SQL Server devuelve un mensaje de error cuando se inserta un valor, pero no cuando se enlaza la regla. Una regla enlazada a un tipo de datos definido por el usuario slo se activa cuando se intenta insertar un valor o actualizar una columna de la base de datos del tipo de datos definido por el usuario. Como las reglas no prueban las variables, no debe asignar un valor a una variable de tipo de datos definido por el usuario que sera rechazada por una regla enlazada a una columna del mismo tipo de datos. Para obtener un informe de una regla, utilice sp_help. Para que se muestre el texto de una regla, ejecute sp_helptext con el nombre de la regla como parmetro. Para cambiar el nombre de una regla, utilice sp_rename. Una regla debe quitarse (mediante DROP RULE) antes de crear otra con el mismo nombre y debe cancelarse el enlace (mediante sp_unbindrule) antes de quitarla. Utilice sp_unbindrule para cancelar el enlace de una regla a una columna. Una nueva regla se puede enlazar a una columna o tipo de datos sin cancelar el enlace de la anterior; la nueva regla anula la anterior. Las reglas enlazadas a columnas tienen siempre preferencia sobre las reglas enlazadas a tipos de datos definidos por el usuario. Enlazar una regla a una columna substituye una regla ya enlazada al tipo de datos definido por el usuario de esa columna. Pero el enlace de una regla a un tipo de datos no substituye una regla enlazada a una columna de ese tipo de datos definido por el usuario. La tabla muestra el efecto que tiene precedencia cuando se enlazan reglas a columnas y a tipos de datos definidos por el usuario en los que ya existen reglas. Regla antigua del enlace Nueva regla del enlace tipo de datos definido por el usuario Columna

Tipo de datos definido por Regla antigua substituida el usuario Columna Regla antigua substituida

Sin cambio

Regla antigua substituida

Si una columna tiene un valor predeterminado y una regla asociada a ella, el valor predeterminado debe encontrarse en el dominio definido por la regla. Un valor predeterminado que est en conflicto con una regla no se inserta nunca. SQL Server genera un mensaje de error cada vez que intenta insertar tal valor predeterminado.

Nota El que SQL Server interprete una cadena vaca como un espacio simple o como una verdadera cadena vaca se controla mediante el valor de sp_dbcmptlevel. Si el nivel de compatibilidad es menor o igual que 65, SQL Server interpreta las cadenas vacas como espacios simples. Si el nivel de compatibilidad es igual a 70, SQL Server interpreta las cadenas vacas como tales. Para obtener ms informacin, consulte sp_dbcmptlevel. Permisos De forma predeterminada, los permisos CREATE RULE se conceden a los miembros de la funcin fija de servidor sysadmin y a las funciones fijas de base de datos db_ddladmin y db_owner. Los miembros de las funciones sysadmin, db_owner y db_securityadmin pueden transferir los permisos a otros usuarios. Ejemplos A. Regla con un intervalo Este ejemplo crea una regla que restringe el intervalo de enteros que se insertan en las columnas a las que la regla est enlazada.

CREATE RULE Valor AS @Rango >=0 AND @Rango<=100

Se crea una regla que se llama Valor la cual evalua un rango de 0 a 100, esta regla se le puede asignar al campo Cal de la tabla Calificacin.

B. Regla con una lista Este ejemplo crea una regla que restringe los valores reales que se escriben en la columna o columnas a las que la regla est enlazada, a slo aqullos enumerados en la regla.

CREATE RULE Puesto AS @Descripcion IN ('Director', 'Secretaria', 'Subdirector') C. Regla con un patrn Este ejemplo crea una regla que sigue un patrn de dos caracteres cualquiera con un guin a continuacin, cualquier nmero de caracteres (o no caracteres) y un entero entre 0 y 9 al final.

CREATE RULE pattern_rule AS @value LIKE '_ _-%[0-9]' 2.3.3.1. 2.3.3.2. TCNICA DIDCTICA Exposicin del profesor. MATERIAL DE APOYO

2.3.4. ACTIVIDADES DE APRENDIZAJE 2.3.4.1. ACTIVIDAD DE APRENDIZAJE 1 A10-EC6 Valores por omision. 2.3.4.1.1. INSTRUCCIONES Crear una regla o utilizar una restriccin CHECK para validar ciertas cuestiones en los campos de la tabla. 1. De la tabla Cliente el campo RFCC validar que solo reciba 4 letras seguido de 6 numeros y alfinal solo tres letras de la omoclave. 2. La misma regla para el campo RFCP de la tabla Proveedor a) Valor actividad: 5 Puntos b) Producto esperado: Dos tablas con ciertas reglas o restricciones de negocio aplicadas directamente a las tablas. c) Fecha inicio: d) Fecha entrega: e) Forma de entrega: Documento f) Tipo de Actividad: Equipo (3 gentes)

2.3.4.1.2. CRITERIO DE EVALUACIN DE LA ACTIVIDAD 1


ACTIVIDAD Valores por omision DESARROLLO Checar en la base de datos ESQUINITA, las restricciones propuestas. Total PONDERACIN 5 puntos 5 Puntos

2.3.5. RESULTADO DE APRENDIZAJE Entender que es una regla de negocio y como validarla desde la creacin de la base de datos. 2.3.6. BIBLIOGRAFA Ayuda de SQL Server 2000 2.3.7. DOCUMENTOS Manual SQL Server 2000 Standard final

2.4. INTRODUCCIN A INDICES 2.4.1. OBJETIVO DE APRENDIZAJE Aprender a manejar indices en las tablas de la base de datos. 2.4.2. RECURSOTIEMPO DEL TEMA 1 hora 2.4.3. DESARROLLO

CREAR UN NDICE Despus de determinar el diseo, puede crear ndices en las tablas de la base de datos. Microsoft SQL Server 2000 crea automticamente ndices nicos para exigir los requisitos de exclusividad de las restricciones PRIMARY KEY y UNIQUE. A menos que ya exista un ndice agrupado en la tabla o que se haya especificado explcitamente un ndice no agrupado, se crear un ndice nico, agrupado, para exigir la restriccin PRIMARY KEY. A menos que se especifique explcitamente un ndice agrupado, se crear de forma

predeterminada un ndice nico, no agrupado, para exigir la restriccin UNIQUE.

Si necesita crear un ndice independiente de una restriccin, puede utilizar la instruccin CREATE INDEX. De forma predeterminada, se crea un ndice no agrupado si no se especifica la opcin de agrupacin. Otras consideraciones que hay que tener en cuenta en el momento de crear un ndice incluyen:

Slo el propietario de la tabla puede crear ndices en la misma tabla. Slo se puede crear un ndice agrupado por tabla. El nmero mximo de ndices no agrupados que pueden crearse por tabla es de 249 (incluidos los ndices creados por restricciones PRIMARY KEY o UNIQUE).

El tamao mximo de todas las columnas de longitud no variable que abarca el ndice es de 900 bytes. Por ejemplo, no se puede crear un solo ndice para las tres columnas definidas como char(300), char(300) y char (301), ya que la suma total supera los 900 bytes.

El nmero de columnas que puede abarcar el mismo ndice es de 16, como mximo.

Cuando cree ndices con la instruccin CREATE INDEX, deber especificar el nombre del ndice, de la tabla y de las columnas a las que se aplica el ndice. Los nuevos ndices creados como parte de una restriccin PRIMARY KEY o UNIQUE, o bien mediante el Administrador corporativo de SQL Server, reciben automticamente nombres definidos por el sistema que se basan en el nombre de la tabla de la base de datos. Si crea varios ndices en una tabla, se adjuntan los sufijos _1, _2, etc. a los nombres de los ndices. Si es necesario, puede cambiar el nombre del ndice.

Nota No puede crear un ndice en la base de datos actual si se est realizando una copia de seguridad de la base de datos. Si se crea un ndice agrupado en una tabla con varios ndices secundarios, se deben volver a generar todos los ndices secundarios de manera que contengan el valor de clave de agrupacin en lugar del identificador de fila

(RID). Asimismo, si se elimina un ndice agrupado de una tabla con varios ndices no agrupados, se vuelven a generar todos los ndices no agrupados como parte de la operacin DROP. Si las tablas son de gran tamao, la operacin puede prolongarse significativamente. La mejor manera de generar ndices en tablas de gran tamao es empezar con el ndice agrupado y, a continuacin, generar los ndices no agrupados. Al quitar todos los ndices, quite primero los ndices no agrupados y despus los agrupados. De esta forma no es necesario volver a generar los ndices.

ndices agrupados Cuando cree un ndice agrupado, se copiar la tabla, se ordenarn los datos de la tabla y se eliminar la tabla original. Por lo tanto, debe haber suficiente espacio vaco en la base de datos para que pueda realizarse una copia de los datos. De forma predeterminada, los datos de la tabla se ordenan cuando se crea el ndice. Sin embargo, si los datos estn ordenados porque ya haba un ndice agrupado y se vuelve a crear con el mismo nombre y las mismas columnas, la operacin de ordenacin puede omitirse automticamente si se vuelve a generar el ndice, en vez de crearlo de nuevo. Cuando se vuelve a generar el ndice, se comprueba que las filas estn ordenadas mientras se genera el ndice. Si las filas no estn correctamente ordenadas, se cancelan las operaciones y no se crea el ndice.

ndices nicos La creacin de un ndice nico asegura que fracase cualquier intento de duplicar valores clave. Si se crea una sola consulta que provoque la agregacin de valores de clave duplicados y no duplicados, SQL Server rechaza todas las filas, incluidas las que tengan valores de clave no duplicados. Por ejemplo, si una sola instruccin de insercin recupera 20 filas de la tabla A y las inserta en la tabla B, pero 10 de esas filas contienen valores de clave duplicados, se rechazarn las 20 filas de forma predeterminada. Sin embargo, se puede especificar la clusula IGNORE_DUP_KEY cuando se crea el ndice; as, slo se rechazarn los valores de clave duplicados; los no duplicados se agregarn.

En el ejemplo anterior, slo se rechazaran los 10 valores de clave duplicados; los 10 valores no duplicados se insertaran en la tabla B. No se puede crear un ndice nico si hay valores de la clave duplicados. Por ejemplo, si desea crear un ndice compuesto y nico en las columnas a y b, pero hay dos filas en la tabla que contienen los valores 1 y 2 para a y b respectivamente, no se puede crear el ndice nico.

Nota No se puede crear un ndice nico en una sola columna si esa columna contiene valores NULL en ms de una fila. Tampoco se puede crear un ndice nico en varias columnas si la combinacin de columnas contiene valores NULL en ms de una fila. Estos valores se tratan como duplicados a efectos de indizacin. 2.4.3.1. 2.4.3.2. TCNICA DIDCTICA Exposicin del profesor. MATERIAL DE APOYO

2.4.4. ACTIVIDADES DE APRENDIZAJE 2.4.4.1. ACTIVIDAD DE APRENDIZAJE 1 A11-I1 Investigacion de Indices 2.4.4.1.1. INSTRUCCIONES Realizar un trabajo de investigacin que complemente el tema de indices. a) b) c) d) e) f) Valor actividad: 5 Puntos Producto esperado: documento que avale la investigacin. Fecha inicio: Fecha entrega: Forma de entrega: Documento Tipo de Actividad: Equipo (3 gentes) 2.4.4.1.2. CRITERIO DE EVALUACIN DE LA ACTIVIDAD 1
ACTIVIDAD Investigacion de Indices Presentacin del trabajo Total 1 punto 5 puntos DESARROLLO Contenido de la investigacin PONDERACIN 4 puntos

2.4.5. RESULTADO DE APRENDIZAJE Entender la importancia del manejo de indices en la optimizacion del tiempo en las consultas a las tablas indexadas. 2.4.6. BIBLIOGRAFA Ayuda de SQL Server 2000

2.4.7. DOCUMENTOS Manual SQL Server 2000 Standard final 2.5. ARQUITECTURA y CREACIN DE INDICES 2.5.1. OBJETIVO DE APRENDIZAJE Aprender a crear indices en las tablas. 2.5.2. RECURSO TIEMPO DEL TEMA 3 horas 2.5.3. DESARROLLO

ARQUITECTURA DE TABLAS E NDICES Los objetos de una base de datos de Microsoft SQL Server 2000 se almacenan como una coleccin de pginas de 8 KB. Este tema describe el modo en que se organizan las pginas de tablas e ndices. SQL Server 2000 admite ndices en las vistas. El primer ndice permitido en una vista es un ndice agrupado. En el momento en que se ejecuta una instruccin CREATE INDEX en una vista, el conjunto de resultados para la vista se materializa y almacena en la base de datos con la misma estructura que una tabla que tiene un ndice agrupado. El conjunto de resultados que se almacena es el mismo que produce esta instruccin.

SELECT * FROM Nombre_Vista

Las filas de datos para cada tabla o vista indizada se almacenan en una coleccin de pginas de datos de 8 KB. Cada pgina de datos dispone de una cabecera de 96 bytes que contiene informacin del sistema como el identificador (Id.) de la tabla que es propietaria de la pgina. La cabecera de pgina tambin incluye punteros a las pginas anteriores y siguientes que se utilizan si las pginas se vinculan a una lista. Al final de la pgina se encuentra una tabla de desplazamiento de filas. Las filas de datos ocupan el resto de la pgina.

Organizacin de pginas de datos Las tablas de SQL Server 2000 utilizan uno de estos dos mtodos para organizar sus pginas de datos:

Las tablas agrupadas son tablas que tienen un ndice agrupado. Las filas de datos estn almacenadas en un orden basado en la clave del ndice agrupado. El ndice se implementa como una estructura de rbol B que admite la rpida recuperacin de las filas a partir de los valores de claves del ndice agrupado. Las pginas de cada nivel del ndice, incluidas las pginas de datos del nivel de hoja, se vinculan en una lista con vnculos dobles, pero la navegacin de uno a otro nivel se produce mediante valores de clave.

Los montones son tablas que no tienen un ndice agrupado. Las filas de datos no estn almacenadas en ningn orden particular ni tampoco hay un orden particular en la secuencia de las pginas de datos. Las pginas de datos no estn vinculadas en una lista vinculada.

Las vistas indizadas tienen la misma estructura de almacenamiento que las tablas agrupadas. SQL Server admite tambin hasta 249 ndices no agrupados en cada vista de tabla o ndice. Los ndices no agrupados tienen una estructura de rbol B similar a la de los ndices agrupados. La diferencia est en que los ndices no agrupados no tienen ningn efecto en el orden de las filas de datos. Las tablas agrupadas y las vistas indizadas mantienen sus filas de datos en orden de acuerdo con la clave del ndice agrupado. La coleccin de pginas de datos de un montn no se ve afectada cuando se definen ndices no agrupados en la

tabla. Las pginas de datos permanecen en un montn a menos que se defina un ndice agrupado. Las pginas que almacenan datos text, ntext e image se administran como una nica unidad por cada tabla. Todos los datos text, ntext e image de una tabla estn almacenados en una coleccin de pginas. Todas las colecciones de pginas para tablas, ndices y vistas indizadas estn delimitadas por punteros de pgina en la tabla sysindexes. Cada tabla y vista indizada tiene una coleccin de pginas de datos, adems de colecciones adicionales de pginas para implementar cada ndice definido para la tabla o vista. Cada tabla, ndice y vista indizada tiene una fila en sysindexes identificada de manera exclusiva por la combinacin de la columna del identificador del objeto (id) y la columna del identificador del ndice (indid). La asignacin de pginas a tablas, ndices y vistas indizadas se administra mediante una cadena de pginas IAM. La columna sysindexes.FirstIAM apunta a la primera pgina IAM de la cadena de pginas IAM que administran el espacio asignado a la tabla, ndice o vista indizada. Cada tabla tiene un conjunto de filas en sysindexes:

Un montn tiene una fila en sysindexes con indid = 0. La columna FirstIAM apunta a la cadena IAM de la coleccin de pginas de datos de la tabla. El servidor utiliza las pginas IAM para buscar las pginas en la coleccin de pginas de datos, puesto que no estn vinculadas.

Un ndice agrupado en una tabla o vista tiene una fila en sysindexes con indid = 1. La columna root apunta a la parte superior del rbol B del ndice agrupado. El servidor utiliza el rbol B del ndice para buscar las pginas de datos.

Cada ndice no agrupado creado para una tabla o una vista tiene una fila en sysindexes.

Los valores de indid de las filas de los ndices no agrupados se encuentran entre 2 y 250. La columna root apunta al nodo superior del rbol B del ndice no agrupado.

Todas las tablas que tengan al menos una columna text, ntext o image tambin tienen una fila en sysindexes, con indid = 255. La columna FirstIAM apunta a la cadena de pginas IAM que administra las pginas text, ntext e image.

En SQL Server 6.5 y anterior, sysindexes.first apunta siempre al inicio de un montn, al inicio del nivel de hoja de un ndice, o al inicio de una cadena de pginas text e image. En SQL Server 7.0 y posterior, no se suele utilizar sysindexes.first. En SQL Server 6.5 y anterior, sysindexes.root en una fila con indid = 0 apunta a la ltima pgina de un montn. En SQL Server 7.0 y posterior, no se utiliza sysindexes.root en una fila con indid = 0.

Por ejemplo: CREACIN DE INDICE Estas instrucciones crean un indice a la tabla Calificacion, para el campo de Cal.

USE ESCUELA CREATE INDEX IndCal ON Calificacion (Cal)

ELIMINACIN DE INDICE

USE ESCUELA DROP INDEX Calificacion.IndCal

2.5.3.1. 2.5.3.2.

TCNICA DIDCTICA Exposicin del profesor. MATERIAL DE APOYO

2.5.4. ACTIVIDADES DE APRENDIZAJE 2.5.4.1. ACTIVIDAD DE APRENDIZAJE 1

A12-EC7 Crear Indices 2.5.4.1.1. INSTRUCCIONES Crear indices compuestos en las tablas de VtaProd(Clave Venta y Clave Producto) y CpaProd(Clave Compra y Clave Producto) a) b) c) d) e) f) Valor actividad: 5 Puntos Producto esperado: Tablas indexadas Fecha inicio: Fecha entrega: Forma de entrega: Documento Tipo de Actividad: Equipo(3 gentes) 2.5.4.1.2. CRITERIO DE EVALUACIN DE LA ACTIVIDAD 1
ACTIVIDAD Crear Indices DESARROLLO Checar las tablas que efectivamente tengan los indices indicados. Total PONDERACIN 5 puntos 5 Puntos

2.5.5. RESULTADO DE APRENDIZAJE Manejo de indices 2.5.6. BIBLIOGRAFA Ayuda de SQL Server 2000 2.5.7. DOCUMENTOS Manual SQL Server 2000 Standard final

UNIDAD TEMATICA 3. TRANSACCIONES EN LA BASE DE DATOS Entre las habilidades de todo Sistema Gestor de Bases de Datos Relaciones tiene que estar la de permitir al programador crear transacciones. El SQL Server nos permite trabajar con transacciones de manera sencilla y eficaz. Una transaccin es una unidad lgica de trabajo o procesamiento: ejecucin de un programa que incluye operaciones de acceso a la base de datos (en adelante, BD).

Una transaccin es una secuencia de operaciones que llevan la base de datos desde un estado de consistencia1 a otro estado de consistencia, por esto suele decirse tambin que la transaccin es una unidad lgica de integridad. Cuando mltiples transacciones son introducidas en el sistema por varios usuarios, es necesario evitar que interfieran entre ellas de forma tal que provoquen que la BD quede en un estado no consistente; desde este punto de vista, podemos ver una transaccin como una unidad lgica de concurrencia. Si ocurre un fallo que provoca la cada del sistema de bases de datos, cuando haba varias transacciones en curso de ejecucin, muy probablemente los datos en la BD quedarn errneos (estado inconsistente debido a un fallo); en estas circunstancias, se debe garantizar que la BD pueda ser recuperada a un estado en el cual su contenido sea consistente, observando las transacciones que terminaron su ejecucin y las que quedaron a medio; por esto una transaccin es considerada tambin una unidad lgica de recuperacin.

3.1. PROCESAMIENTO DE TRANSACCIONES 3.1.1. OBJETIVO DE APRENDIZAJE Entender la finalidad de las Transacciones 3.1.2. RECURSOTIEMPO DEL TEMA horas 3.1.3. DESARROLLO

La idea clave es que una transaccin debe ser atmica, es decir, las operaciones que la componen deben ser ejecutadas en su totalidad o no ser ejecutadas en absoluto. Una sentencia de definicin o manipulacin de datos ejecutada de forma interactiva (por ejemplo utilizar el SQL * Plus de Oracle para realizar una consulta) puede suponer el inicio de una transaccin. Asimismo, la ejecucin de una sentencia SQL por parte de un programa que no tiene ya una transaccin en progreso, supone la iniciacin de una transaccin. Toda transaccin finaliza con una operacin de COMMIT (confirmar) o bien con una operacin de ROLLBACK (anular, abortar o revertir).
1

El conjunto de valores almacenados en la base de datos cumple toda restriccin de integridad especificada en el

esquema, as como cualesquiera otras restricciones que deban cumplirse en la base de datos.

Tanto una operacin como la otra puede ser de tipo explcito (si la propia transaccin (su cdigo) contiene una sentencia COMMIT o ROLLBACK) o implcito (si dicha operacin es realizada por el sistema de forma automtica, por ejemplo tras detectar una terminacin normal (xito) o anormal (fallo) de la transaccin). Por defecto, una vez finalizada una transaccin, si todas sus operaciones se han realizado con xito, se realiza un COMMIT implcito de dicha transaccin; y si alguna de ellas tuvo problemas, se lleva a cabo un ROLLBACK implcito de la transaccin (es decir, se deshacen todas las operaciones que haba realizado hasta el momento del fallo). 3.1.3.1. 3.1.3.2. TCNICA DIDCTICA Exposicin del profesor. MATERIAL DE APOYO

3.1.4. ACTIVIDADES DE APRENDIZAJE 3.1.4.1. ACTIVIDAD DE APRENDIZAJE 1 A13-T3 Cuestionario transacciones. 3.1.4.1.1. INSTRUCCIONES Realizar un cuestionario de 5 preguntas del tema visto. a) b) c) d) e) f) Valor actividad: 2.5 Puntos Producto esperado: Contestar preguntas de manera escrita Fecha inicio: Fecha entrega: Forma de entrega: Documento Tipo de Actividad: Individual 3.1.4.1.2. CRITERIO DE EVALUACIN DE LA ACTIVIDAD 1
ACTIVIDAD Cuestionario transacciones DESARROLLO Formular preguntas y responderlas, estas se deben de transmitir hacia asu compaeros Total PONDERACIN 2.5 puntos 2.5 Puntos

3.1.5. RESULTADO DE APRENDIZAJE Entender la funcion y ventajas de las transacciones en una base de datos 3.1.6. BIBLIOGRAFA Ayuda SQL Server 2000 3.1.7. DOCUMENTOS Manual SQL Server 2000 Standard final

3.2. CONCEPTOS DE TRANSACCIONES 3.2.1. OBJETIVO DE APRENDIZAJE Saber que es una transaccin y en que casos se pueden utilizar 3.2.2. RECURSO TIEMPO DEL TEMA hora 3.2.3. DESARROLLO Una transaccin es un conjunto de operaciones que van a ser tratadas como una nica unidad. Estas transacciones deben cumplir 4 propiedades fundamentales comnmente conocidas como ACID (atomicidad, coherencia, asilamiento y durabilidad). La transaccin ms simple en SQL Server es una nica sentencia SQL. Por ejemplo una sentencia como esta: UPDATE Products SET UnitPrice=20 WHERE ProductName =Chai Es una transaccin. Esta es una transaccin AUTOCOMMIT, una transaccin autocompletada. Cuando enviamos esta sentencia al SQL Server se escribe en el fichero de transacciones lo que va a ocurrir y a continuacin realiza los cambios necesarios en la base de datos. Si hay algn tipo de problema al hacer esta operacin el SQL Server puede leer en el fichero de transacciones lo que se estaba haciendo y si es necesario puede devolver la base de datos al estado en el que se encontraba antes de recibir la sentencia. Por supuesto este tipo de transacciones no requieren de nuestra intervencin puesto que el sistema se encarga de todo. Sin embargo si hay que realizar varias operaciones y queremos que sean tratadas como una unidad tenemos que crear esas transacciones de manera explcita. 3.2.3.1. 3.2.3.2. TCNICA DIDCTICA Exposicin del profesor. MATERIAL DE APOYO

3.3. PROPIEDADES DE LAS TRANSACCIONES 3.3.1. OBJETIVO DE APRENDIZAJE Conocer cuales son las caractersticas especificas de las transacciones.

3.3.2. RECURSO TIEMPO DEL TEMA 1 hora 3.3.3. DESARROLLO

Se suele hacer referencia a estas como las propiedades ACID (por sus iniciales en ingls).

1. Atomicidad

Todas las operaciones de la transaccin son ejecutadas por completo, o no se ejecuta ninguna de ellas (si se ejecuta la transaccin, se hace hasta el final).

2. Consistencia

Una transaccin T transforma un estado consistente de la base de datos en otro estado consistente, aunque T no tiene por qu preservar la consistencia en todos los puntos intermedios de su ejecucin. Un ejemplo es el de la transferencia de una cantidad de dinero entre dos cuentas bancarias.

3. Aislamiento (Isolation)

Una transaccin est aislada del resto de transacciones. Aunque existan muchas transacciones ejecutndose a la vez, cualquier modificacin de datos que realice T est oculta para el resto de transacciones hasta que T sea confirmada (realiza COMMIT). Es decir, para cualesquiera T1 y T2, se cumple que:

- T1 ve las actualizaciones de T2 despus de que T2 realice COMMIT, o bien - T2 ve las modificaciones de T1, despus de que T1 haga un COMMIT

Pero nunca se cumplen ambas cosas al mismo tiempo.

Nota: esta propiedad puede no imponerse de forma estricta 2; de hecho, suelen definirse niveles de aislamiento de las transacciones.

4. Durabilidad

Una vez que se confirma una transaccin, sus actualizaciones sobreviven cualquier fallo del sistema. Las modificaciones ya no se pierden, aunque el sistema falle justo despus de realizar dicha confirmacin. 3.3.3.1. 3.3.3.2. TCNICA DIDCTICA Exposicin del profesor. MATERIAL DE APOYO

3.3.4. ACTIVIDADES DE APRENDIZAJE 3.3.4.1. ACTIVIDAD DE APRENDIZAJE 1 A14-ER3 Examen Rpido. 3.3.4.1.1. INSTRUCCIONES Formular 5 preguntas de los dos temas anteriores y dictrselas a los alumnos para que as contesten. a) b) c) d) e) f) Valor actividad: 5 Puntos Producto esperado: Contestar preguntas de manera escrita Fecha inicio: Fecha entrega: Forma de entrega: Documento Tipo de Actividad: Individual 3.3.4.1.2. CRITERIO DE EVALUACIN DE LA ACTIVIDAD 1
ACTIVIDAD Examen Rpido DESARROLLO Constestar las preguntas Total PONDERACIN 5 puntos 5 Puntos

3.3.5. RESULTADO DE APRENDIZAJE Comprobar que los alumnos estn captando la importancia de las transacciones en una base de datos. 3.3.6. BIBLIOGRAFA Ayuda de SQL Server 2000
2

Aunque lo estudiaremos en el tema de Recuperacin de Cadas en Sistemas de Base de Datos, si se impone de

forma estricta el aislamiento de las transacciones, se resuelve el problema de la actualizacin temporal y no es necesario realizar reversiones en cascada.

3.3.7. DOCUMENTOS Manual SQL Server 2000 Standard final

3.4. PLANES Y RECUPERABILIDAD 3.4.1. OBJETIVO DE APRENDIZAJE Proponer la forma mas adecuada de 3.4.2. RECURSOTIEMPO DEL TEMA 3.4.3. DESARROLLO

El Subsistema de Recuperacin del SGBD es el encargado de conseguir el cumplimiento de las propiedades de atomicidad y durabilidad de las transacciones. La conservacin de la consistencia es una propiedad cuyo cumplimiento han de asegurar, por un lado los programadores de base de datos, y por otro el Subsistema de Integridad del SGBD. El Subsistema de Control de Concurrencia es el encargado de conseguir el aislamiento de las transacciones. Para hacer posible el control de la concurrencia de las transacciones, as como la recuperacin del sistema tras fallos o cadas del mismo, es necesario almacenar cundo se inicia, termina, se confirma o se aborta cada transaccin, y adems qu modificaciones de qu elementos de BD realiza cada una.

INICIO DE TRANSACCIN

Operacin que marca el momento en el que una transaccin comienza a ejecutarse. En un entorno SQL, esta operacin es implicada de forma implcita por la primera sentencia SQL que se ejecuta dentro de una transaccin. LEER o ESCRIBIR

Operaciones de lectura/escritura de elementos de la base de datos, que se realizan como parte de una transaccin. FIN DE TRANSACCIN

Las operaciones de LEER y ESCRIBIR han terminado. En este punto se verifica si la transaccin debe abortarse por alguna razn (si viola el control de concurrencia, por ejemplo), o bien si los cambios realizados por la transaccin (hasta ahora en bfers de memoria voltil) pueden aplicarse permanentemente a la base de datos en disco (es decir, si puede realizarse una operacin de CONFIRMAR). CONFIRMAR (COMMIT)

La transaccin termin con xito, todos los cambios que ha realizado se pueden confirmar sin peligro en la BD y ya no sern cancelados. ABORTAR (ROLLBACK)

La transaccin termin sin xito y toda actualizacin que ha realizado se debe cancelar. Algunas tcnicas de recuperacin necesitan operaciones adicionales como las siguientes: DESHACER

Similar a ABORTAR, pero se aplica a una sola operacin y no a una transaccin completa. REHACER

Especifica que algunas de las operaciones realizadas por una transaccin deben repetirse, para asegurar que todas las operaciones realizadas por una transaccin que ha sido CONFIRMADA se hayan aplicado con xito a la BD (es decir, los cambios hayan quedado grabados fsicamente en disco). 3.4.3.1. 3.4.3.2. TCNICA DIDCTICA Exposicin del profesor. MATERIAL DE APOYO

3.5. SERIABILIDAD DE PLANES 3.5.1. OBJETIVO DE APRENDIZAJE Proponer un plan de recuperacin de informacin a traves te transacciones. 3.5.2. RECURSO TIEMPO DEL TEMA 1 hora 3.5.3. DESARROLLO

ESTADOS DE UNA TRANSACCIN

El siguiente es el diagrama de transicin de estados para la ejecucin de transacciones:

Una transaccin entra en el estado ACTIVA justo despus de iniciar su ejecucin y, en este estado, puede realizar operaciones LEER y ESCRIBIR. Cuando la transaccin finaliza, pasa al estado PARCIALMENTE

CONFIRMADA. En este punto, el Subsistema de Control de Concurrencia puede efectuar verificaciones para asegurar que la transaccin no interfiera con otras transacciones en ejecucin. Adems, el Subsistema de Recuperacin puede anotar, en un fichero del sistema (bitcora), qu operaciones (qu cambios) ha realizado la transaccin, con el objetivo de garantizar que los cambios realizados por la transaccin terminada queden permanentes, a pesar de fallos del sistema. Una vez realizadas con xito ambas verificaciones, la transaccin ha llegado a su punto de confirmacin y pasa al estado CONFIRMADA (ha concluido su ejecucin con xito). Si una de las verificaciones falla o la transaccin se aborta mientras est en estado ACTIVA, pasa al estado FALLIDA. En este caso, es posible que la transaccin deba ser cancelada (anulada, revertida, abortada) para anular los efectos de sus operaciones ESCRIBIR sobre la BD. El estado TERMINADA indica que la transaccin ha abandonado el sistema. Las transacciones fallidas (abortadas) pueden ser reiniciadas posteriormente, ya sea de forma automtica por parte del sistema, o bien sea el usuario el que las reintroduzca como si fueran nuevas transacciones.

Protocolos de bloqueo en dos fases Transaccin dos fases: bloquea primero todos los grnulos, ejecuta operaciones y luego desbloquea todos. Toda ejecucin completa de un conjunto de transacciones con protocolo de bloqueo en dos fases es serializable. En bloqueo en dos fases limita la cantidad de concurrencia al realizar bloqueos tempranos y liberaciones tardas de recursos. Variaciones del bloqueo en dos fases o Bloqueo bsico o Bloqueo conservativo o esttico --> bloquea antes de comenzar o Bloqueo estricto --> desbloquea despus de terminar totalmente

Problemas derivados del uso de bloqueos Interbloqueo (deadlock) o Imposibilidad de realizar simultneamente dos operaciones no compatibles sobre el mismo grnulo o Dos o ms transacciones quedan en espera de un recurso Esperada indefinida (livelock) o Una transaccin no entra mientras exista otra Inanicin (starvation) o El mdulo controlador siempre mata a la misma o Transaccin para resolver un interbloqueo

3.5.3.1. 3.5.3.2.

TCNICA DIDCTICA Exposicin del profesor. MATERIAL DE APOYO

3.5.4. ACTIVIDADES DE APRENDIZAJE 3.5.4.1. ACTIVIDAD DE APRENDIZAJE 1 A15-T4 Cuestionario planes. 3.5.4.1.1. INSTRUCCIONES Realizar un cuestionario de 5 preguntas del tema visto. a) b) c) d) e) Valor actividad: 2.5 Puntos Producto esperado: Contestar preguntas de manera escrita Fecha inicio: Fecha entrega: Forma de entrega: Documento

f) Tipo de Actividad: Individual 3.5.4.1.2. CRITERIO DE EVALUACIN DE LA ACTIVIDAD 1


ACTIVIDAD Cuestionario planes DESARROLLO Formular preguntas y responderlas, estas se deben de transmitir hacia asu compaeros Total PONDERACIN 2.5 puntos 2.5 Puntos

3.5.5. RESULTADO DE APRENDIZAJE Repasar ciertas caractersticas de las transacciones 3.5.6. BIBLIOGRAFA Ayuda de SQL Server 2000 3.5.7. DOCUMENTOS Manual SQL Server 2000 Standard final

3.6. TRANSACCIONES SQL 3.6.1. OBJETIVO DE APRENDIZAJE Aprender a crear transacciones en una base de datos. 3.6.2. RECURSO TIEMPO DEL TEMA 8 horas 3.6.3. DESARROLLO Como decamos una transaccin es un conjunto de operaciones tratadas como una sola. Este conjunto de operaciones debe marcarse como transaccin para que todas las operaciones que la conforman tengan xito o todas fracasen. La sentencia que se utiliza para indicar el comienzo de una transaccin es BEGIN TRAN. Si alguna de las operaciones de una transaccin falla hay que deshacer la transaccin en su totalidad para volver al estado inicial en el que estaba la base de datos antes de empezar. Esto se consigue con la sentencia ROLLBACK TRAN. Si todas las operaciones de una transaccin se completan con xito hay que marcar el fin de una transaccin para que la base de datos vuelva a estar en un estado consistente con la sentencia COMMIT TRAN.

Un ejemplo

Trabajaremos con la base de datos ESCUELA en nuestros ejemplos.

Vamos a realizar una transaccin que modifica las calificaciones de dos alumnos de la base de datos.
USE ESCUELA DECLARE @ERROR int BEGIN TRAN
UPDATE Calificacion SET Cal = 90 WHERE Matricula= 2004001 AND CvMat = 100

SET @ERROR=@@ERROR IF (@ERROR<>0) GOTO TratarError


UPDATE Calificacion SET Cal = 100 WHERE Matricula= 2004002 AND CvMat = 100

SET @ERROR=@@ERROR IF (@ERROR<>0) GOTO TratarError COMMIT TRAN TratarError: IF @@ERROR<>0 BEGIN PRINT Ha recorrido un ERROR. Abortamos la transaccin ROLLBACK TRAN END

USE ESCUELA DECLARE @ERROR int

Declaramos una variable que utilizaremos para almacenar un posible cdigo de ERROR.

BEGIN TRAN

Iniciamos la transaccin
UPDATE Calificacion SET Cal = 90 WHERE Matricula= 2004001 AND CvMat = 100

Ejecutamos la primera sentencia

SET @ERROR=@@ERROR

Si ocurre un ERROR almacenamos su cdigo en @ERROR y saltamos al trozo de cdigo que deshar la transaccin. Si, eso de ah es un GOTO, el demonio de los programadores, pero no pasa nada por usarlo cuando es necesario

IF (@ERROR<>0) GOTO TratarError

Si la primera sentencia se ejecuta con xito, pasamos a la segunda


UPDATE Calificacion SET Cal = 100 WHERE Matricula= 2004002 AND CvMat = 100

SET @ERROR=@@ERROR

Y si hay un ERROR hacemos como antes

IF (@ERROR<>0) GOTO TratarError

Si llegamos hasta aqu es que los dos UPDATE se han completado con xito y podemos "guardar" la transaccin en la base de datos.

COMMIT TRAN

TratarError:

Si ha ocurrido algn ERROR llegamos hasta aqu

IF @@ERROR<>0 BEGIN PRINT Ha recorrido un ERROR. Abortamos la transaccin

Se lo comunicamos al usuario y deshacemos la transaccin todo volver a estar como si nada hubiera ocurrido

ROLLBACK TRAN END

Como se puede ver para cada sentencia que se ejecuta miramos si se ha producido o no un ERROR, y si detectamos un ERROR ejecutamos el bloque de cdigo que deshace la transaccin. Hay una interpretacin incorrecta en cuanto al funcionamiento de las transacciones que esta bastante extendida. Mucha gente cree que si tenemos varias sentencias dentro de una transaccin y una de ellas falla, la transaccin se aborta en su totalidad. Nada ms lejos de la realidad! Si tenemos dos sentencias dentro de una transaccin.

USE ESCUELA BEGIN TRAN


UPDATE Calificacion SET Cal=85 WHERE Matricula=2004001 AND CvMat= 100 UPDATE Calificacion SET Cal=85 WHERE Matricula=2004001 AND CvMat= 100

COMMIT TRAN

Estas dos sentencias se ejecutarn como una sola. Si por ejemplo en medio de la transaccin (despus del primer UPDATE y antes del segundo) hay un corte de electricidad, cuando el SQL Server se recupere se encontrar en medio de una transaccin y, o bien la termina o bien la deshace, pero no se quedar a medias. El ERROR est en pensar que si la ejecucin de la primera sentencia da un ERROR se cancelar la transaccin. El SQL Server slo se preocupa de

ejecutar las sentencias, no de averiguar si lo hacen correctamente o si la lgica de la transaccin es correcta. Eso es cosa nuestra. Por eso en el ejemplo que tenemos ms arriba para cada sentencia de nuestro conjunto averiguamos si se ha producido un ERROR y si es as actuamos en consecuencia cancelando toda la operacin. TRANSACCIONES ANIDADAS Otra de las posibilidades que nos ofrece el SQL Server es utilizar transacciones anidadas. Esto quiere decir que podemos tener transacciones dentro de transacciones, es decir, podemos empezar una nueva transaccin sin haber terminado la anterior. Asociada a esta idea de anidamiento existe una variable global

@@TRANCOUNT que tiene valor 0 si no existe ningn nivel de anidamiento, 1 si hay una transaccin anidada, 2 si estamos en el segundo nivel de anidamiento y as sucesivamente. La dificultad de trabajar con transacciones anidadas est en el comportamiento que tienen ahora las sentencias COMMIT TRAN y ROLLBACK TRAN ROLLBACK TRAN: Dentro de una transaccin anidada esta sentencia deshace todas las transacciones internas hasta la instruccin BEGIN TRANSACTION ms externa. COMMIT TRAN: Dentro de una transaccin anidada esta sentencia nicamente reduce en 1 el valor de @@TRANCOUNT, pero no "finaliza" ninguna transaccin ni "guarda" los cambios. En el caso en el que @@TRANCOUNT=1 (cuando estamos en la ltima transaccin) COMMIT TRAN hace que todas las modificaciones efectuadas sobre los datos desde el inicio de la transaccin sean parte permanente de la base de datos, libera los recursos mantenidos por la conexin y reduce @@TRANCOUNT a 0.

Como siempre un ejemplo es lo mejor para entender como funciona.

BEGIN TRAN TranExterna SELECT 'El nivel de anidamiento es', @@TRANCOUNT INSERT INTO Calificacion VALUES (2004001, 300, 90) BEGIN TRAN TranInterna1 SELECT 'El nivel de anidamiento es', @@TRANCOUNT INSERT INTO Calificacion VALUES (2004002, 200, 85) BEGIN TRAN TranInterna2 SELECT 'El nivel de anidamiento es', @@TRANCOUNT INSERT INTO Calificacion VALUES (2004002, 100, 100) COMMIT TRAN TranInterna2 SELECT 'El nivel de anidamiento es', @@TRANCOUNT COMMIT TRAN TranInterna1 SELECT 'El nivel de anidamiento es', @@TRANCOUNT COMMIT TRAN TranExterna SELECT 'El nivel de anidamiento es', @@TRANCOUNT SELECT * FROM Calificacion

BEGIN TRAN TranExterna

@@TRANCOUNT ahora es 1

SELECT 'El nivel de anidamiento es', @@TRANCOUNT INSERT INTO Calificacion VALUES (2004001, 300, 90) BEGIN TRAN TranInterna1

@@TRANCOUNT ahora es 2.

SELECT 'El nivel de anidamiento es', @@TRANCOUNT INSERT INTO Calificacion VALUES (2004002, 200, 85) BEGIN TRAN TranInterna2

@@TRANCOUNT ahora es 3.

SELECT 'El nivel de anidamiento es', @@TRANCOUNT INSERT INTO Calificacion VALUES (2004002, 100, 100) COMMIT TRAN TranInterna2

Reduce @@TRANCOUNT a 2. Pero no se guarda nada en la base de datos.

SELECT 'El nivel de anidamiento es', @@TRANCOUNT COMMIT TRAN TranInterna1

Reduce @@TRANCOUNT a 1. Pero no se guarda nada en la base de datos.

SELECT 'El nivel de anidamiento es', @@TRANCOUNT COMMIT TRAN TranExterna

Reduce @@TRANCOUNT a 0. Se lleva a cabo la transaccin externa y todo lo que conlleva.

SELECT 'El nivel de anidamiento es', @@TRANCOUNT SELECT * FROM Calificacion

Por cierto que lo de usar nombre para las transacciones es por claridad, puesto que COMMIT TRAN como ya hemos dicho solamente reduce en 1 el valor de @@TRANCOUNT. Veamos ahora un ejemplo de transaccin anidada con ROLLBACK TRAN BEGIN TRAN TranExterna

@@TRANCOUNT ahora es 1

SELECT 'El nivel de anidamiento es', @@TRANCOUNT INSERT INTO Calificacion VALUES (2004001, 100, 0) BEGIN TRAN TranInterna1

@@TRANCOUNT ahora es 2.

SELECT 'El nivel de anidamiento es', @@TRANCOUNT INSERT INTO Calificacion VALUES (2004002, 200, 85) BEGIN TRAN TranInterna2

@@TRANCOUNT ahora es 3.

SELECT 'El nivel de anidamiento es', @@TRANCOUNT

INSERT INTO Calificacion VALUES (2004002, 100, 100) ROLLBACK TRAN

@@TRANCOUNT es 0 y se deshace la transaccin externa y todas las internas.

SELECT 'El nivel de anidamiento es', @@TRANCOUNT SELECT * FROM Calificacion

En este caso no se inserta nada puesto que el ROLLBACK TRAN deshace todas las transacciones dentro de nuestro anidamiento hasta la transaccin ms externa y adems hace @@TRANCOUNT=0 Supone este funcionamiento asimtrico del COMMIT y del ROLLBACK un problema? Pues la verdad es que no. La manera de tratar las transacciones por el SQL Server es la que nos permite programar de manera natural los anidamientos. De todos modos, si queremos ir un poco ms lejos hay una cuarta sentencia para trabajar con transacciones: SAVE TRAN SAVE TRAN Esta sentencia crea un punto de almacenamiento dentro de una transaccin. Esta marca sirve para deshacer una transaccin en curso slo hasta ese punto. Por supuesto nuestra transaccin debe continuar y terminar con un COMMIN TRAN (o los que hagan falta) para que todo se guarde o con un ROLLBACK TRAN para volver al estado previo al primer BEGIN TRAN.
BEGIN TRAN TranExterna -- @@TRANCOUNT ahora es 1

SELECT 'El nivel de anidamiento es', @@TRANCOUNT INSERT INTO Test VALUES (1) BEGIN TRAN TranInterna1 -- @@TRANCOUNT ahora es 2. SELECT 'El nivel de anidamiento es', @@TRANCOUNT INSERT INTO Test VALUES (2) SAVE TRAN Guardada BEGIN TRAN TranInterna2 -- @@TRANCOUNT ahora es 3. SELECT 'El nivel de anidamiento es', @@TRANCOUNT INSERT INTO Test VALUES (3) ROLLBACK TRAN Guadada -- se deshace lo hecho el punto guardado. SELECT 'El nivel de anidamiento es', @@TRANCOUNT --Ahora podemos decidir si la transaccin se lleva a cabo --o se deshace completamente --Para deshacerla un ROLLBACK bastar como hemos visto --Pero para guardar la transaccin hace falta reducir @@TRANCOUNT a 0 COMMIT TRAN TranInterna1 -- Reduce @@TRANCOUNT a 2. SELECT 'El nivel de anidamiento es', @@TRANCOUNT COMMIT TRAN TranInterna1 -- Reduce @@TRANCOUNT a 1. -- Pero no se guarda nada en la base de datos. SELECT 'El nivel de anidamiento es', @@TRANCOUNT COMMIT TRAN TranExterna -- Reduce @@TRANCOUNT a 0. -- Se lleva a cabo la transaccin externa y todo lo que conlleva. SELECT 'El nivel de anidamiento es', @@TRANCOUNT SELECT * FROM Test

Si no ponemos el nombre del punto salvado con SAVE TRAN al hacer un ROLLBACK TRAN se deshace la transaccin ms externa y @@TRANCOUNT se pone a 0. Como podemos ver el uso de transacciones no es complicado, e incluso las transacciones anidadas si se tratan con cuidado son fciles de manejar. Como

siempre si hay alguna duda la mejor fuente de ejemplos y soluciones son los BOL del SQL Server. 3.6.3.1. 3.6.3.2. TCNICA DIDCTICA Exposicin del profesor. MATERIAL DE APOYO

3.6.4. ACTIVIDADES DE APRENDIZAJE 3.6.4.1. ACTIVIDAD DE APRENDIZAJE 1 A16-EC8 Transacciones. 3.6.4.1.1. INSTRUCCIONES Realizar las siguientes transacciones en la base de datos ESQUINITA: 1. No permitir vender si no hay suficientes productos en existencias. 2. al momento de comprar productos aumentar las existencias de productos. 3. Realizar un pago de un cliente, se debe insertar un pago nuevo mas aparte actualizar el campo de Resto de la tabla VentaC 4. Eliminar producto (no se permite mientras haya alguna venta a credito para este producto) a) Valor actividad: 10 Puntos b) Producto esperado: Cuatro operaciones basicas para las base de datos hechas almacenadas. c) Fecha inicio: d) Fecha entrega: e) Forma de entrega: Documento f) Tipo de Actividad: Equipo (3 gentes) 3.6.4.1.2. CRITERIO DE EVALUACIN DE LA ACTIVIDAD 1
ACTIVIDAD DESARROLLO Verificar que todas las transacciones funcionen dentro de la base de datos. Deben de ser entregadas en papel. Total PONDERACIN

Transacciones

10 puntos

10 Puntos

3.6.5. RESULTADO DE APRENDIZAJE Validar ciertas reglas de integridad, para evitar inconsistencia de la informacin. 3.6.6. BIBLIOGRAFA Ayuda de SQL Server 2000

3.6.7. DOCUMENTOS Manual SQL Server 2000 Standard final

UNIDAD TEMATICA 4. SEGURIDAD Una base de datos debe tener un sistema de seguridad slido para controlar qu actividades se pueden realizar y qu informacin se puede ver y modificar. Un sistema de seguridad slido garantiza la proteccin de los datos, independientemente de la manera en que los usuarios tienen acceso a la base de datos.

4.1. SEGURIDAD y AUTORIZACIN EN BASES DE DATOS 4.1.1. OBJETIVO DE APRENDIZAJE Saber controlar algunos aspectos mas importantes de la seguridad que SQL Server 2000 ofrece. 4.1.2. RECURSO TIEMPO DEL TEMA 1 hora 4.1.3. DESARROLLO

Las Bases de Datos (BDs) incluidas hoy en da en los sistemas de informacin de cualquier organizacin, nacen con el fin de resolver las limitaciones que en algunos casos presentan los ficheros para el almacenamiento de informacin. En los entornos de Bases de Datos, las diferentes aplicaciones y usuarios utilizan un nico conjunto de datos integrado a travs de un Sistema de Gestin de Bases de Datos (SGBD). De esta forma se pueden resolver problemas como duplicacin de informacin, inconsistencia de los datos y dependencia entre programa y estructura de datos. Por otra parte, la agrupacin de datos pertenecientes a distintos usuarios y catalogados en niveles de seguridad diferentes aumenta los riesgos en cuanto a la seguridad de los datos. El sistema de BD debe controlar si est autorizada cada operacin sobre la BD. Para conseguir un entorno de BD seguro se han de identificar las amenazas reales, elegir las polticas de seguridad adecuadas que establezcan mecanismos de prevencin as como mtodos que comprueben que no se han producido accesos ilcitos.

Las BDs que contienen informacin sobre datos financieros son un blanco tentador para los ladrones. Asmismo, las BDs que contienen informacin referentes a las operaciones de una compaa pueden ser de inters para sus competidores sin escrpulos. Tambin existen BD que por su contenido personal deben ser mantenidas en estricto secreto. Por otra parte, la prdida de operatividad del SGBD o de informacin de sus BDs es un problema que afecta muy seriamente al funcionamiento de una compaa. Una amenaza contra la seguridad de las BDs es un agente hostil que puede difundir o modificar informacin gestionada por el SGBD sin la debida autorizacin. Las amenazas contra la seguridad se clasifican en accidentales y fraudulentas. Las primeras son consecuencia de accidentes, errores de hardware o software y fallos humanos, mientras que las segundas son realizadas intencionadamente por usuarios no autorizados o agentes hostiles. Las violaciones que puede sufrir un entorno de BD consisten en lecturas, modificaciones y borrado de datos. Las consecuencias de estas violaciones son: difusin de informacin confidencial, modificacin no autorizada de datos e incluso denegacin de servicio a usuarios. A continuacin se estudian dos aspectos de seguridad que afectan particularmente a las BDs como son la deduccin ilcita de informacin confidencial a partir de informacin accesible y vulneraciones de la integridad de sus datos. Tambin se enumeran otros aspectos de seguridad importantes a tener en cuenta en un SGBD.3 Inferencia Las vulneraciones en un SGBD debidas a la inferencia permiten deducir informacin confidencial de la BD. Por ejemplo, cuando en una BD tenemos dos campos relacionados por una funcin matemtica siendo uno accesible y el otro secreto, si el atacante conoce la relacin podr hacerse fcilmente con los datos secretos. Tambin se considera inferencia cuando se reduce el nivel de incertidumbre sobre ciertos datos. Por ejemplo, si se pretende mantener en secreto donde va el jet privado del presidente y en la BD que gestiona los vuelos gubernamentales aparece el nmero de litros de combustible que se han cargado en el avin podremos, con un sencillo clculo, acotar los lugares a
3

http://www.sc.ehu.es/jiwibmaj/ApuntesCastellano/TEMA_9-bd.pdf (02/08/05)

los que puede ir. La inferencia de informacin secreta se puede realizar aplicando nicamente el sentido comn, o utilizando informacin auxiliar.

Agregacin Agregacin consiste en el proceso de combinar mltiples objetos de una BD en un objeto con un nivel de seguridad mayor que sus partes. Si se toman objetos de tipos diferentes se llama agregacin inferencial, si se combinan objetos del mismo tipo se denomina agregacin cardinal. Los dos tipos precisan de diferente forma de prevencin.

Integridad de la BD La integridad de las BDs es un tema ampliamente tratado en la literatura de BDs. Las vulneraciones de la integridad de la BD permiten la modificacin, adicin o borrado de informacin de la BD. La integridad se debe garantizar tambin frente a errores del sistema, virus y sabotajes que puedan daar los datos almacenados. Este tipo de proteccin se consigue mediante controles del sistema apropiados, procedimientos de respaldo y recuperacin y tambin mediante procedimientos de seguridad ad hoc4. En general podemos diferenciar dos peligros que requieren tratamientos diferentes. Por una parte tenemos el problema de la consistencia de los datos debido a errores en el sistema y por otra los usuarios que pretenden realizar modificaciones no autorizadas en la BD. EL SGBD debe mantener la consistencia de los datos incluidos en la BD frente a peligros como la cada del sistema, bloqueo mutuo entre procesos que realizan accesos concurrentes, etc. Los accesos para realizar modificaciones en la BD son tareas delicadas que la puede dejar inconsistente. Por ejemplo, si mientras se est modificando un registro de la BD hay un corte de fluido elctrico, no podremos estar seguros de que se habr quedado grabado en la BD. Para mantener la consistencia, la SGBD trabaja con transacciones, que son unidades de programa que realizan una nica funcin lgica en una aplicacin de la BD.

Procedimientos almacenados del sistema que permiten la supervisin

Las transacciones deben cumplir dos requisitos: (1) ser atmicas, esto es, todos las operaciones asociadas a una transaccin deben ejecutarse por completo o ninguna de ellas, y (2) ser correctas, es decir, cada transaccin debe ser un programa que conserve la consistencia de la BD. Si se produce algn incidente durante la ejecucin de una transaccin que deje la BD inconsistente el SGBD debe recuperar el estado previo a dicha transaccin. Los procedimientos de respaldo y recuperacin tienen como objetivo poder recuperar un estado anterior de la BD. Para ello, mantienen en un fichero (fichero LOG o Bitcora de la BD) informacin sobre las transacciones que se realizan. Si por cualquier razn se detecta que se pierde la consistencia en la BD el sistema de recuperacin deshace las modificaciones realizadas por las ltimas transacciones hasta dejar la BD consistente. Para asegurar la integridad operativa de la BD se ha de controlar la consistencia lgica de los datos cuando se producen transacciones concurrentes. Por ejemplo, cuando un agente desea modificar un registro mientras otro lo esta leyendo. Cuando se pueden producir accesos simultneos a un mismo objeto de la BD la prctica comn consiste en bloquear el objeto accedido el tiempo que dure la operacin y liberarlo una vez completada. Esta tcnica, sin embargo, tiene que verificar que no se produzcan bloqueos mutuos entre varias aplicaciones. En cuanto a los intentos de acceso indebido con el fin de modificar la BD, en general las polticas de integridad se basan en limitar los privilegios a los usuarios en cada momento de tal forma que cada usuario slo puede acceder a los datos que precisa para su trabajo y utilizando nicamente las operaciones estrictamente necesarias. Las restricciones de privilegios no slo se aplican a departamentos dentro de una organizacin sino tambin a grupos de usuarios con tareas comunes. Una mejora para realizar esto de forma ordenada consiste en utilizar los roles que permiten agrupar usuarios que comparten los mismos privilegios. As, el SGBD puede controlar ms fcilmente las actividades de los usuarios y detectar cambios en los privilegios otorgados a cada role (ver figura 4.1). Adems, el administrador de la BD puede fcilmente modificar los privilegios a grupos de usuarios cambiando un nico role.

Fig. 4.1 : Ejemplo de control de acceso basado en roles.

El SGBD tambin puede garantizar la integridad semntica de los datos manteniendo los valores en los rangos que se les hayan asignado. Las restricciones de integridad representan este tipo de controles. Esto debe ser cuidado cuando se hace el diseo de la BD.

En general para anular los efectos de operaciones que han alterado inadecuadamente la BD se emplean los mecanismos de respaldo y recuperacin.

Seguridad en sql server

SQL Server valida a los usuarios con 2 niveles de seguridad; autentificacin del login y validacin de permisos en la Base de Datos de cuentas de usuarios y de roles. La autentificacin identifica al usuario que est usando una cuenta y verifica slo la habilidad de conectarse con SQL Server. El usuario debe tener permiso para accesar a las Bases de Datos en el Servidor. Esto se cumple para asignar permisos especficos para la Base de Datos, para las cuentas de usuario y los roles. Los permisos controlan las actividades que el usuario tiene permitido realizar en la Base de Datos del SQL Server.

Autentificacin del login:

Un usuario debe tener una cuenta para conectarse al SQL Server.

Este

reconoce 2 mecanismos de autentificacin: Autentificacin de SQL Server y de Windows NT. Cada uno tiene un diferente tipo de cuenta.

Autentificacin de sql server

Cuando se usa, un administrador del Sistema de SQL Server, define una cuenta y un password WQL Server. Los usuarios deben suministrar tanto el login como el password cuando se conectan al SQL Server.

Autentificacin de windows nt

Cuando se usa, el usuario no necesita de una cuenta de SQL Server, para conectarse. Un administrador del sistema debe definir, ya sea cuentas de Windows NT o grupos de Windows NT como cuentas vlidas de SQL Server.

Modo de autentificacin

Cuando SQL Server est corriendo en Windows NT, un sistema administrador puede especificar que est corriendo en uno de 2 modos de autentificacin: Modo de autentificacin de Windows NT: Slo est autorizada la autentificacin de Windows NT. Los usuarios no pueden usar cuentas de SQL Server. Modo mixto: Cuando se usa este modo de autentificacin, los usuarios se pueden conectar a SQL Server con la autentificacin de Windows NT o con la de SQL Server.

Cuentas de usuario y roles en una base de datos

Despus de que los usuarios han sido autentificados, y se les ha permitido conectarse al SQL Server, deben tener cuentas en la Base de Datos. Las cuentas de usuario y los roles, identifican permisos para ejecutar tareas.

Cuentas de usuarios de la base de datos

Las cuentas de usuario utilizadas para aplicar permisos de seguridad son las de usuarios, o grupos de Windows NT o las de SQL Server. Las cuentas de usuario son especficas para cada Base de Datos.

Roles

Permiten reunir a los usuarios en una sola unidad a la cual se le pueden aplicar permisos. SQL Server contiene roles de servidor y de Base de Datos

predefinidos, para tareas administrativas comunes, de manera que pueden asignrsele determinados permisos administrativos a un usuario en particular. Tambin se pueden crear roles de Base de Datos definidos por el usuario. En SQL Server, los usuarios pueden pertenecer a varios roles: Roles fijos del Servidor: Proveen agrupamientos con privilegios administrativos a nivel del Servidor. Son administrados

independientemente de las Bases de Datos de usuarios a nivel servidor. Roles fijos de la Base de Datos: Proveen agrupamientos con privilegios administrativos a nivel de Base de Datos.

Roles de usuarios definidos en la Base de Datos: Tambin se pueden crear roles para Base de Datos, para representar un trabajo desarrollado por un grupo de empleados dentro de una organizacin. No es necesario asignar y quitar permisos a cada persona. En funcin de que cambia un rol, se pueden cambiar fcilmente los permisos del rol y hacer que los cambios se apliquen automticamente a todos los miembros del rol.

Validacin de permisos

Dentro de cada Base de Datos, se asignan permisos a las cuentas de usuarios y a los roles para permitir o limitar ciertas acciones. SQL Server acepta

comandos despus de que un usuario ha accesado a la Base de datos.

SQL Server realiza los siguientes pasos cuando valida permisos: 1. Cuando el usuario realiza una accin, tal como ejecutar un comando de Transact-SQL o elegir una opcin de un men, los comandos de Transact SQL son enviadas al SQL Server. 2. Cuando SQL Server recibe un comando de Transact SQL, checa que el usuario tenga permiso de ejecutar dicha instruccin. 3. Despus, SQL realiza cualquiera de las siguientes acciones: a) Si el usuario no tiene los permisos adecuados, SQL Server devuelve un error. b) Si el usuario tiene los permisos adecuados, SQL Server realiza la accin.

Crear cuentas de seguridad

Cada usuario debe obtener acceso a una instancia de Microsoft SQL Server a travs de una cuenta de inicio de sesin que establece su capacidad para conectarse (autenticacin). A continuacin, esta cuenta de inicio de sesin se asigna a una cuenta de usuario de SQL Server que se utiliza para controlar las actividades realizadas en la base de datos (validacin de permisos). Por tanto, se asigna un nico inicio de sesin a cada cuenta de usuario creada en cada base de datos a la que el inicio de sesin tiene acceso. Si en una base de datos no hay ninguna cuenta de usuario, el usuario no podr tener acceso a ella, aunque pueda conectarse a una instancia de SQL Server. El inicio de sesin se crea en Microsoft Windows NT 4.0 o Windows 2000, y no en SQL Server. A continuacin, se concede permiso a este inicio de sesin para conectarse a una instancia de SQL Server. Se concede acceso al inicio de sesin en SQL Server. Cmo agregar una cuenta de inicio de sesin de SQL Server (Administrador corporativo) Para agregar una cuenta de inicio de sesin de SQL Server 1. Expanda un grupo de servidores y, a continuacin, un servidor. 2. Expanda Seguridad, haga clic con el botn secundario del mouse (ratn) en Inicios de sesin y, a continuacin, haga clic en Nuevo inicio de sesin. 3. En Nombre, escriba un nombre para el inicio de sesin de Microsoft SQL Server. 4. En Autenticacin, seleccione Autenticacin de SQL Server. 5. Opcionalmente, en Contrasea, escriba una contrasea. 6. Opcionalmente:

En Base de datos, haga clic en la base de datos predeterminada a la que se conecta la cuenta de inicio de sesin despus de iniciar una sesin en una instancia de SQL Server.

En Idioma, haga clic en el idioma predeterminado en el que se mostrarn los mensajes al usuario.

4.1.3.1. 4.1.3.2.

TCNICA DIDCTICA Exposicin del profesor. MATERIAL DE APOYO

4.1.4. ACTIVIDADES DE APRENDIZAJE 4.1.4.1. ACTIVIDAD DE APRENDIZAJE 1 A17-EC9 Crear usuarios. 4.1.4.1.1. INSTRUCCIONES Crear 2 tipos de usuario, uno administrador (todos los derechos) y uno general (solo puede consultar y agregar informacin).

a) b) c) d) e) f)

Valor actividad: 5 Puntos Producto esperado: Dos usuarios dentro de la base de datos Fecha inicio: Fecha entrega: Forma de entrega: Archivo Tipo de Actividad: Individual 4.1.4.1.2. CRITERIO DE EVALUACIN DE LA ACTIVIDAD 1
ACTIVIDAD DESARROLLO Verificar que los dos usuario este creados en la base de datos. Total PONDERACIN 5 puntos 5 Puntos

Crear usuarios

4.1.5. RESULTADO DE APRENDIZAJE Concesin y renovacin de privilegios a los usuarios. 4.1.6. BIBLIOGRAFA Ayuda de SQL Server 2000 4.1.7. DOCUMENTOS Manual SQL Server 2000 Standard final 4.2. TIPOS DE SEGURIDAD 4.2.1. OBJETIVO DE APRENDIZAJE Aplicar los mecanismos de seguridad que SQL Server 2000 ofrece para aprovecharlos al mximo. 4.2.2. RECURSO TIEMPO DEL TEMA 2 horas

4.2.3. DESARROLLO

Mecanismos de seguridad en SGBD Anlogamente a lo que sucede en los sistemas operativos, los SGBDs han de ser diseados teniendo en cuenta la seguridad desde las primeras etapas del desarrollo. El SGBD juega un papel crucial en cuanto a la seguridad en una organizacin. Obviamente, el sistema operativo debe proporcionar ciertos mecanismos de proteccin bsicos. Por ejemplo, el sistema operativo ha de garantizar la identidad del usuario y la proteccin de los ficheros fsicos sobre los que est soportada la BD. Por otra parte, el SGBD debe hacerse cargo de restricciones de seguridad dependientes de las aplicaciones. Los

requerimientos de seguridad principales deben hacer frente a los siguientes aspectos: Acceso a diferentes niveles de granularidad. En un entorno de BD se puede acceder a los datos a diferentes niveles (BD, coleccin de relaciones, una relacin, conjunto de columnas de una relacin, algunas filas de una relacin etc.). El SGBD debe establecer controles de acceso a cada nivel de granularidad. Varios modos de acceso. Los controles de acceso deben ser distintos segn la operacin a realizar. Por ejemplo Select, Insert, UPDATE, DELETE en SQL. Diferentes tipos de control de acceso. El acceso se puede regular mediante diferentes tipos de controles: control basado en el nombre del objeto a acceder, control basado en el contenido del objeto a acceder, control dependiente del contexto (ej.: permitir o denegar el acceso dependiendo de ciertas variables de entorno como el da, hora o terminal), control dependiente de la secuencia de acciones del usuario y finalmente control dependiente del procedimientos auxiliares. Autorizacin dinmica. El SGDB debe ser capaz de modificar las autorizaciones de los usuarios dinmicamente mientras la BD sea operativa. Proteccin multinivel. Las BD pueden beneficiarse del mecanismo de proteccin multinivel explicado en el captulo anterior. Con este mtodo se etiqueta cada objeto de la BD con un nivel de seguridad. Teniendo en cuenta los diferentes niveles de granularidad dentro de una BD, podemos tener una

relacin etiquetada con un nivel de seguridad y los atributos de dicha relacin tienen su propio nivel de seguridad. Auditora. Los eventos importantes o sospechosos que se produzcan durante operaciones con la BD deben ser almacenados para su posterior anlisis en busca de acciones no autorizadas. Las secuencias de acciones realizadas por un mismo usuario puede ser utilizadas para detectar posibles inferencias. Esta prctica puede ser un agente disuasor contra los usuarios que tengan malas intenciones. El problema de la auditoria estriba en la cantidad de informacin que se ha de almacenar si deseamos controlar operaciones a un bajo nivel de granularidad. Adems de estos requerimientos, el SGBD debe asegurarse de que no existan canales encubiertos a travs de los cuales de pueda divulgar informacin confidencial, puertas traseras que permitan acceder a usuarios no autorizados. Asmismo se ha de controlar el flujo de la informacin. Normalmente, el recurso que se utiliza para restringir el acceso a las BD son las vistas. Las vistas son una forma de proporcionar a cada usuario un modelo personalizado de la BD. Una vista puede ocultar al usuario los datos que no necesita ver, y de la misma forma, los datos a los que tiene negado el acceso. El objetivo de seguridad se logra si se dispone de un mecanismo que limite a los usuarios a utilizar sus vistas personales. Otros mecanismos sencillos y evidentes que mejoran la seguridad en las BDs son contrastar peridicamente los datos informticos con los reales e implementar las aplicaciones que operen con el sistema de BD de forma que sean fciles de utilizar para evitar en los posible los errores. Otra medida de seguridad interesante es guardar las tablas de la BD y no dejarlas disponibles a terceros que puedan extraer informacin de su estructura que luego les sirva para realizar deducciones de la BD. La mejor forma de ocultarlas ser mediante cifrado. Finalmente, una cuestin a tener en cuenta en los sistemas de informacin es la eficiencia. Los controles de seguridad entraan un costo computacional adicional por lo que se ha de lograr un compromiso entre mantener el tiempo de respuesta de la BD en lmites razonables y la BD segura.

USUARIOS Un identificador (Id.) de usuario identifica a un usuario dentro de una base de datos. Todos los permisos y la propiedad de los objetos de la base de datos estn controlados por la cuenta del usuario. Las cuentas de usuario son especficas de una base de datos; la cuenta de usuario xyz de la base de datos sales es diferente de la cuenta de usuario xyz de la base de datos inventory, aunque ambas cuentas tengan el mismo Id. Los Id. de los usuarios son definidos por los miembros de la funcin fija db_owner de la base de datos. Por s mismo, el Id. de inicio de sesin no concede al usuario los permisos para tener acceso a los objetos de las bases de datos. El Id. de inicio de sesin tiene que estar asociado a un Id. de usuario en cada base de datos para que quien se conecte con dicho Id. de inicio de sesin pueda tener acceso a los objetos de la base de datos. Si en una base de datos no se ha asociado explcitamente un Id. de inicio de sesin a un Id. de usuario, se asocia al Id. del usuario guest. Si una base de datos no tiene la cuenta de usuario guest, el inicio de sesin no puede tener acceso a la base de datos a menos que se asocie a una cuenta de usuario vlida. Cuando se define un Id. de usuario, se asocia a un Id. de inicio de sesin. Por ejemplo, un miembro de la funcin db_owner puede asociar el inicio de sesin NETDOMAIN\Joe de Microsoft Windows 2000 al Id. de usuario abc en la base de datos sales y el Id. de usuario def en la base de datos employee. La asociacin predeterminada es que el Id. de inicio de sesin y el Id. de usuario sean iguales. Este ejemplo muestra la concesin de acceso a una base de datos de una cuenta de Windows 2000 y la asociacin del inicio de sesin a un usuario de la base de datos:

USE master GO sp_grantlogin 'NETDOMAIN\Sue' GO sp_defaultdb @loginame = 'NETDOMAIN\Sue', defdb = 'sales' GO

USE sales GO sp_grantdbaccess 'NETDOMAIN\Sue', 'Sue' GO

En la instruccin sp_grantlogin, al usuario NETDOMAIN\Sue de Windows 2000 se le concede acceso a Microsoft SQL Server 2000. La instruccin sp_defaultdb establece que la base de datos sales sea su base de datos predeterminada. La instruccin sp_grantdbaccess concede al inicio de sesin NETDOMAIN\Sue acceso a la base de datos sales y establece que Sue es su Id. de usuario dentro de sales. Este ejemplo muestra la definicin de un inicio de sesin en SQL Server, asignando una base de datos predeterminada y asociando el inicio de sesin a un usuario de la base de datos:

USE master GO sp_addlogin @loginame = 'TempWorker', @password = 'fff', defdb = 'sales' GO USE sales GO sp_grantdbaccess 'TempWorker' GO

La instruccin sp_addlogin define un inicio de sesin en SQL Server que va a ser utilizado por varios empleados temporales. La instruccin especifica tambin la base de datos sales como base de datos predeterminada para el inicio de sesin. La instruccin sp_grantdbaccess concede al inicio de sesin TempWorker acceso a la base de datos sales; como no se especifica el nombre del usuario, el valor predeterminado es TempWorker. Un usuario de una base de datos se identifica por su Id. de usuario, no por su Id. de inicio de sesin. Por ejemplo, sa es una cuenta de inicio de sesin que se asigna a la cuenta de usuario especial dbo (propietario de la base de datos) en todas las bases de datos. Todas las instrucciones Transact-SQL

relacionadas con la seguridad utilizan el Id. de usuario como el parmetro security_name. La administracin y la compresin de los permisos son menos confusas si los miembros de la funcin fija sysadmin del servidor y de la funcin fija db_owner de la base de datos configuran el sistema de tal manera que el Id. de inicio de sesin y el Id. de usuario sean iguales en cada usuario, pero no es obligatorio. La cuenta guest es una cuenta de usuario especial en las bases de datos SQL Server. Si un usuario utiliza una instruccin USE base de datos para tener acceso a una base de datos en la que no tiene asociada una cuenta de usuario, se le asociar al

INTERFAZ DE SEGURIDAD DE SQL SERVER

PROPIEDADES DE SQL SERVER: FICHA SEGURIDAD Utilice esta ficha para ver o especificar las siguientes opciones.

Opciones SQL Server y Windows Especifica que los usuarios pueden conectarse a la instancia de Microsoft SQL Server mediante la autenticacin de SQL Server y la autenticacin de Windows. Esto se considera una autenticacin en Modo mixto. Los usuarios que se conectan a travs de una cuenta de usuario de Microsoft Windows NT 4.0 o Windows 2000 pueden utilizar las conexiones en las que se confa, ya sea en el Modo de autenticacin de Windows o en el Modo mixto. Cuando un usuario se conecta a travs de una cuenta de usuario de Windows NT 4.0 o Windows 2000, SQL Server vuelve a validar el nombre y la contrasea de la cuenta solicitando a Windows NT 4.0 o Windows 2000 la informacin. Slo Windows Especifica que los usuarios pueden conectarse a la instancia de SQL Server utilizando slo la autenticacin de Windows. Ninguna Deshabilita la auditora. ste es el valor predeterminado para esta configuracin. Correcto Audita en los intentos de inicio de sesin que sean correctos. Es posible registrar los accesos de usuario que se intente, as como informacin de registro de SQL Server de otro tipo; tambin puede habilitar la auditora para ambos modos de seguridad y registrar informacin sobre conexiones, tanto en las que se confa como en las que no. Las entradas de registro para estos sucesos aparecen en el registro de aplicacin de Microsoft Windows, en el registro de errores de SQL Server o en ambos, segn cmo se haya configurado la opcin de registro para la instancia de SQL Server. Si selecciona esta opcin, debe detener y reiniciar el servidor para habilitar la auditora. Error Audita en los intentos de inicio de sesin que no sean correctos. Es posible registrar los accesos de usuario que se intente, as como informacin de registro de SQL Server de otro tipo; tambin puede habilitar la auditora para ambos modos de seguridad y registrar informacin sobre conexiones, tanto en las que se confa como en las que no. Las entradas de registro para estos

sucesos aparecen en el registro de aplicacin de Windows, en el registro de errores de SQL Server o en ambos, segn cmo se haya configurado la opcin de registro para la instancia de SQL Server. Si selecciona esta opcin, debe detener y reiniciar el servidor para habilitar la auditora. Todas Audita tanto los intentos de inicio de sesin correctos como los errneos. Es posible registrar los accesos de usuario que se intente, as como informacin de registro de SQL Server de otro tipo; tambin puede habilitar la auditora para ambos modos de seguridad y registrar informacin sobre conexiones, tanto en las que se confa como en las que no. Las entradas de registro para estos sucesos aparecen en el registro de aplicacin de Windows, en el registro de errores de SQL Server o en ambos, segn cmo se haya configurado la opcin de registro para la instancia de SQL Server. Si selecciona esta opcin, debe detener y reiniciar el servidor para habilitar la auditora. Cuenta del sistema Especifica que la cuenta de servicio de la instancia de SQL Server es la cuenta integrada del administrador del sistema local. Esta cuenta Especificar que la cuenta de servicio de SQL Server es una cuenta de dominio de Microsoft Windows NT o de Windows 2000. Este campo est habilitado slo si utiliza una cuenta de administrador vlida de Windows NT 4.0 o Windows 2000 en el equipo en donde se est ejecutando la instancia registrada de SQL Server. Contrasea Especifica la contrasea para la cuenta de dominio de Windows NT 4.0 o Windows 2000. Este campo slo se habilita si utiliza una cuenta de administrador de Windows NT 4.0 o Windows 2000 en el equipo donde se ejecuta la instancia registrada de SQL Server.

PROPIEDADES DEL USUARIO DE LA BASE DE DATOS: FICHA GENERAL Utilice esta ficha para ver o especificar las siguientes opciones. Opciones Nombre de inicio de sesin Especifica el nombre de inicio de sesin del usuario de la base de datos. Nombre de usuario Especifica el nombre del usuario de la base de datos. Permisos Muestra el cuadro de dilogo de propiedades Propiedades del usuario de la base de datos, donde puede especificar los permisos del usuario para la base de datos. Permitir en la funcin de base de datos Especifica la funcin de base de datos a la que pertenece el usuario. Propiedades Muestra el cuadro de dilogo Propiedades de la funcin de la base de datos, donde puede agregar o quitar usuarios de la funcin.

4.2.3.1. 4.2.3.2.

TCNICA DIDCTICA Exposicin del profesor. MATERIAL DE APOYO

4.2.4. ACTIVIDADES DE APRENDIZAJE 4.2.4.1. ACTIVIDAD DE APRENDIZAJE 1 A18-EC10 Seguridad de SQL. 4.2.4.1.1. INSTRUCCIONES Crear un usuario de Windows nuevo. Despus con el usuario que estas firmado (checar cual es la contrasea) agregarlo a SQL Server 2000 como la cuenta de inicio de servicio. Posterior a todo esto cerrar la sesion y abrir sesion con el usuario nuevo, verifiacar que la base de datos ESQUINITA no se puede acceder desde este usuario. a) Valor actividad: 5 Puntos b) Producto esperado:Ralacionar el usuario de Windows con SQL Server 2000 c) Fecha inicio: d) Fecha entrega: e) Forma de entrega:Base de datos con seguridad Windows f) Tipo de Actividad: Individual 4.2.4.1.2. CRITERIO DE EVALUACIN DE LA ACTIVIDAD 1
ACTIVIDAD DESARROLLO Checar que la base de datos efectivamente no pueda se accesada por ningun otro usuario salvo el que esta agregado. Total PONDERACIN

Seguridad de SQL

5 puntos

5 Puntos

4.2.5. RESULTADO DE APRENDIZAJE Brindarle mayor seguridad a nuestra base de datos. 4.2.6. BIBLIOGRAFA Manual SQL Server 2000 Standard final 4.2.7. DOCUMENTOS Ayuda SQL Server 2000, SQL Server 7.0

4.3. CONTROL DE ACCESO DISCRECIONAL BASADO EN CONCESIN / RENOVACION DE PRIVILEGIOS. 4.3.1. OBJETIVO DE APRENDIZAJE

Poder administrar los derechos y restricciones de los usuarios respecto de las bases de datos. 4.3.2. RECURSO TIEMPO DEL TEMA 2 horas 4.3.3. DESARROLLO

PROPIEDADES DEL USUARIO DE LA BASE DE DATOS: FICHA PERMISOS Utilice esta ficha para ver o especificar las siguientes opciones. Una marca negra indica que el permiso se ha concedido. Una X roja indica que el permiso se ha denegado. Opciones Usuario de la base de datos Especifica el usuario para el que se muestran los permisos. Enumerar todos los objetos Enumera todos los objetos de la base de datos seleccionada. Haga clic en el cuadro correspondiente para modificar los permisos del usuario para la base de datos.

Enumerar slo los objetos con permisos para este usuario Enumera slo los objetos para los que el usuario tiene permiso. Haga clic en el cuadro correspondiente para modificar los permisos del usuario para la base de datos. Columnas Muestra el cuadro de dilogo Permisos de columna, donde puede administrar los permisos para cada columna. ADMINISTRAR PERMISOS Cuando los usuarios se conectan a una instancia de Microsoft SQL Server, las actividades que pueden realizar se determinan mediante los permisos que se conceden a:

Sus cuentas de seguridad. Los grupos o jerarquas de funciones de Microsoft Windows NT 4.0 o Windows 2000 a los que pertenecen sus cuentas de seguridad.

El usuario debe tener los permisos adecuados para realizar cualquier actividad que implique cambiar la definicin de una base de datos o el acceso a su contenido. La administracin de permisos incluye la concesin o revocacin de los derechos de usuario para:

Trabajar con datos y ejecutar procedimientos (permisos de objeto). Crear una base de datos o un elemento en la base de datos (permisos de instruccin).

Utilizar los permisos concedidos a las funciones predefinidas (permisos implcitos).

Permisos de objeto Al trabajar con datos o ejecutar un procedimiento, es necesario disponer de una clase de permisos conocida como permisos de objeto.

Permisos para las instrucciones SELECT, INSERT, UPDATE y DELETE, que pueden aplicarse a toda la tabla o vista.

Permisos para las instrucciones SELECT y UPDATE, que pueden aplicarse selectivamente a columnas individuales de una tabla o vista.

Permisos para la instruccin SELECT, que se puede aplicar a funciones definidas por el usuario.

Permisos para las instrucciones INSERT y DELETE, que afectan a toda una fila y, por ello, slo pueden aplicarse a la tabla o vista, y no a columnas individuales.

Permisos para la instruccin EXECUTE, que afecta a funciones y procedimientos almacenados.

Permisos de instruccin Las actividades que implica la creacin de una base de datos o de uno de sus elementos, como una tabla o un procedimiento almacenado, necesitan una clase diferente de permisos, llamados permisos de instruccin. Por ejemplo, si un usuario necesita crear una tabla en una base de datos, ser necesario otorgarle el permiso de instruccin CREATE TABLE. Los permisos de instruccin como, por ejemplo, CREATE DATABASE, se aplican a la instruccin en s y no a un objeto especfico definido en la base de datos. Los permisos de instruccin son:

BACKUP DATABASE BACKUP LOG CREATE DATABASE CREATE DEFAULT CREATE FUNCTION CREATE PROCEDURE CREATE RULE CREATE TABLE

CREATE VIEW

Permisos implcitos Los permisos implcitos controlan las actividades que slo pueden realizar los miembros de las funciones de sistema predefinidas o los propietarios de objetos de base de datos. Por ejemplo, un miembro de la funcin fija de servidor sysadmin hereda automticamente todos los permisos para realizar cualquier actividad o ver cualquier elemento de la instalacin de SQL Server. Los propietarios de objetos de base de datos tambin tienen permisos implcitos que les permiten realizar todas las actividades con los objetos que les pertenecen. Por ejemplo, si un usuario es propietario de una tabla, puede ver, agregar o eliminar datos en ella, modificar la definicin de la tabla o controlar sus permisos para permitir que otros usuarios trabajen con ella. 4.3.3.1. 4.3.3.2. TCNICA DIDCTICA Exposicin del profesor. MATERIAL DE APOYO

4.3.4. ACTIVIDADES DE APRENDIZAJE 4.3.4.1. ACTIVIDAD DE APRENDIZAJE 1

A19-T5 Concesion y Renovacin de privilegios. 4.3.4.1.1. INSTRUCCIONES El usuario general creado anteriormente (el cual solo podia consultar e insertar informacin), le agregamos el privilegio de ppoder modificar informacin. Creamos un tercer usuario el cual se llama supervisor el cual solo puede observar la informacin. a) b) c) d) e) f) Valor actividad: 5 Puntos Producto esperado: Tres usuarios en la base de datos Fecha inicio: Fecha entrega: Forma de entrega: Archivo Tipo de Actividad: Individual 4.3.4.1.2. CRITERIO DE EVALUACIN DE LA ACTIVIDAD 1
ACTIVIDAD Concesion y Renovacin de privilegios. DESARROLLO Checar que efectivamente los derechos o privilegios de los usuarios hayan sido alterados Total PONDERACIN 5 puntos 5 Puntos

4.3.5. RESULTADO DE APRENDIZAJE

Saber crear usuarios y poder renovar privilegios asi como quitarlos y agregar nuevos. 4.3.6. BIBLIOGRAFA Ayuda de sQL Server 2000 4.3.7. DOCUMENTOS SQL Server 7.0

4.4. SEGUIMIENTO DE AUDITORIA 4.4.1. OBJETIVO DE APRENDIZAJE Saber cuales son los mecanismos de suguridad que ofracen los manejadores de basas de datos en este caso SQL Server 2000 4.4.2. RECURSO TIEMPO DEL TEMA 2 horas 4.4.3. DESARROLLO

AUDITORA DE LA ACTIVIDAD DE SQL SERVER Microsoft SQL Server 2000 proporciona la auditora como una forma de trazar y registrar la actividad que ha tenido lugar en cada instancia de SQL Server, por ejemplo, inicios de sesin correctos o incorrectos. SQL Server 2000 tambin dispone de una interfaz, Analizador de SQL, para administrar los registros de auditora. Slo los miembros de la funcin fija de seguridad sysadmin pueden habilitar o modificar la auditora, y toda modificacin es un suceso auditable. Existen dos tipos de auditora:

la auditora, que proporciona cierto nivel de auditora, pero no requiere el mismo nmero de directivas que la auditora C2.

la auditora C25, que requiere que se sigan directivas de seguridad muy especficas

Ambos tipos de auditora se pueden realizar utilizando el Analizador de SQL.

La auditora C2 es necesaria si se est ejecutando un sistema certificado C2. Un sistema certificado C2 cumple con

un estndar gubernamental que define el nivel de seguridad. Para que Microsoft SQL Server tenga la certificacin C2, debe configurarlo en la configuracin C2 evaluada.

USAR EL ANALIZADOR DE SQL El Analizador de SQL proporciona la interfaz de usuario para la auditora de sucesos. Existen varias categoras de sucesos que se pueden auditar con el Analizador de SQL, por ejemplo:

la actividad del usuario final (todos los comandos de SQL, cierres e inicios de sesin, habilitacin de las funciones de aplicacin)

la actividad de DBA (DDL distintos de conceder, revocar, denegar y los sucesos de seguridad, y la configuracin (base de datos o servidor)

los sucesos de seguridad (conceder, revocar o denegar, agregar, quitar o configurar funcin o usuario de inicio de sesin)

los sucesos de herramientas (comandos de copia de seguridad, restaurar, insercin masiva, BCP, DBCC)

los sucesos del servidor (cerrar, pausa, inicio) los sucesos de auditora (agregar, modificar o detener auditora) Categora de sucesos Auditora de seguridad

Utilice la categora de sucesos Auditora de seguridad para supervisar la actividad de auditora.

Se puede auditar los siguientes aspectos de SQL Server mediante el Analizador de SQL:

fecha y hora del suceso usuario responsable de que ocurriera el suceso tipo de suceso xito o fracaso del suceso el origen de la solicitud (por ejemplo, el nombre del equipo con Microsoft Windows NT 4.0)

el nombre del objeto al que se obtuvo acceso el texto de la instruccin SQL (contraseas sustituidas por ****) Si es un miembro de la funcin fija de servidor sysadmin o securityadmin y restablece su propia contrasea mediante

sp_password con los tres argumentos especificados ('old_password', 'new_password', 'login'), el registro de auditora reflejar que se ha cambiado alguna contrasea. La auditora puede tener consecuencias importantes para el rendimiento. Si todos los contadores de auditora estn activados, las repercusiones sobre el rendimiento pueden ser importantes. Es necesario evaluar cuntos sucesos es necesario auditar en comparacin con las consecuencias que habr sobre el rendimiento. El anlisis de la auditora puede llevar tiempo, por lo que se recomienda ejecutar la actividad de auditora en un servidor distinto del servidor de produccin. Nota Si se inicia SQL Server con el indicador f, no se podr ejecutar la auditora. SUPERVISAR CON EL ANALIZADOR DE SQL El Analizador de SQL es una herramienta grfica que permite a los administradores del sistema supervisar sucesos de una instancia de Microsoft

SQL Server. Puede capturar y guardar datos acerca de cada suceso en un archivo o en una tabla de SQL Server para analizarlos posteriormente. Por ejemplo, puede supervisar un entorno de produccin para ver qu procedimientos empeoran el rendimiento al ejecutarse demasiado lentamente. Utilice el Analizador de SQL para supervisar nicamente los sucesos en los que est interesado. Si las trazas son demasiado grandes, puede filtrarlas a partir de la informacin que desea, de forma que slo se recopile un subconjunto de los datos del suceso. Si se supervisan demasiados sucesos, aumentar la sobrecarga del servidor y el proceso de supervisin, y podra hacer que el archivo o la tabla de traza crezcan demasiado, especialmente cuando el proceso de supervisin se realiza durante un perodo prolongado de tiempo. Cuando haya trazado los sucesos, el Analizador de SQL permite reproducir los sucesos capturados en una instancia de SQL Server, volviendo a ejecutar as los sucesos guardados tal y como se produjeron originalmente. Utilice el Analizador de SQL para:

Supervisar el rendimiento de una instancia de SQL Server. Depurar procedimientos almacenados e instrucciones Transact-SQL. Identificar consultas de ejecucin lenta. Probar procedimientos almacenados e instrucciones SQL en la fase de desarrollo de un proyecto mediante la ejecucin paso a paso de las instrucciones para confirmar que el cdigo funciona como se esperaba.

Solucionar problemas de SQL Server mediante la captura de sucesos en un sistema de produccin y su reproduccin en un sistema de prueba. Esto es til para propsitos de pruebas o depuracin, y permite a los usuarios seguir utilizando el sistema de produccin sin interferencias.

Auditar y revisar la actividad producida en una instancia de SQL Server. Esto permite a los administradores de seguridad revisar los sucesos de auditora, incluidos el xito o el error de un intento de inicio de sesin y problemas de permisos al tener acceso a instrucciones u objetos.

El Analizador de SQL proporciona una interfaz grfica de usuario a un conjunto de procedimientos almacenados, que se puede utilizar para supervisar una instancia de SQL Server. Por ejemplo, puede crear su propia aplicacin que utilice procedimientos almacenados del Analizador de SQL para supervisar SQL Server. Debe tener al menos 10 megabytes (MB) de espacio libre para ejecutar el Analizador de SQL. Si se redujera la cantidad de espacio libre a menos de 10 MB mientras se utiliza el Analizador de SQL, se detendrn todas las funciones del Analizador de SQL. INICIAR EL ANALIZADOR DE SQL El Analizador de SQL se inicia desde el men Inicio de Microsoft Windows NT 4.0, Microsoft Windows 2000 o Microsoft Windows 98, o desde el Administrador corporativo de SQL Server. En el modo de Autenticacin de Windows, la cuenta de usuario que se ejecuta en el Analizador de SQL debe conceder permiso para conectar a una instancia de SQL Server. Tambin se debe conceder permisos a la cuenta de inicio de sesin para ejecutar procedimientos almacenados del Analizador de SQL

PARA INICIAR EL ANALIZADOR DE SQL Cmo iniciar el Analizador de SQL (Administrador corporativo)

Para iniciar el Analizador de SQL 1. En el men Inicio, seleccione Programas, Microsoft SQL Server y, a continuacin, haga clic en Administrador corporativo. 2. En el men Herramientas, haga clic en Analizador de SQL.

4.4.3.1. 4.4.3.2.

TCNICA DIDCTICA Exposicin del profesor. MATERIAL DE APOYO

4.4.4. ACTIVIDADES DE APRENDIZAJE 4.4.4.1. ACTIVIDAD DE APRENDIZAJE 1

A20-T6 Configurar SQL Server para poder supervisar los sucesos.

4.4.4.1.1. INSTRUCCIONES Configurar SQL Server para que pueda llevar un registro de todos los movimientos que los usuarios realicen. a) b) c) d) e) f) Valor actividad: 5 Puntos Producto esperado: Reporte de eventos en SQL Server 2000 Fecha inicio: Fecha entrega: Forma de entrega: Documento impreso del reporte Tipo de Actividad: Equipo (3 gentes) 4.4.4.1.2. CRITERIO DE EVALUACIN DE LA ACTIVIDAD 1
DESARROLLO Checar el reporte impreso que se entrega para verificar que Configurar SQL Server para efectivamente este poder supervisar los sucesos. configurado el manejador de base de datos. Total ACTIVIDAD PONDERACIN

5 puntos

5 Puntos

4.4.4.2.

ACTIVIDAD DE APRENDIZAJE 2

A21-ER4 Examen Rpido de los temas 4.3 y 4.4 4.4.4.2.1. INSTRUCCIONES Formaular 5 preguntas de los temas mencionados y dictrselas a los alumnos. g) h) i) j) k) l) Valor actividad: Requisito Producto esperado: Preguntas contestadas Fecha inicio: Fecha entrega: Forma de entrega: Documento Tipo de Actividad: Individual 4.4.4.2.2. CRITERIO DE EVALUACIN DE LA ACTIVIDAD 1
ACTIVIDAD Examen Rpido DESARROLLO Preguntas contestadas Total PONDERACIN Requisito Requisito

4.4.5. RESULTADO DE APRENDIZAJE Poder auditar los mivimientos y operacines que los usuarios realicen, para poder determinar la razon en muchos casos de fallas en el sistema. 4.4.6. BIBLIOGRAFA Ayuda de SQL Server 2000 4.4.7. DOCUMENTOS Manual SQL Server 2000 Standard final

UNIDAD TEMATICA 5. BASES DE DATOS DISTRIBUIDAS

En un sistema de base distribuido, los datos almacenan en varios computadores. Los computadores de un sistema distribuido se comunican entre si a travs de diversos medios de comunicacin, tales como cables de alta velocidad a lneas telefnicas. No comparten la memoria principal ni el reloj.

Los procesadores de un sistema distribuido pueden variar en cuanto su tamao y funcin. Pueden incluir microcomputadoras y sistemas de computadores grandes de aplicacin general. Estos procesadores reciben diferentes nombres, tales como localidades, nodos, computadores, dependiendo en el contexto donde se mencionen. Nosotros utilizamos normalmente el termino localidad para hacer hincapi en el distribucin fsica de estos sistemas.

Un sistema distribuido de bases de datos consiste en un conjunto de localidades, cada una de las cuales puede participar en la ejecucin de transacciones que accedan a datos de una o varias localidades. La diferencia principal entre los sistemas de base de datos centralizados y distribuidos es que, en los primeros, los datos residen en una sola localidad, mientras que, en los ltimos, se encuentran en varias localidades.6

5.1. SISTEMAS DE BASES DE DATOS EN LAS ORGANIZACIONES 5.1.1. OBJETIVO DE APRENDIZAJE Identificar las caractersticas de un sistema de base de datos dentro de una organizacin especficamente funciones y ventajas. 5.1.2. RECURSOTIEMPO DEL TEMA 2 horas 5.1.3. DESARROLLO

ESTRUCTURA DE BASES DE DATOS DISTRIBUIDAS

FUNDAMENTOS DE BASES DE DATOS, Segunda Edicin, Henry F. Korth, Abraham Silberschatz Pag. 507

un sistema distribuido de base de datos consiste en un conjunto de localidades, cada una de las cuales mantienen un sistema de base de datos local. Cada localidad puede procesar transacciones locales, es decir, aquellas que solo acceden a datos que residen en esa localidad. Adems, una localidad puede participar en la ejecucin de transacciones globales, es decir, aquellas que acceden a datos de varias localidades. La ejecucin de transacciones globales requiere comunicacin entre las localidades. Las localidades en el sistema conectarse fsicamente de diversas formas. Las distintas configuraciones se representan por medio de grafos cuyos nodos corresponden a las localides. Una arista del modo A al nodo B corresponde a una conexin directa entre las dos localidades. En la figura 5.1.1 se ilustra algunas de las configuraciones ms comunes. Las diferencias principales entre estas configuraciones son:

Coste de instalacin. El coste conecta fsicamente las localidades del sistema. Coste de comunicacin. El coste en tiempo y dinero que implica enviar un mensaje desde la localidad A a la B. Fiabilidad. La frecuencia con que falla una lnea de comunicacin o una localidad. Disponibilidad. La posibilidad de acceder a informacin a pesas de fallos en algunos localidades o lneas de comunicacin .

Como se ver, estas diferencias juegan un papel importante en la eleccin del mecanismo adecuado para manejar la distribucin de los datos. Las localidades de un sistema distribuido de bases de datos pueden estar dispersas de forma fsica, ya sea por un rea geogrfica extensa (como los Estados Unidos) o en un atea reducida (por ejemplo, un solo edificio varios edificios adyacentes). Una red de primer tipo se denomina red de larga distancia, mientras que las ultimas se conocen como redes de rea local.

Figura 5.1.1: Configuracin de Red

CONSIDERACIONES AL DISTRIBUIR LA BASE DE DATOS.

Existen varias razones para construir sistemas distribuidos de bases de datos que incluyen compartir la informacin, fiabilidad y disponibilidad y agilizar el procesamiento de las consultas. Sin embargo, estas ventajas vienen acompaadas de varias desventajas, como son mayores costes de desarrollo del software, mayor posibilidad de errores y el aumento en el coste extra del procesamiento. En esta seccin se comentaran brevemente cada una de ellas.

VENTAJAS DE LA DISTRIBUCIN DE DATOS la principal ventaja de los sistemas distribuidos de base de datos es la capacidad de compartir y acceder a la informacin de una forma fiable y eficaz. Utilizacin compartida de los datos y distribucin del control

Si varias localidades diferentes estn conectadas entre si, entonces un usuario de una localidad pueden acceder a datos disponibles en otra localidad. Por ejemplo, en el sistema bancario distribuido que se describi en la seccin 15.1, un usuario de una sucursal puede acceder a datos de otra. Si no se contara con esta facilidad, un usuario que quisiera transferir fondos de una sucursal a otra tendr8ia que recurrir a un mecanismo externo para realizar la transferencia. Este mecanismo externo seria, de hecho, una base de datos nica centralizada.

La ventaja principal de compartir los datos por medio de la distribucin es que cada localidad pueda controlar hasta cierto punto las datos almacenados localmente. En un sistema centralizado, el administrador de base de datos de la localidad central controla la base de datos. En un sistema distribuido existe un administrador global de la base de datos que se encarga de todo el sistema. Parte de estas responsabilidades se delega al administrador de base de datos de cada localidad. Dependiendo del diseo del sistema distribuido, cada administrador local podr tener un grado de autonoma diferente, que se conoce como autonoma local. La posibilidad de contar con autonoma local es en muchos casos una ventaja importante de las bases de datos distribuidas.

Fiabilidad y disponibilidad Si se produce un fallo en una localidad en un sistema distribuido, es posible que las dems localidades puedan seguir trabajando. En particular, si los datos se repiten en varias localidades, una transaccin que requiere un dato especifico puede encontrarlo en ms de una localidad. As, el fallo de una localidad no implica necesariamente la desactivacin del sistema. El sistema debe detectar cuando falla una localidad y tomar las medidas necesarias para recuperarse del fallo. El sistema no debe seguir utilizando la localidad que fall. Por ultimo, cuando se recupere o repare esta localidad, debe contarse con mecanismos para reintegrarla al sistema con el mnimo de complicaciones. Aunque la recuperacin de fallos es ms compleja en sistemas distribuidos que en los centralizados, la capacidad que tiene el sistema para seguir trabajando, a pesar del fallo de una localidad, da como resultado una mayor disponibilidad. La disponibilidad es fundamental para los sistemas de base de datos que se utilizan en aplicaciones de tiempo real. Por ejemplo, si una lnea area no puede tener acceso a la informacin, es posible que pierda clientes a favor de la competencia.

Agilizacin del procesamiento de consultas Si una consulta comprende datos de varias localidades, pueden ser posible dividir la consulta en varias subconsultas que se ejecuten en paralelo en

distintas localidades. Se podran usar algunas de las estrategias de

computacin de interseccin en paralelo de la seccin 9.6. sin embargo, en un sistema distribuido no se comparte la memoria principal, as que no todas las estrategias de interseccin para procesadores paralelos su pueden aplicar directamente a los sistemas distribuidos. En los casos en que hay repeticin de los datos, el sistema puede pasar la consulta a las localidades ms ligeras de carga.

DESVENTAJAS DE LA DISTRIBUCIN DE LOS DATOS

La desventaja principal de los sistemas distribuidos de base de datos es la mayor complejidad que se requiere para garantizar una coordinacin adecuada entre localidades. El aumento de la complejidad se refleja en: Coste de desarrollo de software. Es ms difcil estructurar un sistema de base de datos distribuidos y, por tanto, su coste es mayor. Mayor posibilidad de errores. Puesto que las localidades del sistema distribuido operan en paralelo, es ms difcil garantizar que los algoritmos sean correctos. Existe la posibilidad de errores

extremadamente sutiles. Mayor tiempo extra de procesamiento. El intercambio de mensajes y los clculos adicionales que se requieren para coordinar las localidades son una forma de tiempo extra que no existe en los sistemas centralizados. Al escoger el diseo de una base de datos, el diseador debe hacer un balance entre las ventajas y las desventajas de la distribucin de los datos. Se ver que existen varios enfoques del diseo de bases de datos distribuidas que van desde diseos totalmente distribuidos hasta diseos que incluyen un alto grado de centralizacin.

DISEO DE BASES DE DATOS DISTRIBUIDAS

Los principios del diseo de base de datos que se explicaron en captulos anteriores tambin se aplican a las bases de datos distribuidas. Esta seccin

se dedicara a los factores del diseo que se aplican especficamente a las bases de datos distribuidas. Considrese una relacin r que se va a almacenar en la base de datos. Hay varios factores que deben tomarse en cuenta al almacenar esta relacin en la base de datos distribuida. Tres de ellos son: Repeticin. El sistema mantiene varias copias idnticas de la relacin. Cada copia se almacena en una localidad diferente, lo que resulta en una repeticin de la informacin. La alternativa a la repeticin es almacenar una sola copia de la relacin r. Fragmento. La relacin se divide en varios fragmentos. Cada fragmento se almacena en una localidad diferente. Repeticin y fragmentacin. Esta es una combinacin de los dos conceptos antes mencionados. La relacin se divide en varios fragmentos. El sistema mantiene varias copias idnticas de cada uno de los fragmentos. 5.1.3.1. 5.1.3.2. TCNICA DIDCTICA Exposicin del profesor. MATERIAL DE APOYO

5.1.4. ACTIVIDADES DE APRENDIZAJE 5.1.4.1. ACTIVIDAD DE APRENDIZAJE 1 A22-I2 Sistemas en organizaciones. 5.1.4.1.1. INSTRUCCIONES Realizar un cuestionario de 5 preguntas del tema visto. a) b) c) d) e) f) Valor actividad: 5 Puntos Producto esperado: Reporte de la investigacin Fecha inicio: Fecha entrega: Forma de entrega: Documento Tipo de Actividad: Equipo (5 gentes) 5.1.4.1.2. CRITERIO DE EVALUACIN DE LA ACTIVIDAD 1
ACTIVIDAD Sistemas en organizaciones DESARROLLO Revisar documento que avale la investigacin en los negocios de la region Total PONDERACIN 5 puntos 5 Puntos

5.1.5. RESULTADO DE APRENDIZAJE Saber realmente cuales son los beneficios que los sistemas de informacin ofrecen a las empresas.

5.1.6. BIBLIOGRAFA FUNDAMENTOS DE BASES DE DATOS, Segunda Edicin, Henry F. Korth, Abraham Silberschatz 5.1.7. DOCUMENTOS

5.2. MODELO GENERAL DE UN SGBD 5.2.1. OBJETIVO DE APRENDIZAJE Conocer de manera concreta cuales son las funciones y ventajas de Sistema de Gestion de Base de Datos (SGBD) 5.2.2. RECURSO TIEMPO DEL TEMA 1 hora 5.2.3. DESARROLLO

SGBD: Software que permite la creacin y manipulacin de bases de datos.7

Los SGBD permiten: Descripcin unificada de los datos e independiente de las aplicaciones

Independencia de las aplicaciones respecto a la representacin fsica de los datos Definicin de vistas parciales de los datos para distintos usuarios Gestin de la informacin Integridad y seguridad de los datos

Objetivos de tcnicas BD Descripcin unificada e independiente de los datos Independencia de las aplicaciones
7

Funciones SGBD Definicin de datos a varios niveles: Esquema lgico Esquema interno

Componentes SGBD Lenguajes de definicin de esquemas y traductores asociados.

http://www.dsic.upv.es/~emarzal/bda/Tema3a.pdf (03/Ago/05)

Definicin de vistas parciales Gestin de la informacin

Esquemas externos Lenguajes de manipulacin y traductores asociados.

Manipulacin de los datos: Consulta Actualizacin Gestin y administracin de la base de datos

Herramientas para: Reestructuracin Simulacin Estadsticas Impresin

Integridad y seguridad de los datos

Control de: Integridad semntica Accesos concurrentes Reconstruccin en caso de fallo Seguridad (privacidad)

Herramientas para: Control integridad Reconstruccin Control seguridad

ESQUEMA DE ACCESO DEL SGBD A LOS DATOS

Esquema externo aplicacin 1: CREATE VIEW Administrativo (dni, nombre, salario_men) AS SELECT dni, nombre, salario/14 FROM Empleado WHERE tipo=AD

Esquema lgico:

Empleado(dni, nombre, direccin, salario, tipo) CP: {dni}

Esquema Interno: Fichero ordenado Empleado con ndice primario sobre el campo dni en el camino h:/disco1/gerencia

Aplicacin 1: accede a la informacin a travs del esquema externo 1

SELECT nombre, salario_men FROM Administrativo WHERE dni = parmetro

SGBD: control del acceso y resolucin de la operacin pedida

SO: Manipulacin de los controladores de los dispositivos de memoria secundaria

EJEMPLO Especificacin Una pequea inmobiliaria desea mantener informacin sobre los edificios cuya venta gestiona. Se quiere saber:

De cada edificio, el cdigo, la ubicacin, el distrito, el propietario, el precio solicitado por ste y el agente encargado de la venta si ya est asignado. De cada propietario, el cdigo, nombre y telfono. De cada agente el DNI, el nombre, la comisin por cada venta, los aos de antigedad y el telfono.

Las restricciones que deben cumplirse son las siguientes: La comisin de un agente no puede exceder el 3% si su antigedad es menor de 3 aos. No se quiere tener informacin de propietarios si no se tiene al menos un edificio para la venta.

Grupos de trabajo: El personal de administracin tiene acceso a toda la informacin comentada. El jefe de la inmobiliaria slo desea tener informacin referente a los edificios con precio solicitado superior a 5 millones. De cada uno desea el cdigo, la ubicacin, y el distrito. El jefe es el nico que puede modificar la informacin de los agentes.

Esquema Lgico (SQL) CREATE SCHEMA Inmobiliaria CREATE TABLE Edificios (Cdigo d_cod PRIMARY KEY, Ubicacin d_ubi NOT NULL, Distrito d_dis NOT NULL, Precio d_pre NOT NULL, Dni_age d_dni FOREIGN KEY REFERENCES Agente ON UPDATE CASCADE, ON DELETE NO ACTION Dueo d_cod NOT NULL, FOREIGN KEY(Dueo) REFERENCES Propietario (cod) ON UPDATE CASCADE ON DELETE CASCADE)

CREATE TABLE Propietarios (Cod d_cod PRIMARY KEY,

Nombre d_nom NOT NULL, Telfono d_tel NOT NULL)

CREATE TABLE Agentes (Dni_age d_dni PRIMARY KEY, Comisin d_com, Aos d_aos NOT NULL, Tel d_tel NOT NULL, CHECK NOT (aos < 3 AND comisin > 3))

CREATE ASSERTION no_propet_sin_edificios CHECK NOT EXISTS (SELECT * FROM Propietarios WHERE cod NOT IN (SELECT Dueo FROM Edificio))

Esquemas Externos (SQL) GRANT ALL ON Edificios TO PUBLIC; GRANT ALL ON Propietarios TO PUBLIC; GRANT SELECT ON Agentes TO PUBLIC; ESQUEMA EXTERNO DEL JEFE: CREATE VIEW ms_de_5 AS SELECT cdigo, ubicacin, distrito FROM Edificios WHERE E.precio >= 5000000; GRANT ALL ON ms_de_5 TO Jefe; GRANT ALL ON Agentes TO Jefe; + El resto de tablas del esquema lgico (excepto edificios) ESQUEMA EXTERNO DEL PERSONAL ADMINISTRACIN : Todas las tablas del esquema lgico

Esquema Fsico Edificios : Fichero disperso por dni_age ndice B+ sobre (distrito + precio) Propietarios

Fichero disperso por cod ndice B+ sobre nombre Agentes Fichero desordenado (se suponen pocos agentes).

Proceso de Acceso

5.2.3.1. 5.2.3.2.

TCNICA DIDCTICA Exposicin del profesor. MATERIAL DE APOYO

5.2.4. ACTIVIDADES DE APRENDIZAJE 5.2.4.1. ACTIVIDAD DE APRENDIZAJE 1 A23-ER5 Examen Rpido de SGBD. 5.2.4.1.1. INSTRUCCIONES Realizar un cuestionario de 5 preguntas del tema 5.2 y dictrselas a los alumnos para que las contesten. a) b) c) d) e) f) Valor actividad: 5 Puntos Producto esperado: Preguntas contestadas Fecha inicio: Fecha entrega: Forma de entrega: Documento Tipo de Actividad: Individual 5.2.4.1.2. CRITERIO DE EVALUACIN DE LA ACTIVIDAD 1
ACTIVIDAD DESARROLLO PONDERACIN

Examen Rpido de SGBD

Formular preguntas y responderlas, estas se deben de transmitir hacia asu compaeros Total

5 puntos 5 Puntos

5.2.5. RESULTADO DE APRENDIZAJE Reafirmar los conceptos bsicos de un SGBD 5.2.6. BIBLIOGRAFA http://www.dsic.upv.es/~emarzal/bda/Tema3a.pdf 5.2.7. DOCUMENTOS

5.3. PROCESAMIENTO DE CONSULTAS, CONCURRENCIA y RECUPERACIN EN BASES DE DATOS DISTRIBUIDAS. 5.3.1. OBJETIVO DE APRENDIZAJE Entender el mecanismo de las consultas distribuidas. 5.3.2. RECURSOTIEMPO DEL TEMA 7 horas 5.3.3. DESARROLLO

PROCESAMIENTO DISTRIBUIDO DE CONSULTAS En el caso de sistemas centralizados, el criterio principal para determinar el coste de una estrategia especifica en el numero de accesos al disco. En un sistema distribuido es preciso tener en cuenta otros factores, como son: El coste de transicin de datos en la red. El beneficio potencial que supondra en la ejecucin el que varias localidades procesaran en paralelo partes de la consulta. El coste relativo de la transferencia de datos de la red y la transferencia de datos entre la memoria y el disco varia en forma considerable, dependiendo del tipo de red y de la velocidad de los discos. Por tanto, en un caso general, no podemos tener en cuenta slo los costes del disco o los de la red. Es necesario llegar a un equilibrio adecuado entre los dos.

Repeticin y fragmentacin Consideramos una consulta muy sencilla: encontrar todas las tuplas de la relacin deposito. Aunque la consulta es muy simple, de hecho es trivial; su

procesamiento no es trivial, ya que es posible que la relacin deposito est fragmentada, repetida o las dos cosas. Si la relacin deposito est repetida, es preciso decidir que copia se va a utilizar. Si ninguna de las copias esta fragmentada, se elige la copia que implica coste de transmisin ms reducidos. Pero si una copia esta fragmentada, la eleccin no es tan sencilla, ya que es preciso calcular varios productos o uniones para reconstruir la relacin deposito. En tal caso, el numero de estrategias para este ejemplo sencillo puede ser grande. De hecho, la eleccin de una estrategias puede ser una tarea tan compleja como hacer una consulta arbitraria. La transparencia de la fragmentacin implica que el usuario puede escribir una consulta como esta:
nombre sucursal = Hillside (deposito)

Puesto que deposito est definido como deposito1 de nombre es:


nombre sucursal = Hillside

deposito2 la expresin que resulta del esquema de traduccin

deposito1

deposito2

La expresin que resulta es


nombre sucursal = Hillside (deposito1)

nombre sucursal = Hillside

(deposito2)

la cual incluye dos subexpresiones. La primera incluye solo deposito 1 y, por tanto, puede ser calculado en la localidad Valleyview. Existe aun una optimizacin que se puede hacer calculando
nombre sucursal = Hillside (deposito1)

pues que deposito1 tiene solamente tuplas pertenecientes a la sucursal de Hillside, podemos eliminar la operacin de seleccin. Calculando
nombre sucursal = Hillside (deposito2)

podemos aplicar la definicin del fragmento deposito2 para obtener


nombre sucursal = Hillside

nombre sucursal = Hillside (deposito))

Esta expresin es el conjunto vaci, independientemente del contenido de la relacin deposito. As, nuestra estrategia final para la localidad Hillside consistir en devolver deposito1 como resultado de la consulta.

Procesamiento de interseccin simple

Considerar la expresin en lgebra relacional:

cliente |X| deposito |X| sucursal

Suponemos que ninguna de las tres relaciones estan repetidas o fragmentada y que cliente esta almacenada en la localidad Lc, deposito en la Ld y sucursal en la Lb. Sea LI la localidad donde se origino la consulta. El sistema debe producir el resultado en la localidad LI. Entre las posibles estrategias para procesar esta consulta se encuentra las siguientes:

Enviar copias de las tres relaciones a la localidad LI. Enviar una copia de la relacin cliente a la localidad L d y calcular cliente |X| deposito de Lb. Enviar cliente |X| deposito de Ld a Lb, donde se calcula (cliente |X| deposito) |X| sucursal. El resultado de esta operacin es enviado a LI.

Pueden elaborarse estrategias similares a la anterior al intercambiar los papeles de Lc, Ld, y Lb.

No puede garantizarse que una estrategia sea la mejor en todos los casos. Entre los factores que deben tomarse en cuenta estn la cantidad de datos que debe transmitirse, el coste de transmitir un bloque de datos entre dos

localidades determinadas y la velocidad de procesamiento relativa en cada localidad. Considerar las dos primeras estrategias arriba mencionadas. Si se enva las tres relaciones a LI y existen ndices para ellas, pueden ser necesario volver a crear estos ndices en LI. Esto requiere tiempo extra de procesamiento y mas accesos al disco. Sin embargo, la segunda estrategia tiene la desventaja de que una relacin potencialmente grande (cliente |X| deposito) debe transmitirse desde Ld a Lb. Esta relacin repite los datos de domicilio de un cliente una vez por cada cuenta que tenga el cliente. As, la segunda estrategia puede requerir la transmisin de un volumen de datos mayor que la primera estrategia.

Estrategias de interseccin utilizando el paralelismo

Consideramos un producto de cuatro relaciones:

r1 |X| r2 |X| r3 |X| r4 donde la relacin ri esta almacenada en la localidad Li. Suponemos que el resultado ha de presentarse en la localidad L1. existen, por supuesto, muchas estrategias que se pueden considerar. Por ejemplo, se puede enviar r 1 a L2 y calcular r1 |X| r2 en L2. Al mismo tiempo se puede enviar r3 a L4 y calcular r3 |X| r4 en L4. La localidad L2 puede enviar tuplas de (r1 |X| r2) a L1 conforme se vayan produciendo, en vez de esperar a que se calcule el producto completo. De forma similar, L4 puede enviar tuplas de (r3 |X| r4) a L1. Una vez que las tuplas de (r1 |X| r2) y (r3 |X| r4) lleguen a L1, esta localidad podr empezar el calculo de (r1 |X| r2) |X| (r3 |X| r4) en paralelo con el calculo de (r1 |X| r2) en L2 y de (r3 |X| r4) en L4. Estrategia de semiinterseccion Suponer que deseamos calcular la expresin r1 |X| r2, donde r1 y r2 estn almacenados en las localidades L1 y L2 respectivamente. Sean R1 y R2 los esquemas de r1 y r2. Suponer que queremos obtener el resultado en L 1. Si hay muchas tuplas de r2 que no interseccionan con ninguna de r1, entonces el envi de r2 a S1 requiere el envi de tuplas que no contribuyen al resultado. Es conveniente borrar tales tuplas antes de enviar los datos a L 1, particularmente si los costes de la red son muy elevados. Para hacerlo vemos la siguiente estrategia:

1. Calcular temp1

II R1

R2

(r1) en L1.

2. Enviar temp1 de L1 a L2. 3. Calcular temp2 de L2 a L1. 4. Calcular r1 |X| temp2 en L1. Este es el resultado de r1 |X| r2. Antes de considerar que esta estrategia es eficiente, verificamos que obtenemos la respuesta correcta. En el paso 3, temp2 tiene el resultado de r2 |X| II R1
R2

(r1). En el paso 5, calculamos:

r1 |X| r2 |X| II R1

R2

(r1)

Puesto que el producto es conmutativo y asociativo, podemos volver a escribirlo como: (r1 |X| II R1 como r1 |X| II (R1
R2

(r1))|X| r2

R2)

(r1)= r1, la expresin anterior es, hecho, igual a r1 |X| r2.

La estrategia anterior es ventajosa particularmente cuando en el producto participan relativamente pocas tuplas de r2. Es probable que suceda esta situacin si r1 es el resultado de una expresin de lgebra relacionan que contenga la seleccin. En tal caso, temp2 puede tener de una considerable, menos tuplas que r2. El ahorro de costes viene de tener que enviar solo temp2, en vez de todas las de r2, a L1. Al enviar temp1 a L2, se produce un coste adicional. Si una pequea fraccin de tuplas de r2 contribuye suficientemente al producto, el tiempo extra de enviar temp1ser contrarrestado por el ahorro que se produce al enviar solo una fraccin de tuplas en r2. Esta estrategia es conocida como una estrategia de semiproducto, despus del operador de semiproducto, indicado por |X, de lgebra relacional. El semiproducto de r1 con r2, indicado por r1 |X| r2, es: IIR (r1 |X| r2) As, r1 |X r2 selecciona las tuplas de r1 que contribuyeron a r1 |X| r2. en el paso 3 anterior, temp2 = r2 |X r1. La estrategia anterior puede ser ampliada a unas series de pasos de semiintersecin, para la interseccin de varias relaciones. Se ha desarrollado una teora muy amplia referente al uso de semiproductos para optimizar a las consultas. Las notas bibliograficas hacen referencia a partes de esa teora.

RECUPERACIN EN SISTEMAS DISTRIBUIDOS Hemos definido una transaccin como una unidad de programa cuya ejecucin conserva la consistencia de una base de datos. Una transaccin debe ejecutarse de forma atmica. Es decir, se ejecutan completamente todas las instrucciones de la transaccin, o no se ejecuta ninguna. Adems, en el caso

de ejecucin concurrente, el efecto de ejecutar una transaccin debe ser el mismo que si se ejecutara sola en el sistema.

Estructura del sistema Cuando se tiene un sistema de base de datos distribuidos, es cuando mas difcil garantizar la propiedad de atomicidad de una transaccin. Esto se debe a que es posible que participen varias localidades en la ejecucin de una transaccin. El fallo de una de estas localidades o el fallo de la linea de comunicacin entre ellas, puede dar como resultado un calculo errneo. La funcin del gestor de transaccin de un sistema de base de datos distribuido es asegurar que la ejecucin de las distintas transacciones de un sistema distribuido conserve la atomicidad. Cada localidad cuenta con su propio gestor de transacciones local. Los distintos gestores de transacciones cooperan para ejecutar las transacciones globales. Para comprender como puede

estructurarse un gestor de este tipo, definiremos un modelo abstracto para un sistema de transacciones. Cada localidad del sistema contiene dos subsistemas: Gestor de transacciones, cuya funcion es gestionar la ejecucin de aquellas transacciones (o subtransacciones) que accedan a datos almacenados en esa localidad. Observamos que cada transaccin puede ser bien una transaccin local (es decir, que se ejecuta slo en esa localidad), parte de una transaccin global (es decir, que se ejecuta en varias localidades). Coordinador de transacciones, cuya funcin es la de coordinar la ejecucin de varias transacciones (tanto local como global) iniciadas en esa localidad.

La arquitectura general del sistema se ilustra en la siguiente Figura.

La estructura de un gestor de transaciones es similar en muchos aspectos a la que se utiliza en el caso de un sistema centralizado. Cada gestor de transacciones se encarga de: Mantener una bitcora por la recuperacin. Participar en un esquema de control de concurrencia apropiado para coordinar la ejecucin en paralelo de las transacciones que se ejecuten en esa localidad. Como veremos, los esquemas, tanto de recuperacin como de concurrencia, deben modificarse para tomar en cuenta la distribuciones de transacciones. El subsistema coordinador de transacciones no se necesita en el sistema centralizado, ya que las transacciones tienen acceso a datos de una sola localidad. Como su nombre indica, un coordinador de transacciones se encarga de coordinar todas las transacciones que se inicien en esa localidad. Para cada una de estas transacciones, el coordinador debe: Iniciar la ejecucin de la transaccin. Dividir la transaccin en varias subtransacciones, las cueles ha de distribuir en las localidades apropiadas para su ejecucin. Coordinar la terminacin de la transaccin, ya sea que quede ejecutada o abortada en todas las localidades.

Robustez Un sistema distribuido puede sufrir el mismo tipo de fallos que un sistema centralizado (por ejemplo, fallo de memoria, fallo del disco). Sin embargo, en una configuracin distribuida es necesario prever otro tipo de fallos, como pueden ser: El fallo total de una localidad. La interrupcin de una lnea de comunicacin. Perdida de mensajes. Fragmentacin de la red.

Por tanto, para que el sistema sea robusto, es necesario que detecte cualquiera de estos fallos, que reconfigure el sistema de manera que pueda

reanudarse el proceso y que se recupere una vez que haya sido reparado el procesador o ola lnea de comunicacin afectados. En general, no es posible distinguir entre la interrupcin de una lnea de comunicacin, el fallo total de una localidad, la perdida de mensajes o la fragmentacin de la red. Por lo general, es posible detectar que existe un fallo, pero resulta difcil identificar el tipo del que se trata. Por ejemplo, suponemos que la localidad L1 no se puede comunicar con la L2. Una posibilidad es que la L2 se encuentre fuera de servicio, pero tambin es factible que se haya interrumpido la lnea de comunicacin entre L1 y L2. Suponemos que la localidad L1 se da cuenta de que existe un fallo. En ese momento debe iniciar un procesamiento de reconfiguracin del sistema que le permita continuar con sus operaciones normales. Sin en la localidad que esta fuera de servicio se almacena informacin repetida, debe actualizarse el catalogo de manera que las consultas no hagan referencia a la copia que se encuentra en dicha localidad. Si, en el momento de presentarse el fallo existan transacciones activas en la localidad que quedo fuera de servicio, deben abortarse. Es conveniente abortar estas transacciones tan pronto como sea posible, ya que puede darse el caso de que hayan puesto bloqueos a informacin que se encuentra el localidades que siguen activas. Si la localidad que quedo fuera de servicio en el distribuidor central de algn subsistema, es preciso elegir un nuevo distribuidor. Los distribuidores centrales pueden ser, por ejemplo, asignadores de nombres, coordinadores de concurrencia o detectores de bloqueo globales.

En general, no es posible distinguir entre los fallos en las lneas de comunicacin de la red y de las localidades. Por tanto, el esquema de reconfiguracion que se adopte debe estar diseado para que funcione correctamente aun cuando la red quede fragmentada. En particular es preciso evitar que se presenten las siguientes situaciones:

Eleccin de dos o ms distribuidores centrales en distintos fragmentos.

Actualizacin de un dato repetido en ms de un fragmento de la red.

Tambin es necesario tener cuidado al reintegrar al sistema una localidad o lnea de comunicacin separada. Cuando una localidad que quedo fuera de servicio se recupera, debe iniciar un procesamiento de actualizacin de sus tablas de sistema para que reflejen los cambios que tuvieron lugar mientras estaba inactiva. Si la localidad tenia copias de datos, debe obtener los valores actuales de todos ellos y asegurarse de recibir las actualizaciones futuras. Esto es ms complicado de lo que parece, ya que es posible que se actualicen los datos que se estn procesando mientras que el sistema se recupera. Una solucin sencilla es suspender temporalmente todas las operaciones del sistema mientras la localidad que quedo fuera de servicio se reintegre a el. Los problemas que acarrea esta suspensin es la mayor parte de las aplicaciones no pueden aceptarse. Es preferible representar a las tareas de recuperacin como una serie de transacciones. En este caso, el subsistema de control de concurrencia y el manejo de transacciones puede encargarse de realizar de manera fiable la reintegracin de la localidad. Si se recupera una lnea de comunicacin interrumpida, es posible que se unan de nuevo dos fragmentos de la red. Dado que la fragmentacin de una red limita las operaciones que pueden permitirse en algunas localidades, o en todas ellas, es conveniente enviar un mensaje a todas ellas informando sin dilatacin que la lnea se recuper. En las redes en que no se permit el envi de este tipo de mensaje puede utilizarse otros esquemas

PROTOCOLO DE COMPROMISO Para garantizar la atomicidad, es preciso que todas las localidades en las que haya ejecutado la transaccin T coincidan en el resultado final de la ejecucin. T debe quedar ejecutada o abortada en todas las localidades. Para garantizar esta propiedad, el coordinador de transacciones encargado de T debe ejecutar un protocolo den compromiso. Entre los mas comunes y mas ampliamente usados esta el compromiso de dosfases. Otra alternativa es el protocolo de compromiso de tresfases, el cual impide ciertas desventajas del compromiso de dos fases, pero aade complejidad y tiempo extra.

Compromiso de dos fases sea T una transaccin que se inicio en la localidad L i, y sea Ci el coordinador de transacciones de esa localidad. El protocolo de compromiso Cuando T una termina de ejecutarse, es decir, cuando todas las localidades en las que se ejecuto T informan a C1 que T llego a su termino, Ci inicia el protocolo de compromiso de dos fases. Fase 1. C1 aade el registro <preparar T> a la bitcora y la graba en memoria estable. Una vez hecho esto enva un mensaje de preparar T a todas las localidades en las que se ejecuto T, al recibir el mensaje, el gestor de transacciones de cada una de esas localidades determina si esta dispuesto a ejecutar la parte de T que le correspondi. Si no esta dispuesto, este aade un registro <no T> la bitcora y a continuacin enviar un mensaje abortar T a C1. Si la respuesta es afirmativa agregara un registro < T lista > a la bitcora y grabara todos los registros de bitcora que corresponden a T en memoria estable. Una vez hecho esto, responder a C1 con el mensaje T lista. Fase 2. Una vez que todas las localidades hayan respondido al menaje preparar T en enviado a Ci, o despus de un intervalo de tiempo,

previamente especificado, Ci puede determinar si la transaccin T puede ejecutarse o abortarse. Si Ci recibi el mensaje T lista de todas las localidades que participan, la transaccin T puede ejecutarse. En caso contrario, la transaccin T debe abortarse. Segn haya sido el veredicto, se agregara un registro <ejecutar T> o <abortar T> a la bitcora y se grabara en memoria estable. En este punto, el destino de la transaccin se habr sallado. A continuacin, el coordinador enviara un mensaje <ejecutar T> o <abortar T> a todas las localidades participantes. Al recibir este mensaje, cada una de las localidades lo registra en la bitcora. Una de las localidades en las que se ejecuto T puede abortar T incondicionalmente en cualquier momento antes de enviar el mensaje T lista al coordinador. De hecho, el mensaje T lista es una promesa que hace la localidad de cumplir con la orden del coordinador de ejecutar T o abortar T.

Una localidad solo puede hacer tal promesa si la informacin requerida esta ya en almacenamiento estable. En caso contrario, si la localidad se cayera despus de enviar el mensaje T lista, no seria capaz de cumplir su promesa. El destino de una transaccin esta sellado en el momento en que por lo menos una de las localidades responde aborto T, ya que se requiere unanimidad para ejecutar una transaccin. Dado que la localidad coordinadora L i es una de las localidades en las que se ejecuta T, el coordinador puede decidir de forma unilateral abortar T. El veredicto final en lo que registra (ejecutar o abortar) en la bitcora y graba esta en la memoria estable. En algunas implementaciones del protocolo de compromiso de dos fases, una localidad enva un mensaje de reconocimiento a T al coordinador al final de la segunda fase del protocolo. Una vez que el coordinador recibe este mensaje de todas las localidades, aade el registro <T completo> en la bitcora.

Manejo de fallos

A continuacin veremos de manera detallada la forma en que el compromiso de dos fases responde a los distintos tipos de fallos. Fallo de una localidad participante. En el momento en que una

localidad participante Lk se recupera de un fallo, debe examinar su bitcora para determinar el destino de aquellas transacciones que se estaban ejecutado cuando se produjo el fallo. Sea T una de esas transacciones. Consideramos los siguientes casos: o La bitcora contiene un registro <ejecutar T>. En este caso, la localidad ejecuta rehacer (T). o La bitcora contiene un registro <abortar T>. En este caso, la localidad ejecuta deshacer (T). o La localidad contiene un registro < T lista >. En este caso, la localidad debe consultar con Ci, para determinar el destino de T. Si Ci esta activo, notificara a Lk ejecutara o aborto de T. A continuacin, Lk ejecutara rehacer (T) o deshacer (T), segn sea el caso. Si Ci esta inactivo, Lk debe interrogar a las dems localidades para intentar determinar el destino de T. Esto lo har enviando un mensaje de consulta de estado de T a todas las dems localidades del sistema. Al recibir uno de estos

mensajes una localidad, deber consultar su bitcora para ver si T se realizo all y en caso de que as haya sido , si se ejecuto o se aborto. A continuacin notificara dicho resultado a Lk. Si ninguna de las localidades cuenta con la informacin apropiada (es decir, si T se ejecuto o aborto), entonces Lk no podr ejecutar ni abortar T. La decisin con respecto a T se pospondr hasta que L k pueda obtener la informacin necesaria. De esta forma, Lk deber seguir mandando el mensaje de consulta a las otras localidades de forma peridica hasta que alguna de las localidades que contienen la informacin requerida se recupere. Se puede hacer mencin de que la localidad en la que reside Ci siempre tendr la informacin requerida. o La bitcora no contiene registro de control (abortar, ejecutar, lista) referentes a T. Esto implica que Lk tuvo un fallo antes de responder al mensaje preparar T de Ci. Puesto que el fallo de Lk excluye el envi de esa respuesta, de acuerdo a nuestro algoritmo, Ci debe abortar T. En consecuencia, Lk debe ejecutar deshacer (T). Fallo del coordinador. Si el coordinador falla en la mitad de la ejecucin del protocolo de compromiso de la transaccin T, entonces las localidades participantes deben decidir de T. Veremos que en algunos casos las localidades participantes no pueden decidir si ejecutar o abortar T, y, por tanto, ser necesario que estas localidades esperen a que se recupere el coordinador que fallo. o Si una localidad activa contiene un registro < ejecutar T > en su bitcora, entonces T debe ser ejecutada. o Si una localidad activa contiene un registro < abortar T > en su bitcora, entonces T debe ser abortada. o Si alguna localidad activa no contiene un registro < T lista> en su bitcora, entonces el coordinador que fallo Ci no puede haber decidido ejecutar T. Esto se debe a que una localidad que no tiene un registro < T lista > en su bitcora no puede haber enviado un mensaje de T lista a Ci. Sin embargo, el coordinador puede haber decidido abortar T, y no ejecutar T. Es preferible abortar T antes que esperar que Ci se recupere. o Si no ocurre ninguno de los casos anteriores, entonces todas las localidades activas deben tener en sus bitcoras un registro < T lista >,

y ningn registro de control adicional (tales como < abortar T > o < ejecutar t >). Puesto que el coordinador ha fallado, es imposible determinar hasta que el coordinador se recupere si se produjo una decisin, y si la hubo, cual fue. De esta forma, la localidad activa debe esperar a que Ci se recupere. Debido a que el destino de T continua en duda, T puede continuar reteniendo recursos del sistema. Por ejemplo, si se utiliza bloqueos, T puede mantener bloqueos sobre los datos en las localidades activas. Esta situacin no es deseable puesto que puede pasar horas o das hasta que Ci este activo de nuevo. Durante este tiempo, otras transacciones pueden haber sido forzadas a esperar a T. Como resultado tenemos que los datos no estn disponibles no solo en la localidad del fallo (Ci), sino tambin en localidades activas. Cuando mayor es el tiempo que Ci este cado, mayor ser el numero de datos que no estn disponibles. A esta situacin se la denomina el problema de bloqueo debido a que T esta bloqueada, dependiendo de la recuperacin del Ci de la localidad. Fallo de un alinea de comunicacin. Cuando una lnea de comunicacin falla, todos los mensajes que estaban siendo enrutados a travs de la lnea no llegan a sus destinos intactos. Desde el punto de vista de las localidades conectadas a travs de esa lnea, parece que el fallo corresponde a las otras localidades. Por tanto, nuestro anterior esquema tambin se puede aplicar aqu. Fragmentacin de la red. Cuando se fragmenta la red, caben dos posibilidades. o El coordinador y todos sus participantes queden en un fragmento. En este caso el fallo no tendr efecto sobre el protocolo de compromiso. o El coordinador y sus participantes quedan distribuidos en varios fragmentos. En este caso se perdern los mensajes entre la participacin y el coordinador, situacin que es equivalente a la interrupcin de lneas de comunicacin mencionadas anteriormente.

Compromiso de tres fases El protocolo de compromiso de tresfases estn diseado para impedir la posibilidad de bloqueo en un caso restringido de los fallos posibles. El protocolo requiere que: No puede ocurrir una fragmentacin de la red. Debe haber al menos una localidad funcionando en cualquier punto. En cualquier punto, como mximo un numero K de participantes pueden caer simultneamente (siendo K un parmetro que indica la resistencia del protocolo a fallos en localidades). El protocolo alcanza esta propiedad de no bloqueo aadiendo una fase extra, en la cual se toma una decisin preliminar sobre el destino de T. Como resultado de esta decisin, se pone en conocimiento de las localidades participantes cierta informacin que permite tomar una decisin a pesar del fallo del coordinador. El protocolo de compromiso

De la misma forma, sea T una transaccin iniciada en la localidad L i y Ci el coordinador de transacciones en Li. Fase 1. esta fase es idntica a las fase 1 del protocolo de compromiso de dos fases. Fase 2. si Ci recibe un mensaje abortar T de una localidad participante, o si Ci no recibe respuesta dentro de un intervalo previamente especificado de una localidad participante, entonces Ci decide abortar T. La decisin de abortar esta implementada de la misma forma que en el protocolo de compromiso de dos fases. Si Ci recibe un mensaje T lista de cada localidad participante, tomara la decisin preliminar preejecutar T. La diferencia entre preejecutar y ejecutar radica en que T puede ser todava abordar eventualmente. La decisin de preejecutar permite al coordinador informar a cada localidad participante que todas las localidades participantes estn listas. Ci aade un registro < preejecutar T > a la bitcora y lo graba en un almacenamiento estable. De acuerdo a esto, Ci enva un mensaje preejecutar T a todas las localidades participantes. Cuando una localidad recibe un mensaje del

coordinador (ya sea abortar T o preejecutar T), lo registra en su bitcora, grabando esta informacin en almacenamiento estable, y enva un mensaje de reconocimiento a T al coordinador. Fase 3. Esta fase se ejecuta solo si la decisin tomada en la fase 2 fue de preejecutar. Despus de que los mensajes preejecutar T se han enviado a todas las localidades participantes, el coordinador debe esperar hasta que reciba al menos un numero K de mensajes de reconocimiento a T. Siguiendo este proceso, el coordinador toma una decisin de compromiso. Aade un registro < ejecutar T > en su bitcora y la graba en un almacenamiento estable. De acuerdo a esto, C i enva un mensaje ejecutar T a todas las localidades participantes. Cuando una localidad recibe el mensaje, lo registra en su bitcora. Tal y como en el protocolo de compromiso de dos fases, una localidad en la que se haya ejecutado T puede abordar T incondicionalmente en cualquier momento, antes de enviar el mensaje T lista al coordinador. El mensaje T lista es, de hecho, una promesa hecha por la localidad para seguir la orden del coordinador de ejecutar T abortar T. En contraste con el protocolo de compromiso de dos fases, en el que el coordinador puede incondicionalmente abortar T en cualquier momento antes de enviar el mensaje ejecutar T, el mensaje preejecutar T en el protocolo de compromiso de tres fases, es una promesa hecha por el coordinador para seguir la orden del participante de ejecutar T.

Puesto que la fase 3 siempre induce a una decisin de compromiso, parece que no es muy til. El papel de la tercera fase toma importancia por la forma en que el protocolo de tres fases maneja los fallos. En algunas implementaciones del protocolo de compromiso de tres fases, al recibir una localidad el mensaje ejecutar T, esta enva un mensaje de recibo t al coordinador. (Observamos el uso de recibo para destituirlo de los mensajes de reconocimiento usados en la fase2.) Cuando el coordinador recibe el mensaje de recibo T de todas las localidades, aade el registro < T completo > a la bitcora.

Transacciones distribuidas Dados el creciente inters y creciente utilizacin de los sistemas distribuidos, existe la necesidad de acceder y modificar datos distribuidos. Considere un sistema en el que se almacena la informacin de clientes en un servidor y la de productos en otro. Cuando un cliente adquiere un artculo, es necesario iniciar una transaccin que registre el pedido en el servidor incluyendo la informacin de cliente y que, asimismo, decremente el nivel de stock en el servidor que almacene los datos de productos. Esta transaccin debe ser una nica transaccin desde el punto de vista lgico, pero est fsicamente distribuida entre dos servidores. Necesitamos una forma de asegurar que la transaccin distribuida opere de la misma manera en que lo hara una transaccin local y que respete las propiedades ACID (Propiedades de las transacciones)de cualquier transaccin. El enfoque que utilizaremos estar basado sobre lo que se denomina protocolo de confirmacin en dos fases.

PROTOCOLO DE CONFIRMACIN EN DOS FASES La implementacin de transacciones distribuidas requiere un esfuerzo adicional de planificacin y control. El servicio que proporciona la funcionalidad de confirmacin en dos fases se basa en un servidor SQL Server conocido con el nombre de servidor de confirmacin. Este servidor est a cargo de mantener el estado actual de la transaccin y los otros servidores lo emplean para determinar el xito o fracaso global de la misma. La transaccin atraviesa los siguientes pasos: 1. La transaccin da comienzo y se identifica a s misma ante el servidor de confirmacin. 2. Se emiten las instrucciones de modificacin de datos en los servidores implicados. 3. El servidor de confirmacin recopila informacin acerca de cada servidor y agrega a todos ellos a la transaccin. 4. La transaccin indica que desea fmalizar, emitiendo una instruccin PREPARE TRANSACTION. 5. Fase 1: durante la primera fase de la confirmacin, todos los servidores comunican al servidor de confirmacin que estn listos para confirmar.

6. Fase 2: se emite una instruccin COMMIT TRANSACTION a todos los servidores, despus de haber llegado a la conclusin de que todos ellos estn preparados.

Si ocurre un error entre las dos fases, todos los servidores se comunican con el servidor de confirmacin para ver si la transaccin va a ser confiimada o cancelada. He aqu una lista de alguno de los errores que pueden tener lugar entre las fases 1 y 2:

Uno de los servidores registrados se para. La solicitud de confirmacin en dicho servidor falla, porque no se puede establecer comunicacin con el servidor. Sin embargo, es posible que la solicitud para efectuar la confirmacin haya tenido xito. El servidor detenido utiliza probe para identificar qu accin debe tomar.

El servidor de confirmacin deja de estar disponible. Es necesario deshacer la transaccin. La aplicacin ejecuta una instruccin ROLLBACK TRANSACTION para cada servidor registrado.

Se produce una detencin tanto de un servidor registrado como del servidor de confirmacin. La aplicacin ejecuta una instruccin ROLLBACK TRANSACTION en todos los servidores que estn todava activos. El servidor registrado que sufri la detencin se comunica con el servidor de confirmacin, que no est al tanto de que la transaccin se ha comRJetadq, Y que ordena al servidor registrado que deshaga la transaccin.

Si uno de los servidores SQL registrados no puede comunicarse con el servidor de confirmacin, se marca como sospechosa la base de datos correspondiente. Cuando el servidor de confirmacin vuelve a estar visible, el servidor afectado debe ser reiniciado para poder recuperar la base de datos y la transaccin dudosa. Slo se contacta una vez con el servidor de confirmacin cuando tienen lugar dichos fallos; el servidor de confirmacin devuelve el estado de la transaccin, segn la ltima actualizacin que la aplicacin de control haya efectuado.

Afortunadamente, la parte dura de la tarea ha sido realizada por Microsoft, que ha implementado el servicio de confirmacin en dos fases. Lo nico que necesitamos es entender cmo interactuar con l para conseguir los resultados deseados. Podemos, para ello, hacer uso de las funciones de confirmacin en dos fases disponibles en la biblioteca de e9lace dinmico DB-Library o en el servicio DTC de Microsoft.

EL COORDINADOR DE TRANSACCIONES DISTRIBUIDAS (MS DTC)

El Coordinador de transacciones distribuidas de Microsoft (DTC, Distributed Transaction Coordinator) se instala junto con SQL Server y el Agente SQL. Pueden ejecutar" se varios servicios DTC dentro de una red; si se desea, puede ejecutarse uno por cada servidor SQL Server. Se puede controlar qu servidor DTC emplear desde el Panel de control del cliente. Haciendo uso de mltiples servidores DTC, puede distribuirse la carga de trabajo.

El servidor MS DTC es el servidor de confmnacin para las transacciones distribuidas y hace uso de un archivo de registro para-almacenar el resultado de todas las transacciones que hayan utilizado sus servicios.

LA IMPORTANCIA DE MSDTC.lOG

No debe, bajo ninguna circunstancia, modifiarse o borrarse el archivo IMSDTC.lOG. Si se borra el archivo, el sistema no funcionar.

INSTALACIN Durante la instalacin del servicio (que tiene lugar como parte de la instalacin del servidor), las DLL y los archivos ejecutables del servidor DTC se copian al subdirectorio \BIRM del directorio raz de SQL. El archivo de registro de DTC se instala en el directorio \DATA, bajo la raz de SQL.

PRECAUCIN Antes de instalar un pJiquete de servicio o actualizacin, asegrese de que se hayan resuelto todas las transacciones dudosas. Microsoft se reserva el

derecho de cambiar el formato del archivo de registro DTC entre una versin y otra.

Una vez iniciado el servicio DTC, puede realizarse una prueba simple para verificar que todo est funcionando como debe. Abra la ventana Estadsticas de la consola de administracin MS DTC y observe el contador Actual/Activas mientras abre una ventana de consulta y ejecuta BEGIN DISTRIBUTED TRAN. Cada vez que el contador se incremente, emita una instruccin ROLLBACK; el contador debera volver a 0.

UTILIZACIN Afortunadamente, no necesitamos preocuparnos de los protocolos subyacentes ni de las funciones que se invocan para que tenga lugar una transaccin distribuida. Como desarrolladores, basta con cambiar muy sutilmente nuestra forma de programar, utilizando BEGIN DISTRIBUTED TRAN en lugar de la instruccin ms usual BEGIN TRAN. Al ejecutar BEGIN DISTRIBUTED TRAN, la transaccin se registra ante el servidor MS DTC. Esta accin nos convierte en el origen de la transaccin y nos asigna la responsabilidad de enviar las instrucciones COMMIT o ROLLBACK al DTC, que entonces se encargar de gestionar la terminacin de la transaccin en todos los servidores implicados. Los servidores SQL pueden registrarse en nuestra transaccin de una de las siguientes maneras:

Un procedimiento almacenado remoto se ejecuta sobre un servidor. Proporcionamos un testigo de acoplamiento a nuestra transaccin distribuida. Se ejecuta una consulta distribuida.

En las versiones anteriores de SQL Server, la nica forma de llevar a cabo transacciones distribuidas era utilizar procedimientos almacenados :remotos como ste:

USE pubs GO BEGIN DISTRIBUTED TRANSACTION UPDATE sales SET qty = qty + 10000 WHERE au_id = 'GAL-06-1269' EXECUTE remotesrv.pubs.update_sales_qty 'GAL-06-1269', 10000 COMMIT TRAN GO

NOTA Para que los procedimientos almacenados remotos se ejecuten siempre dentro del contexto de una transaccin distribuida. Puede utilizarse la opcin SET REMOTE ROC TRANSACTlONS ON. que se establece por separado para cada conexin, o puede configurarse esta opcin globalmente para todo un servidor utilizando sp_configure 'remote proc trans', 1.

Cuando el origen de datos OLE DB de destino de una consulta distribuida admite ItransactionLocal, la transaccin se eleva automticamente a

transaccin distribuida. Sin embargo, si el origen de datos no admite ItransactionLocal, slo pueden efectuarse consultas; el origen de datos se considera como de slo lectura.

NOTA Despus de haber configurado servidores enlazados, pueden realizarse transacciones distribuidas sin estar restringidos a ejecutar solamente procedimientos almacenados remotos.

Solucin de problemas Obviamente, como hemos complicado nuestra transaccin y hemos

involucrado ms componentes (servidores, red, etc.), tarde o temprano se producirn problemas (confiamos en que ms tarde que temprano).

La forma ms sencilla de determinar si un servidor puede comunicarse con un servidor de confirmacin consiste en abrir una ventana de consulta y ejecutar BEGIN DISTRIBUTED TRANSACTION. Si no puede encontrarse el servicio, se obtendr un error, que informar de que el servicio no est disponible.

Si un servidor de confirmacin est resultando ser poco fiable para ciertos clientes, quizs debido a problemas de red transitorios, puede instalarse la Herramienta de cliente de red DTC en dichos clientes e instalar el servicio DTC en un servidor ms prximo. La Herramienta de cliente de red permite especifIcar un servicio DTC y un protocolo de red concretos para utilizarlos en las transacciones distribuidas. La consola de administracin del DTC proporciona un completo conjunto de estadsticas e informacin sobre el servicio DTC que se est ejecutando en el servidor. Esta herramienta proporciona acceso a cinco reas:

General. Informacin de versin, nombre del coordinador y funciones para arrancar y detener el servicio DTC. Transacciones. Las transacciones actualmente activas, junto con su estado. Desde esta ventana, puede tambin resolverse una

transaccin, forzando su confirmacin, abortndola o eliminandola. Rastreo. Esta rea tiene informacin de registro del servicio DTC. La profundidad de la traza se fIja en la ficha Avanzado. Estadsticas. Esta rea muestra el nmero actual de transacciones activas y dudosas, junto con informacin histrica sobre el nmero total de transacciones confirmadas, anuladas, etc. Avanzado. Desde esta fIcha, puede controlarse la profundidad de traza, la velocidad de actualizacin para la presentacin de datos y el tamao y ubicacin del archivo de registro DTC.

La consola de administracin del DTC es la herramienta bsica de depuracin de transacciones distribuidas.8

TRANSACCIONES DISTRIBUIDAS CON SQLSERVER (Ejemplo)

En algunas ocasiones es necesario realizar operaciones que afectan a ms de un servidor. Hay casos en los que esto puede ser muy conveniente o simplemente ser necesario. Llegados a esta necesidad, no podemos dejar de

Microsoft SQL Server /, Sharon Bjeletich, Greg Mable, et al., PRENTICE HALL

plantearnos un montn de cuestiones, todas ellas complejas. Si tengo dos conexiones a mi base de datos y abro una transaccin en la primera, puedo compartirla con la segunda?, y si no puedo, hay posibilidades de garantizar que o se realicen las dos o no se realice ninguna?. Esto nos lleva, simplificando bastante el problema, a que tendra mi aplicacin que garantizar que va a poder validar la segunda transaccin, antes de validar la primera. Esto resumido y simplificado es lo que podramos denominar confirmacin en dos pasos. No obstante no es nada sencillo desde el punto de vista tcnico responder a esa pregunta. Microsoft Transaction Server, precisamente resuelve este problema, lo resuelve no ya a nivel de base de datos, sino a nivel de objetos, pero en nuestro caso no vamos a tratar (de momento) de MTS, sino que nos vamos a centrar en como Sql-Server resuelve el problema. En otro artculo, espero que a no mucho tardar, podremos hablar de COM+ y Visual Studio .NET, y como crear componentes transaccionales que nos permitan olvidarnos ms de nuestra base de datos. Pasos previos. Antes de garantizar que vamos a poder realizar transacciones distribuidas, incluso antes de siquiera intentarlo necesitaremos dos servidores. Nos servirn tambin dos instancias (aunque el ejemplo est hecho y probado con dos servidores). En el caso del ejemplo, los dos servidores se llaman 'A8B8O2' Y 'Maricarmen' respectivamente. S , lo s, que nombre es A8xde?, pues la verdad es que no s, met el cd de Windows-Xp, le d siguiente-siguiente, y no le ni un mensaje, tampoco poda esperar mucho ms. Podra cambiarlo, de hecho no se vera afectado mi Sql, ya que tengo Sql-server 2000, pero no lo voy a hacer, :-). Los dos servidores estn fsicamente conectados en red, en una red local. Para comunicarlos he usado los procedimientos almacenados

sp_addlinkedserver y sp_addlinkedsrvlogin, con el cdigo que podis ver a continuacin :

sp_addlinkedserver @server = 'maricarmen'

, @srvproduct= 'SQLServer' , @provider = 'SQLOLEDB' , @datasrc = 'maricarmen' , @catalog = 'pruebas'

Con esto aado el servidor vinculado maricarmen, que es un Sql-server, y el catlogo inicial ser pruebas, no es necesario ya que de todas formas voy a usar el nombre en formato completo 'Servidor.BaseDeDatos.Propietario.Tabla', pero bueno, todo sea por que el ejemplo quede ms claro. Con el servidor vinculado, tengo que aadir un login, podra pedir que fuese con las mismas credenciales o no, en nuestro caso no. As que aadimos un login a ese servidor vinculado mediante el siguiente cdigo :

sp_addlinkedsrvlogin @rmtsrvname='maricarmen' , @useself ='False' , @rmtuser='sa' , @rmtpassword='javier'

Inmediatamente

despus,

comprobamos

que

efectivamente

estamos

conectados y que la conexin funciona, para ello, nada mejor que ejecutar una consulta. Select * From maricarmen.pruebas.dbo.pruebas Adems de esto hay que tener en cuenta: Para que se puedan ejecutar transacciones distribuidas debemos tener activados los servicios de MS DTC de ambos servidores, o el servidor remoto debe implementar la interfaz ItransacionLocal. Consulte los books on line para mayor y ms detallada informacin. Podemos explicitar Begin Distributed Trans o simplemente anidarla dentro de una transaccin local, el sistema abre una transaccin distribuida en cualquier caso siempre que el parmetro de sp_configure 'remote proc trans' est habilitado. Es conveniente que SET XACT_ABORT est a ON. Este parmetro en mi opinin est mejor a off siempre, si no el sistema rechaza transacciones de

forma implcita y eso no me gusta, pero en este caso no tiene ms remedio que ser as, ya que -entiendo yo- que si se hace un commit, y por ejemplo, se ha perdido la conexin con el servidor remoto, este commit no puede tener efecto, y lamentablemente habr que rechazar toda la transaccin. El coordinador de transacciones distribuidas es un servicio ms de Sql-Server. Para activarlo basta con pulsar play ..

Manos a la obra por fn. Pues eso, ya estamos en disposicin de probar que efectivamente funciona, que hay transacciones distribuidas y que se anulan tanto si hay rollback manual como si hay commit y ste no puede ser validado.
USE pruebas GO SET xact_abort on GO BEGIN TRAN INSERT INTO maricarmen.pruebas.dbo.pruebas (texto) VALUES('hola') INSERT INTO pruebas (texto) VALUES ('adis') EXEC sp_lock

El resultado de sp_lock es : 51 1 0 0 DB S GRANT 51 8 0 0 DB S GRANT 51 8 0 0 DB S GRANT 51 8 21575115 1 PAG 1:30 IX GRANT

51 8 21575115 1 KEY (03000d8f0ecc) X GRANT 51 8 21575115 0 TAB IX GRANT 51 1 85575343 0 TAB IS GRANT

select object_name(21575115) d naturalmente pruebas - Ojo, en vuestro sistema el identificador ser seguramente distintoEn el ordenador remoto, sp_who2 dice lo siguiente... 53 sleeping sa A8B8O2 . pruebas AWAITING COMMAND 1092 0 10/05 01:10:33 Microsoft SQL Server 53 54 RUNNABLE sa A8B8O2 . pruebas SELECT INTO 1432 9 10/05 01:13:12 Analizador de consultas SQL 54

sp_lock en maricarmen nos dice que es el id 53 el que tiene bloqueado el registro (el que acabamos de insertar), el 54, es la conexin desde el servidor principal para poder ejecutar sp_lock ... :-D

Por ltimo nuestra prueba consisti en desenchufar fsicamente el cable y hacer commit y el resultado fue :

Servidor: mensaje 8522, nivel 18, estado 1, lnea 1 Transaccin distribuida anulada por MSDTC. Es decir que se comport de acuerdo a lo esperado9.

5.3.3.1. 5.3.3.2.

TCNICA DIDCTICA Exposicin del profesor. MATERIAL DE APOYO

5.3.4. ACTIVIDADES DE APRENDIZAJE 5.3.4.1. ACTIVIDAD DE APRENDIZAJE 1

A24-EC11 Realizacion de una Base de Datos Distribuida. 5.3.4.1.1. INSTRUCCIONES Disear una Base de datos de 5 tablas cuando mucho y color en dos servidores un numero equitativo de tablas, enlazar los servidores e intentar
9

http://www.configuracionesintegrales.com/miguele/trdissqlserver.asp?articulo=149 (09-08-05)

hacer una consulta a una tabla que este en el servidor donde yo no este trabajando. a) b) c) d) e) f) Valor actividad: 30 Puntos Producto esperado: Base da tos distribuida Fecha inicio: Fecha entrega: Forma de entrega: Base de datos. Tipo de Actividad: Equipo (5 gentes) 5.3.4.1.2. CRITERIO DE EVALUACIN DE LA ACTIVIDAD 1
ACTIVIDAD DESARROLLO Estructura de la base de datos Configuracin de los servidores Conexion de los servidores Pruebas a la base de datos Total 10 puntos 30 Puntos PONDERACIN 5 puntos 5 puntos 10 puntos

Realizacion de una Base de Datos Distribuida

5.3.5. RESULTADO DE APRENDIZAJE Verificar las ventajas que ofrece una Base de Datos Distribuida a diferencia de una Base de datos Relacional. 5.3.6. BIBLIOGRAFA http://www.configuracionesintegrales.com/miguele/trdissqlserver.asp?articulo=149 5.3.7. DOCUMENTOS

UNIDAD TEMATICA 6. TECNOLOGAS DE ACCESO A DATOS 6.1. ARQUITECTURAS MULTICAPA y XML 6.1.1. OBJETIVO DE APRENDIZAJE Entender el funcionamiento del lenguaje XML 6.1.2. RECURSO TIEMPO DEL TEMA 4 horas 6.1.3. DESARROLLO

QUE ES XML Introduccion

XML es un Lenguaje de Etiquetado Extensible muy simple, pero estricto que juega un papel fundamental en el intercambio de una gran variedad de datos. Es un lenguaje muy similar a HTML pero su funcin principal es describir datos y no mostrarlos como es el caso de HTML. XML es un formato que permite la lectura de datos a travs de diferentes aplicaciones.

Las tecnologas XML son un conjunto de mdulos que ofrecen servicios tiles a las demandas ms frecuentes por parte de los usuarios. XML sirve para estructurar, almacenar e intercambiar informacin.

Conceptos

Entre las tecnologas XML disponibles se pueden destacar:

XSL: Lenguaje Extensible de Hojas de Estilo, cuyo objetivo principal es mostrar cmo debera estar estructurado el contenido, cmo debera ser diseado el contenido de origen y cmo debera ser paginado en un medio de presentacin como puede ser una ventana de un navegador Web o un dispositivo de mano, o un conjunto de pginas de un catlogo, informe o libro.

XPath: Lenguaje de Rutas XML, es un lenguaje para acceder a partes de un documento XML.

XLink: Lenguaje de Enlace XML, es un lenguaje que permite insertar elementos en documentos XML para crear enlaces entre recursos XML.

XPointer: Lenguaje de Direccionamiento XML, es un lenguaje que permite el acceso a la estructura interna de un documento XML, esto es, a sus elementos, atributos y contenido.

XQL: Lenguaje de Consulta XML, es un lenguaje que facilita la extraccin de datos desde documentos XML. Ofrece la posibilidad de realizar consultas flexibles para extraer datos de documentos XML en la Web.

Cmo funcionan

XSL funciona como un lenguaje avanzado para crear hojas de estilos. Es capaz de transformar, ordenar y filtrar datos XML, y darles formato basndolo en sus valores. XPath identifica partes de un documento XML concreto, como pueden ser sus atributos, elementos, etc. XLink por su lado, describe un camino estndar para aadir hipervnculos en un archivo XML. Es decir, es un mecanismo de vinculacin a otros documentos XML.

Funciona de forma similar a un enlace en una pgina Web, es decir, funciona como lo hara <a href="">, slo que a href es un enlace unidireccional. Sin embargo, XLink permite crear vnculos bidireccionales, lo que implica la posibilidad de moverse en dos direcciones. Esto facilita la obtencin de informacin remota como recursos en lugar de simplemente como pginas Web. XPointer funciona como una sintaxis que apunta a ciertas partes de un documento XML, es como una extensin de XPath. Se utiliza para llegar a ciertas partes de un documento XML.

Primero, XLink permite establece el enlace con el recurso XML y luego es XPointer el que va a un punto especfico del documento. Su funcionamiento es muy similar al de los identificadores de fragmentos en un documento HTML ya que se aade al final de una URI y despus lo que hace es encontrar el lugar especificado en el documento XML.

Al ser XPointer una extensin de XPath, XPointer tiene todas las ventajas de XPath y adems permite establecer un rango en un documento XML, es decir, con XPointer es posible establecer un punto final y un punto de inicio, lo que incluye todos los elementos XML dentro de esos dos puntos.

Finalmente, XQL, lenguaje de consultas, se basa en operadores de bsqueda de un modelo de datos para documentos XML que puede realizar consultas en infinidad de tipos de documentos como son documentos estructurados, colecciones de documentos, bases de datos, estructuras DOM, catlogos, etc.10

XML Y SQL SERVER 2000


Una de las prestaciones ms esperadas de SQL 2000 ha sido el soporte para XML (eXtensible Markup Language o Lenguaje de marcas extensible). Paradjicamente, es una caracterstica cuyo valor prctico e inmediato no acaba de estar claro. Por una parte, todo el mundo ha odo hablar de ese lenguaje tan especial que hara de puente entre el resto de los lenguajes y, por otra, la prctica totalidad de sistemas gestores de bases de datos relacionales proclaman soportar el estndar XML. Pero veamos, cundo, dnde y por qu habra que usar XML?

XML, el estndar de Internet para intercambio de informacin, fue diseado para publicar tipos de datos independientemente de la plataforma empleada, permitiendo as la interoperabilidad y el comercio electrnico. En las pginas web, XML tambin separa el contenido de la presentacin y, de este modo, permite un sistema estndar para definir e intercambiar datos entre aplicaciones y bases de datos. (En el artculo XML: el ltimo gran invento, publicado en exclusiva en esta sede web, hallar las ventajas de utilizar XML para separar la presentacin de los contenidos).

Al tratarse de un lenguaje construido para la definicin de otros lenguajes de marcas o cdigos (markup languages), su primera ventaja proviene por la

10

http://www.netyweb.com/contenido.asp?vcon=33 (05-aGO-05)

aceptacin de algn lenguaje definido mediante XML, o por la aceptacin del propio estndar XML, y despus por la proliferacin de utilidades, herramientas e infraestructura que sin duda surgirn para soportar su utilizacin. Aunque XML ya dispone de algunos lenguajes definidos excelentes --como BizTalk, DSML (Directory Markup Language o Lenguaje de marcas de directorio) y SOAP (Simple Object Access Protocol o Protocolo de acceso a objetos simples)--, no es un lenguaje al alcance de cualquiera, especialmente de quienes estn acostumbrados a desarrollar aplicaciones Windows de 32 bits con los productos ms conocidos de Microsoft. Si hablamos de transferir datos a travs de redes locales, la opcin ms lgica parecen ser las tablas de resultados ADO. Pero, ya metidos de lleno en la era Internet, pocas son las organizaciones que desean aislarse del resto del mundo. E incluso dentro de una misma organizacin, empieza a ser raro encontrar un entorno puro (no hbrido), con tipos de servidores, plataformas o lenguajes nicos.

Si bien SQL Server 2000 es la primera versin de SQL Server que soporta XML, las primeras entregas de tecnologa XML desarrolladas por Microsoft ya podan ejecutarse bajo las versiones 7.0 y 6.5 (entregas que pueden descargarse desde la sede web de Otra Microsoft manera de

http://msdn.microsoft.com/workshop/xml/articles/xmlsql/).

proporcionar soporte para XML bajo SQL Server 7.0, 6.x y 4.2 consiste en escribir procedimientos almacenados ampliados y estndares, aunque estos ltimos podran menguar considerablemente el rendimiento si se estn manipulando grandes tablas de resultados con estructuras complejas. Por otro lado, algunas funciones de SQL Server 7.0, como la bsqueda de textos completos, son capaces de almacenar el cdigo XML como texto. La pregunta obvia es: qu otras prestaciones aporta SQL Server 2000 para que oficialmente se declare compatible con XML?

Tradicionalmente, desde una base de datos se podan solicitar dos clases de XML: XML esttico almacenado dentro de la base de datos y XML dinmico generado a partir de los datos contenidos en la base de datos. Ya la primera versin de SQL Server era capaz de utilizarse como repositorio de XML y los

programadores han utilizado ampliamente las versiones anteriores a SQL Server 2000 para crear aplicaciones que generan XML. Pero ahora, SQL Server 2000 soporta un nuevo tipo de datos denominado XML que permite almacenar XML en la base de datos, de forma nativa. Disponer de un tipo de datos nativo XML es uno de los criterios que hace de SQL Server 2000 un producto compatible con XML. Pero, adems, SQL Server 2000 tambin introduce: URL (Universal Resource Locator o Localizador de recursos universal) que permiten acceder a SQL Server a travs del protocolo http,

la clusula FOR XML dentro de la sentencia SELECT, pudiendo as recuperar resultados en formato XML, procedimientos almacenados del sistema para la manipulacin de datos XML, operaciones por lotes basadas en XML (grams) de actualizacin para operaciones por lotes y extensiones proveedoras de SQL Server OLE DB para XML.

A continuacin, examinaremos de cerca estas mejoras introducidas por el XML de SQL Server 2000 y veremos un ejemplo de cmo compatibilizar sus sistemas para extraer datos en formato XML desde su SQL Server 2000, formateando dichos datos a su medida para utilizarlos despus en sus aplicaciones. ACCESO A TRAVS DE HTTP SQL Server 2000 permite introducir una sentencia SQL en el campo Direccin de IE 5.0 (Internet Explorer 5.0 de Microsoft) y recuperar registros en formato XML. La siguiente consulta pseudo URL muestra los diversos componentes de una consulta del tipo mencionado: http://<SERVIDOR WEB>/ <DirectorioVirtual> ?sql=<CONSULTA SQL CODIFICADA>+FOR+XML+RAW

En primer lugar, la consulta utiliza el protocolo HTTP, lo cual permite utilizar cualquier tipo de software cliente existente o que usted mismo pueda crear. A continuacin, la consulta dirige su peticin al servidor web, IIS (Internet Information Server, de Microsoft), a travs de una raz virtual ubicada en el servidor IIS y que debe configurarse previamente para que pueda utilizar las extensiones XML de SQL Server. En tercer lugar, la consulta pide los datos deseados. Por lo general, cuando se solicitan datos desde un servidor web, suele utilizarse un formulario HTML con uno de los dos mtodos tpicos: GET o POST. Con GET, los datos del formulario contenido en el cliente se transfieren hasta el servidor como pares nombre/valor aadidos al final de la URL. Este mecanismo est sujeto a inconvenientes harto conocidos, entre los que se cuentan la limitacin de longitud para la URL y ciertos fallos de seguridad. El mtodo preferido en el desarrollo de aplicaciones es POST, ya que los pares nombre/valor contenidos en el formulario se almacenan en el cuerpo de la solicitud HTTP. A pesar de lo dicho, los ejemplos de este artculo utilizarn el mtodo GET para enviar consultas a la base de datos, ya que, de este modo, usted podr visualizar la cadena que conforma la solicitud de datos. Otra de las nuevas posibilidades consiste en utilizar sentencias SQL o procedimientos almacenados para acceder a los datos en formato XML. O bien ejecutar una plantilla XML, es decir, un documento XML que contiene una o ms consultas vlidas, sentencias u operaciones por lotes basadas en XML (grams) actualizadas. Las plantillas suelen tener la siguiente forma: <sql:query xmlns:sql="urn:schemas-microsoft-com:xml-sql" name1=valor1 name2=valor2> sentencia(s) sql </sql:query> La invocacin de plantillas se realiza incluyndolas en la peticin GET o POST o llamndolas como archivos guardados en el directorio virtual del servidor web. Si sus consultas SQL suelen ser largas, IE no podr mostrarlas en la barra de tareas y, por lo tanto, va a tener que teclearlas una y otra vez durante las pruebas que vaya ejecutando. Por esta razn, y otras muchas, resulta

conveniente almacenar las plantillas de consultas como archivos del directorio virtual e invocarlas del modo siguiente: http://miservidor/Northwind/miconsulta.xml La consulta miconsulta.xml solicita la informacin sobre el pedido de un cliente representado por un determinado identificador de cliente. La plantilla tiene el siguiente aspecto: ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql"> <sql:query IDCliente=PACOS> SELECT IDPedido, FechaPedido, FechaEntregaSolicitada, FechaEnvio FROM PEDIDOS WHERE IDCliente=? ORDER BY IDPedido XML RAW </sql:query></ROOT> Con las consultas-plantilla tambin pueden utilizarse parmetros. Esto permite combinar las consultas con el lenguaje XSL (Extensible Style Language o Lenguaje de estilo extensible) pudiendo as sustituir rpidamente el cdigo de determinadas pginas ASP (Active Server Pages o Pginas de servidor activo) superdinmicas que realizan consultas contra bases de datos y formatean los registros resultantes como tablas HTML. El lenguaje XSL describe cmo formatear o mostrar los datos XML. El empleo de consultas-plantilla vinculadas a hojas de estilo XSL se acerca mucho al uso de los archivos HTX (Hypertext Markup Language Extension o Extensin del lenguaje de marcas

hipertextuales) y conectores IDC (Internet Database Conector o Conector de base de datos de Internet), posteriormente remplazados y mejorados por las pginas ASP. Si bien es verdad que las prestaciones XML de SQL Server, por s solas, son incapaces de remplazar a las ASP, tampoco deja de ser cierto que XML permite recuperar los datos de forma ms sencilla, aparte de resultar ms rpido y fcil de implementar. En la Pantalla de Vista de un navegador con los registros devueltospor una consulta en formato XML se muestra el resultado de una consulta simple en la que se combinan una consulta-plantilla XML y una hoja de estilo XSL:

http://miservidor/Northwind/miconsulta.xml? IDCliente=pacos&xsl=ptab.xsl LA CLUSULA 'FOR XML' En SQL Server 2000, el empleo de la nueva clusula FOR XML dentro de una sentencia SELECT genera documentos XML en lugar de un conjunto de filas. Esta nueva clusula puede utilizarse tanto en consultas como en

procedimientos almacenados. Los argumentos admitidos por FOR XML son XML mode, SchemaOptions y ELEMENTS. XML Mode. Las tres

modalidades XML posibles son RAW, AUTO o EXPLICIT. Cada una de ellas especifica la forma del rbol XML resultante (en la Tabla 1, hallar una descripcin de las tres modalidades). De las tres, la ms til es EXPLICIT, ya que permite crear un rbol XML (siempre que disponga de los datos imprescindibles) que, a su vez, proporciona los datos XML en el formato que usted prefiera.

SchemaOption. Esta opcin instruye a la base de datos para que devuelva un esquema. SchemaOption puede devolver resultados DTD (Document Type Definition o Definicin de tipo de documento) o XMLData. DTD devuelve el esquema y aade el elemento raz a los resultados. XMLData, a su vez, devuelve el esquema pero no aade el elemento raz. Si se especifica SchemaOption, la clusula aadir el esquema al principio del documento. En caso contrario, la base de datos no devolver ningn esquema.

ELEMENTS. En caso de utilizar la opcin ELEMENTS, la sentencia SELECT devolver subelementos en las columnas. De otro modo, la sentencia correlaciona las columnas con los atributos XML. SQL Server 2000 nicamente soporta esta opcin si la modalidad AUTO est activada.

Para especificar la modalidad XML en la clusula FOR de la sentencia SELECT, deber utilizar la sintaxis: FOR | [XML mode [, SchemaOption] [, ELEMENTS]]

PROCEDIMIENTOS ALMACENADOS DEL SISTEMA. SQL Server 2000 introduce seis nuevos procedimientos almacenados del sistema para manipular los datos XML: sp_xml_preparedocument, sp_xml_insertfromxml,

sp_xml_fetchdocument,

sp_xml_removedocument,

xp_xml_removexml y sp_xml_fetchintoxml. Los procedimientos almacenados para la manipulacin de datos XML slo estn disponibles por cada conexin que se establece. Esto no los hace especialmente tiles en aplicaciones n-tier (multicapa), que reservan

conexiones precisamente para asegurarse la escalabilidad. No obstante, los procedimientos ofrecen otro tipo de funcionalidad, ya que permiten almacenar (preparedocument) y recuperar documentos mediante un puntero

(fetchdocument). Complementariamente, tambin se puede eliminar un documento entero o algunos elementos del documento (removedocument, removexml), realizar inserciones en un documento XML desde una tabla o desde un documento XML a una tabla (insertfromxml, fetchintoxml). A pesar de que SQL Server 2000 ofrece un acceso muy completo desde el programa al lenguaje XML, algunos motores y extensiones de XML especficos, como interMedia, de Oracle8i, proporcionan un control de XML mucho ms exhaustivo en tareas como, por ejemplo, consultar conjuntos de documentos XML o encontrar elementos o patrones especficos dentro de un documento. No obstante, SQL Server 2000 dispone de otros avances, como las funciones

definidas por el usuario, que podran suplir esas carencias al permitir la redaccin de cdigo adicional adaptado a las necesidades de cada usuario. Pero aun con la funcionalidad actual, que le permite usar XML como medio de transporte para los datos relacionales, SQL Server 2000 no slo cumple sobradamente los requisitos de una base de datos compatible con XML, sino que adems destaca por su facilidad de uso. A partir de la base de datos de ejemplo Northwind, por ejemplo, podra construirse una aplicacin web compatible con XML, diseada para dar servicio a sus clientes, en unas pocas horas. GRAMS DE ACTUALIZACIN

Las grams de actualizacin son operaciones por lotes, basadas en XML, destinadas a insertar, suprimir y actualizar con el siguiente formato general:
<sql:sync xmlns:sql="urn:schemas-microsoft-com:xml-sql"> <sql:before> <NOMBRE_TABLA [sql:id="valor"] col="valor" col="valor" ../> </sql:before> <sql:after> <NOMBRE_TABLA [sql:id="valor"] [sql:at-identity="valor"] col="valor col="valor" ../> </sql:after> </sql:sync>

Para llevar a cabo una operacin INSERT, basta con utilizar un bloque sql:after. El bloque sql:before ejecuta una operacin de DELETE y la de UPDATE se consigue empleando ambos bloques. Para que la transaccin se produzca con xito, la base de datos debe completar todas las operaciones dentro de un bloque sql:sync. OLE DB PARA XML Las nuevas extensiones de SQL Server 2000 proveedoras de OLE DB para XML --ICommandText::SetCommandText y ICommand::Execute-- permiten que los documentos XML se conviertan en autnticos mandatos, pudiendo ejecutarlos y recuperar los resultados en forma de corrientes (streams),

fcilmente manipulables en procesos posteriores. No resultara difcil, por ejemplo, pasar el documento XML a DOM (Document Object Model o Modelo de objeto documento), una interfaz gracias a la cual los programas y guiones acceden dinmicamente-- a los documentos y actualizan sus contenidos, estructura y estilo. SQL Server tambin soporta plantillas que se comportan como textos de mandatos; slo hay que passar DBGUID_MSSQLXML como GUID (Globally Unique ID o ID nico global) del mandato. El consumidor debe invocar el mandato ICommand:Execute para ejecutar plantillas XML. Para obtener un conjunto de resultados como documento XML, hay que establecer el riid a Istream, consiguiendo de este modo que el proveedor devuelva los resultados como una corriente (stream). COMPATIBLE CON XML Lo primero que cualquier desarrollador de SQL Server desea conseguir con XML es transformar datos relacionales estndares a formatos XML. Aunque muchas empresas tambin puedan estar desarrollando nuevas aplicaciones, su primer inters se centrar en transformar al formato XML todos aquellos datos que ya estn disponibles. He aqu un ejemplo sencillo que debera ayudarle a ponerse en marcha. En primer lugar, configure un usuario e inicio de sesin para que la base de datos Northwind (incluida en la instalacin del producto como ejemplo de base de datos) pueda utilizar todas las consultas relacionadas con XML. A continuacin, entre en Programas, Microsoft SQL Server 2000 y Configurar soporte SQL para XML en IIS para llegar a la pantalla que le permitir configurar las extensiones XML SQL Server de IIS. La Pantalla de Registro de las extensiones XML para SQL Server muestra esta configuracin, con la mayora de las opciones por omisin seleccionadas. Sin embargo, la casilla Permitir consultas URL est marcada para poder ejecutar consultas de este tipo. Como ya hemos mencionado, una consulta URL es una sentencia SQL inmersa en la URL de una mquina IIS configurada

para soportar el lenguaje XML de SQL Server. En consultas expresas de este tipo, la URL transfiere la sentencia SQL como un nico parmetro. En este ejemplo, los parmetros de la conexin tambin se han configurado para utilizar una cuenta de SQL Server ya existente. (Observe que en todos los ejemplos de los libros en lnea SQL Server --Books on line o BOL-- siempre se menciona a Nwind como raz virtual; por lo tanto, deber cambiar dicho valor por el nombre de su propia raz virtual). En nuestro caso, durante la instalacin de Windows 2000 hemos incluido tanto el servidor web como SQL Server 2000. Si decide instalar SQL Server 2000 en una mquina donde ya tenga instalado SQL Server 7.0, asegrese de estar refirindose a la versin correcta de SQL Server. Veamos ahora un ejemplo de consulta URL : http://miservidor/Northwind?sql=SELECT+IDCliente, NombreContacto+FROM+Clientes+FOR+XML+RAW en la que miservidor es el nombre de la mquina que ejecuta el servidor IIS, /Northwind se refiere al directorio virtual configurado para el soporte XML y ?sql= es el nico parmetro que describe la sentencia SQL. El resto de la consulta es la propia sentencia SQL codificada de modo que pueda pasarse de forma segura dentro de la direccin URL. SQL Server recibe la sentencia como: SELECT IDCliente, NombreContacto FROM Clientes FOR XML RAW La consulta solicita XML RAW (XML puro), lo que devuelve cada fila como un elemento independiente, con campos en cada fila listados como atributos separados de ese elemento. La Pantalla de Resultado de una consulta URL muestra un ejemplo del resultado de esta consulta.

En aplicaciones de mltiples capas (n-tier) que utilizan un nmero limitado de procedimientos almacenados con parmetros establecidos para controlar el acceso a los datos, el esquema de la base de datos puede modificarse, sin tener que cambiar ningn cdigo cliente, con slo editar los procedimientos almacenados relevantes. Tome como ejemplo el procedimiento almacenado de la base de datos Northwind mostrado en el Listado 1. Para que este procedimiento almacenado sea compatible con XML, deber crearse un nuevo procedimiento almacenado con las modificaciones que se resaltan en el Listado 2. A continuacin, tendr que enviar al servidor SQL una solicitud execute pedidosclientesxml GNZLZ", introduciendo la siguiente URL en el campo Direccin de IE 5.0: http://miservidor/northwind?sql=execute+ pedidosclientesxml+GNZLZ Los resultados generados dentro de su navegador sern registros con formato XML, tal como se muestra en la Figura. Este ejemplo utiliza la convencin T-SQL execute <nombre_procedimiento_almacenado>" , pero las extensiones XML de SQL Server para IIS tambin soportan las llamadas a funcin mediante CALL, al estilo de ODBC. La consulta ilustrada demuestra cmo sacar partido de las funcionalidades ms bsicas, pero,

indudablemente, tiles. Si adems introducimos hojas de estilo XSL, podremos generar documentos HTML con informes de seguimiento acerca de los pedidos de los clientes. Para conseguirlo, bastara con combinar este documento XML con otro XSL. Las ventajas del mtodo XML sobre las pginas ASP tradicionales son que, por una parte, XML ofrece ms flexibilidad para generar presentaciones de datos

sencillas y, por otra, su implementacin es mucho menos costosa. Si desea conocer todas sus posibilidades, espere a ver el alud de aplicaciones de ejemplo que nos llegarn con la nueva versin de SQL Server 2000.

Vista de un navegador con los registros devueltospor una consulta en formato XML

Registro de las extensiones XML para SQL Server

Resultado de una consulta URL

RASCANDO EN LA SUPERFICIE Con XML pueden definirse tipos de documentos estndares que le permitirn compartir, transmitir y transformar la informacin de la empresa, as como facilitar la automatizacin de los procesos empresariales. En el recuadro Enlaces XML encontrar algunas direcciones web que le ayudarn a investigar ms a fondo las posibilidades y ventajas del lenguaje XML. Este artculo apenas deja al descubierto una parte insignificante de todo lo que se puede hacer y rpidamente-- con XML y SQL Server 2000. Un ltimo ejemplo: hace poco creamos un servicio muy sencillo basado en el protocolo HTTP (un conjunto de URL con parmetros de consulta bien definidos que devolvan datos XML) en un asombroso tiempo rcord de 10 minutos. Conseguimos tener la URL funcionando en menos tiempo del que tardamos en telefonear para averiguar si la especificacin haba llegado correctamente. Este

tipo de productividad mejorada har de SQL Server 2000 la plataforma ideal para la entrega de formatos XML11 6.1.3.1. 6.1.3.2. TCNICA DIDCTICA Exposicin del profesor. MATERIAL DE APOYO

6.1.4. ACTIVIDADES DE APRENDIZAJE 6.1.4.1. ACTIVIDAD DE APRENDIZAJE 1 A25-ER6 Examen Rpido XML. 6.1.4.1.1. INSTRUCCIONES Formular 5 preguntas del tema y dictrselas a los alumnos para que se resuelvan. a) b) c) d) e) f) Valor actividad: 5 Puntos Producto esperado: Contestar preguntas de manera escrita Fecha inicio: Fecha entrega: Forma de entrega: Documento Tipo de Actividad: Individual 6.1.4.1.2. CRITERIO DE EVALUACIN DE LA ACTIVIDAD 1
ACTIVIDAD Examen Rpido XML DESARROLLO Formular preguntas y dictrselas a los alumnos para que se resuelvan. Total PONDERACIN 5 puntos 5 Puntos

6.1.5. RESULTADO DE APRENDIZAJE Entender claramente el lenguaje XML 6.1.6. BIBLIOGRAFA http://www.windowstimag.com/sqlmag/atrasados/01_sep00/articulos/XML_1.htm 6.1.7. DOCUMENTOS

6.2. TECNOLOGAS DE ACCESO A DATOS: ODBC, OLEDB, ADO y ASP. 6.2.1. OBJETIVO DE APRENDIZAJE Manejar una base de datos a traves de una de las tecnologas mencionas en el titulo del tema.
11

http://www.windowstimag.com/sqlmag/atrasados/01_sep00/articulos/XML_1.htm (9-08-05)

6.2.2. RECURSO TIEMPO DEL TEMA 12 horas 6.2.3. DESARROLLO

Aqu se describe las distintas interfaces de programacin de aplicaciones (API) disponibles en SQL Server. El apndice pretende proporcionar una breve panormica de cada API, presentar las ventajas y desventajas relativas de cada una y explicar qu las interfaces juegan un papel importante en la estrategia de futuro de Microsoft.

Guas generales de seleccin de una interfaz

Como administrador de bases de datos, necesita conocer qu interfaces de programacin hay disponibles para SQL Server. Por ejemplo, puede que se incorpore a un grupo de desarrolladores que estn trabajando en la construccin de un programa personalizado que utilice SQL Server como base de datos. En este tipo de entorno, puede que le pidan ayuda para decidir qu API es la ms adecuada para el tipo de aplicacin que est siendo desarrollada. Incluso si usted mismo no escribe directamente cdigo de programa utilizando una de las API de SQL Server, tiene que conocer cules hay disponibles y las ventajas y desventajas de cada una. Tambin debe ser consciente de que cualquier producto de otras empresas escrito para SQL Server debe incluir el logotipo de Windows el de BackOffice. El logotipo de Windows indica que los productos pueden

ejecutarse tanto en plataformas NT 4.0 como Windows 95/98, mientras que los productos compatibles con BackOffice se ejecutarn como servicios NT y permitirn inicios de sesin unificados y la utilizacin del protocolo TCP/lP, entre otras funciones. Consulte el sitio web de Microsoft, en la direccin http://www.microsoft.com/windows/thirdparty/winlogo/. para obtener ms

informacin sobre la compatibilidad con Windows, y consulte la direccin http://www.microsoft.com/backoffice/designed/, para obtener ms

informacin sobre la compatibilidad con BackOffice.

TABLA

D.1.
API

INTERFACES DE PROGRAMACIN DE SQL SERVER

Lenguaje

Estndar

Soporte OLAP

Caractersticas de SQL Server 7.0 La mayora Todas La mayora Todas Limitadas Limitadas Limitadas

ADO OLE DB RDO ODBe DAO DB-Library VB-SQL oex SQL incrustado

VB, ve, VJ, VBS, JS

Emergente Emergente Actual Actual Actual Heredada Heredada

S S No No No No No

ve
VB,VJ Ve,VB VB,Ve VB,Ve VB

ve

Heredada

No

Limitadas

La Tabla es un resumen de las distintas interfaces disponibles en SQL Server, en el que se indica bajo qu lenguajes de programacin est disponible y si la API forma parte de la estrategia de futuro de Microsoft o forma parte del cdigo heredado.
VB = Visual Basic, VC = Visual C++, VJ = Visual J++, VBS = VBScript y JS = JavaScript

ADO Los objetos de datos ActiveX (ActiveX Data Objects, ADO) pueden considerarse como un envoltorio de OLE DB, que proporciona un modelo de objetos estructurado, fcil de programar y sencillo de utilizar: un conjunto de interfaces COM que proporcionan acceso a muchos orgenes de datos diferentes. Puede emplearse ADO para comunicarse con distintos orgenes de datos compatibles con OLE DB, y no slo con SQL Server. Se recomienda utilizar ADO como API principal para acceder a datos desde aplicaciones de propsito general. Puesto que ADO est construido sobre la API OLE DB y es un modelo de objetos simplificado, reduce el tiempo de desarrollo y la curva de aprendizaje asociados con cualquier nueva Apl. Una aplicacin ADO se comunica con un origen de datos OLE DB utilizando un proveedor OLE DB. Un proveedor OLE DB es una biblioteca de enlace dinmico que utiliza interfaces OLE DB para acceder a un origen de datos concreto. Pueden utilizarse dos tipos de proveedores OLE DB con SQL Server:

SQLOLEDB. El proveedor OLE DB de SQL Server, que hace corresponder de manera directa las interfaces OLE DB a SQL Server.

MSDASQL. El proveedor OLE DB para ODBC, que hace corresponder las interfaces OLE DB con una API ODBC.

El proveedor OLE DB de SQL Server, que se suministra con ste, es el suministrador preferido para las aplicaciones ADO que accedan a SQL Server. Es una asignacin directa de la interfaz a SQL Server, en lugar de un nivel colocado sobre una API preexistente, como es el caso de MSDASQL con ODBC.

OLE DB OLE DB es una API de bajo nivel basada en COM12 (Desde un punto de vista prctico, un objeto COM es bsicamente una caja negra que nuestra aplicacin puede usar para llevar a cabo una o ms tareas) para acceder a datos de diversos orgenes de datos. OLE DB es el mtodo preferido para desarrollar utilidades o aplicaciones SQL Server que requieran un mximo rendimiento. El proveedor OLE DB de SQL Server, SQLOLEDB, es un proveedor compatible con la versin 2.0 de OLE DB. Proporciona acceso directo al protocolo nativo de SQL Server, TDS (Tabular Data Stream, Flujo de Datos Tabulares). Sin embargo, esta potencia tiene un precio asociado: la complejidad. Requerir ms tiempo de desarrollo, tanto en trminos de la curva de aprendizaje de la nueva API, como del tiempo requerido para escribir programas.

SQL-DMO y SQL Namespace SQL Distributed Management Objects (SQL-DMO, Objetos de Administracin Distribuidos) es un conjunto de objetos COM que proporciona un modelo de objetos para la administracin de la duplicacin y las bases de datos SQL Server. Se implementa como un servidor en proceso de interfaz dual. Puede desarrollarse una aplicacin SQL-DMO utilizando un control de automatizacin OLE, como el de Visual Basic, o desarrollando una aplicacin basada en COM
12

El COM (Component Object Model ) es un estndar binario que define como se crean y destruyen los objetos y, lo

ms importante, como interactan entre ellos. La idea es que distintas aplicaciones con distintos cdigos fuente puedan comunicarse entre ellas mediante procesos, siempre que dichas aplicaciones sigan el estndar COM. Normalmente se usa el COM para establecer fcilmente comunicaciones con otros procesos. http://www.etse.urv.es/EngInf/assig/ens4/2004/net4a.pdf (04/Ago/05)

mediante C++. SQL-DMO requiere el controlador ODBC de SQL Server, versin 3.70 o posterior, incluido en SQL Server 7.0. SQL Namespace, SQL-NS, es un conjunto de interfaces COM que permite a una aplicacin mostrar los componentes de interfaz de usuario del Administrador corporativo. Esto permite a cualquier aplicacin desarrollada en Visual Basic o Visual C++ mostrar cualquiera de los muchos asistentes, hojas de propiedades y cuadros de dilogo del Administrador corporativo. Utilizando los objetos SQL Namespace, cualquier des arrollador de aplicaciones puede aprovecharse de la funcionalidad ya incorporada en SQL Server. Por ejemplo, un desarrollador de aplicaciones que quiera que se puedan realizar copias de seguridad de las bases de datos SQL Server directamente desde su aplicacin, puede utilizar objetos SQL Namespace para proporcionar esta capacidad, en lugar de escribir su propio cdigo.

ODBC y RDO ODBC es la API estndar empleada para acceder a datos almacenados en bases de datos relacionales o ISAM. SQL Server incluye ODBC como una de sus API nativas para el desarrollo de aplicaciones escritas en Visual C++ y Visual Basic. Las aplicaciones que se comunican con SQL Server mediante ODBC requieren un mayor esfuerzo de desarrollo que otras API, porque se trata de una interfaz de bajo nivel. Al igual que ADO, RDO es un conjunto de objetos simplificados que proporciona acceso a bases de datos compatibles con ODBC. Requiere menos esfuerzo que ODBC, pero carece de la rapidez y grado de control disponibles cuando se utilizan llamadas a funciones nativas ODBC. Las aplicaciones escritas en Visual Basic y Visual J++ pueden utilizar RDO. Para el uso futuro de ODBC, Microsoft recomienda que todas las aplicaciones de nuevo desarrollo realicen la migracin desde ODBC o RDO a OLE DB o ADO. OLE DB es la direccin futura para todas las API de acceso a datos, porque proporciona la posibilidad de consultar y extraer datos de orgenes tan diversos como SQL Server, Microsoft Access e incluso hojas de clculo Microsoft Excel.

Interfaces heredadas: DB-Library, ODS y SQL incrustado

DB-Library es una API que consiste en un conjunto de funciones y macros en C. Un subconjunto de esta biblioteca est disponible para su utilizacin con Visual Basic. DBLibrary es la API original proporcionada con SQL Server y fue su API estndar hasta el advenimiento de ODBC y, ahora, de OLE DB.

PRECAUCIN DB-Library no ha sido mejorado con respecto a las capacidades disponibles en SQL Server 6.5. Aunque todas las aplicaciones basadas en DB-Library seguirn funcionando con SQL Server 7.0, no podrn acceder a las numerosas funciones nuevas que SQL Server 7.0 proporciona. Considere realizar la migracin de sus aplicaciones DB-Library a alguna de las nuevas API, como ADO.

SQL incrustado para C permite a las aplicaciones incrustar instrucciones Transact-SQL en cdigo fuente escrito en lenguaje C. Las aplicaciones que utilicen SQL incrustado para C necesitarn que se preprocese el cdigo fuente mediante un precompilador. El precompilador de SQL incrustado convierte las instrucciones incrustadas Transact-SQL en llamadas de funcin que pueden ser procesadas por un compilador C. El compilador C generar un programa ejecutable a partir de los resultados preprocesados. SQL incrustado se considera una API heredada y Microsoft sugiere que slo se utilice cuando una aplicacin deba forzosamente mantener estndares ANSI SQL estrictos. Los Servicios abiertos de datos (ODS, Open Data Services) son una API basada en SQL Server, que puede ser utilizada para ampliar las capacidades que SQL Server incluye. La API consiste en un conjunto de funciones y macros C/C++, que pueden usarse para construir

procedimientos almacenados extendidos y aplicaciones de pasarela. Los procedimientos almacenados extendidos son bibliotecas de enlace dinmico que aaden funcionalidad mediante rutinas desarrolladas en C/C++ (y pronto en Visual Basic y Visual J++, tambin) utilizando la API de los servicios abiertos de datos y la API Win32. Los usuarios pueden invocar los procedimientos almacenados extendidos de la misma forma que los

procedimientos almacenados normales. SQL Server contiene diversos procedimientos almacenados extendidos, todos los cuales llevan como prefijo xp. El procedimiento xp_sendmail es un buen ejemplo de procedimiento almacenado extendido: . ampla la funcionalidad de SQL Server, permitiendo enviar correo electrnico desde un lote Transact-SQL. En las versiones anteriores de SQL Server, ODS era el nico medio de proporcionar una pasarela con aplicaciones que no fueran de SQL Server. Si se deseaba escribir una aplicacin que almacenara datos en SQL Server y accediera a otro origen de datos situado en una aplicacin de otra compaa, haba que desarrollar una aplicacin pasarela utilizando ODS. ODS es difcil de programar y requiere una gestin exhaustiva de las excepciones. Con el advenimiento de la funcin de consulta distribuida y los Servicios de transformacin de datos de SQL Server 7.0, y con el lanzamiento de Microsoft Transaction Server, hay menos necesidad de emplear ODS. Es recomendable que las nuevas aplicaciones de pasarela para SQL Server empleen alguna de las tecnologas basadas en componentes. Las aplicaciones basadas en componentes son independientes del lenguaje y pueden ser ejecutadas bajo MTS, que ofrece ampliabilidad, seguridad y una gestin estructurada de los errores. ASP

Qu es ADO? ActiveX Data Objects (ADO) es una tecnologa ampliable y de fcil uso para agregar acceso a bases de datos a sus pginas Web. Puede utilizar ADO para escribir secuencias de comandos compactas y escalables que conecten con bases de datos compatibles con Open Database Connectivity (ODBC, Conectividad abierta de bases de datos) y orgenes de datos compatibles con OLE DB. Si no tiene mucha experiencia en conectividad con bases de datos, encontrar que las instrucciones de ADO son asequibles y no complicadas. Del mismo modo, si ya tiene experiencia en la programacin con bases de datos, apreciar las caractersticas avanzadas de conexin y de manipulacin de consultas independientes del lenguaje de ADO.

Nota. Si se desean usar las constantes de ADO se deben incluir los siguientes archivos. <!--#include virtual="/PROGRAM FILES/COMMONFILES/SYSTEM/ADO/ADOVBS.INC"--> <!--#include virtual="/PROGRAM FILES/COMMONFILES/SYSTEM/ADO/ADOJAVAS.INC" --> Caractersticas de ADO

Objetos creados independientemente. Ayudas de modificacin en lote. Soporte para procedimientos almacenados. Diferentes tipos de cursores. Soporte para retornar mltiples recordsets Aplicaciones libres de Hilos para aplicaciones de servidor web eficientes.

Objetos ADO

Connection: Mantiene la informacin de conexin con el proveedor de datos.

set VarConexion = Server.CreateObject(ADODB.Connection) Mtodos: Open: VarConexion.Open ConnectionString [,UserID] [,Password] Close: VarConexion.Close Execute: VarConexion.Execute CommandText,RecordsAffected,Options Propiedades: CommandTimeOut ConnectionString ConnectionTimeOut State Version DefaultDataBase

Command: Mantiene informacin acerca de un comando

set VarComando = Server.CreateObject(ADODB.Command) Mtodos: CreateParameter: Set varParametro= command.CreateParameter(Name, Type, Direction, Size, Value) Execute: Set recordset = command.Execute( RecordsAffected, Parameters, Options ) Propiedades: ActiveConectionComandtext CommandTimeOut CommandType Name Prepared State

Error: Mantiene informacin acerca de algn error ocurrido en el proveedor

set VarError = Server.CreateObject(ADODB.Error)

Field: Mantiene informacin de un nico campo dentro de un recordset

set VarConexion = Server.CreateObject(ADODB.Connection)

Parameter: Es un parmetro para ser usado en un objeto command.

set VarParametro = Server.CreateObject(ADODB.Parameter)

Property: Caractersticas de un objeto.

set VarPropiedad = Server.CreateObject(ADODB.Property)

Recordset: Conjunto de registros retornados desde una consulta con un cursor asociado.

set VarConexion = Server.CreateObject(ADODB.Recordset)

Mtodos: AddNew: recordset.AddNew Fields, Values CancelUpdate: recordset.CancelUpdate Close: object.Close Delete: recordset.Delete AffectRecords GetRows: array = recordset.GetRows( Rows, Start, Fields ) Move: recordset.Move NumRecords, Start Movefirst, MoveNext, MoveLast, MovePrevious: recordset.MoveX Open: recordset.Open Source, ActiveConnection, CursorType, LockType, Options Requery: recordset.Requery Update: recordset.Update Fields,Values Supports: boolean = recordset.Supports( CursorOptions ) Propiedades: AbsolutePage, AbsolutePosition, ActiveConnection, BOF, Bookmark, CacheSize, CursorLocation, CursorType, EditMode, EOF, Filter, LockType, MarshalOptions, MaxRecords, PageCount, PageSize, RecordCount, Source,

State, Status Creacin del Archivo de Acceso a Datos (DSN) Antes de crear secuencias de comandos para bases de datos tiene que proporcionar una forma para que ADO encuentre, identifique y se comunique con una base de datos. Los controladores de bases de datos (programas que pasan informacin desde su aplicacin Web a una base de datos) utilizan un Nombre de origen de datos (DSN) para encontrar e identificar una base de datos ODBC en particular. Normalmente, el DSN contiene informacin de configuracin de la base de datos, seguridad de usuarios y ubicacin, y puede tener la forma de una entrada en el registro del sistema de Windows NT o de un archivo de texto. Con ODBC puede elegir el tipo de DSN que va a crear: Usuario, Sistema o Archivo. Los DSN de Usuario y de Sistema residen en el registro del sistema de Windows NT. Los DSN de Sistema permiten que todos los usuarios que han iniciado una sesin en un servidor concreto tengan acceso a una base de datos, mientras que los DSN de Usuario limitan la conectividad con la base de datos a los usuarios que dispongan de las credenciales de seguridad apropiadas. Los DSN de Archivo, que tienen la forma de archivos de texto, proporcionan acceso a varios usuarios y son fcilmente transferibles entre un servidor y otro mediante la copia de los archivos DSN. Por estas razones, los ejemplos de este tema utilizan DSN de Archivo. Puede crear un DSN de Archivo si abre Panel de control desde el men Inicio de Windows. Haga doble clic en el icono ODBC y seleccione la hoja de propiedades DSN de Archivo. Haga clic en Agregar, elija el controlador de la base de datos y haga clic en Siguiente.

Para configurar un DSN de Archivo para una base de datos de Microsoft Access

1. En el cuadro de dilogo Crear nuevo origen de datos, seleccione Controlador Microsoft Access en el cuadro de lista, despus, haga clic en Siguiente. 2. Escriba el nombre de su DSN de Archivo y haga clic en Siguiente. 3. Haga clic en Finalizar para crear el origen de datos. 4. En el cuadro de dilogo Instalacin de ODBC para Microsoft Access 97, haga clic en Seleccionar. Elija un archivo de base de datos de Microsoft Access (*.mdb) y haga clic en Aceptar. Nota Por razones de rendimiento y confiabilidad, se recomienda

encarecidamente que utilice un motor de base de datos cliente-servidor para el despliegue de aplicaciones Web controladas por datos que requieran una elevada demanda de accesos por parte de ms de 10 usuarios simultneos. Si bien Pginas Active Server funciona con cualquier base de datos compatible con ODBC, se ha probado y est diseado para funcionar con bases de datos cliente-servidor como Microsoft (r) SQL Server u Oracle. ASP acepta bases de datos de archivos compartidos (Microsoft(r) Access o Microsoft(r) FoxPro) como orgenes vlidos de datos. Aunque algunos ejemplos de la documentacin de ASP utilizan una base de datos de archivos compartidos, se recomienda utilizar estos tipos de motores de bases de datos nicamente con fines de desarrollo o en situaciones de despliegue limitado. Las bases de datos de archivos compartidos pueden no ser tan adecuadas como las bases de datos cliente-servidor para aplicaciones Web de produccin muy exigentes.

Para configurar un DSN de Archivo para una base de datos de SQL Server

Nota Si la base de datos reside en un servidor remoto, pngase en contacto con el administrador del servidor para obtener informacin de configuracin adicional; el siguiente procedimiento utiliza la configuracin predeterminada de ODBC para SQL Server, que puede no funcionar con su configuracin hardware.

1. En el cuadro de dilogo Crear nuevo origen de datos, seleccione SQL Server en el cuadro de lista y haga clic en Siguiente. 2. Escriba el nombre de su DSN de Archivo y haga clic en Siguiente. 3. Haga clic en Finalizar para crear el origen de datos. 4. Escriba el nombre del servidor que ejecuta SQL Server, su Id. de inicio de sesin y su contrasea. 5. En el cuadro de dilogo Crear un nuevo origen de datos SQL Server, escriba en el cuadro de lista Servidor el nombre del servidor que contenga la base de datos de SQL Server y haga clic en Siguiente. 6. Seleccione el mtodo de comprobar la autenticidad del Id. de inicio de sesin. 7. Si elige la autenticacin SQL Server, escriba el Id. de inicio de sesin y la contrasea; despus, haga clic en Siguiente. 8. En el cuadro de dilogo Crear un nuevo origen de datos SQL Server, establezca la base de datos predeterminada, la configuracin de los procedimientos almacenados del controlador y los identificadores ANSI; despus, haga clic en Siguiente. (Para obtener ms informacin, haga clic en Ayuda.) 9. En el cuadro de dilogo (tambin se llama Crear un nuevo origen de datos SQL Server), elija el mtodo de traduccin de caracteres y haga clic en Siguiente. (Para obtener ms informacin, haga clic en Ayuda.) 10. En el siguiente cuadro de dilogo (tambin se llama Crear un nuevo origen de datos SQL Server), seleccione las opciones de registro. Nota Normalmente, slo debe utilizar el registro para depurar problemas de acceso a la base de datos. 11. En el cuadro de dilogo Instalacin de ODBC para Microsoft SQL Server, haga clic en Comprobar origen de datos. Si el DSN se ha creado correctamente, el cuadro de dilogo Resultados de la comprobacin indicar que la comprobacin es correcta.

Informacin de conexin y seguridad de SQL Server Si va a desarrollar una aplicacin ASP de base de datos diseada para conectar con una base de datos remota de SQL Server, debe tener en cuenta tambin los aspectos siguientes:
o

Esquema de conexin Puede elegir entre los mtodos Sockets TCP/IP y Canalizaciones con nombre para tener acceso a bases de datos remotas de SQL Server. Con Canalizaciones con nombre, los clientes de la base de datos tienen que estar autenticados por Windows NT antes de establecer una conexin, dejando la posibilidad de que un equipo remoto que ejecute canalizaciones con nombre pueda denegar el acceso a un usuario que tenga las credenciales apropiadas de acceso a SQL Server, pero no tenga una cuenta de usuario de Windows NT en dicho equipo.

Como alternativa, las conexiones que utilizan Sockets TCP/IP conectan directamente con el servidor de la base de datos, sin conectar a travs de un equipo intermediario (como es el caso de Canalizaciones con nombre). Como las conexiones establecidas mediante Sockets TCP/IP conectan directamente con el servidor de la base de datos, los usuarios pueden tener acceso mediante la autenticacin de SQL Server, no mediante la autenticacin de Windows NT.

Nota Para aumentar el rendimiento en la conexin con bases de datos remotas, utilice Sockets TCP/IP.
o

Seguridad Si utiliza las caractersticas de seguridad Integrada o Mixta de SQL Server y la base de datos de SQL Server reside en un servidor remoto, no podr utilizar la autenticacin Desafo/Respuesta de Windows NT. Especficamente, no puede reenviar credenciales

Desafo/Respuesta de Windows NT al equipo remoto. Esto significa que quiz tenga que utilizar la autenticacin Bsica, que se basa en que el usuario proporcione la informacin del nombre de usuario y la contrasea.

Para obtener ms informacin acerca de estos aspectos, visite la pgina principal de Microsoft SQL Server Technical Support en

http://www.microsoft.com/sqlsupport/.

Para configurar un DSN de Archivo para una base de datos de Oracle

Asegrese de que el software cliente de Oracle est correctamente instalado en el equipo donde vaya a crear el DSN. Para obtener ms informacin, consulte con el administrador del servidor y la documentacin de la base de datos. 1. En el cuadro de dilogo Crear nuevo origen de datos, seleccione Controlador ODBC de Microsoft para Oracle en el cuadro de lista y haga clic en Siguiente. 2. Escriba el nombre del DSN de Archivo y haga clic en Siguiente. 3. Haga clic en Finalizar para crear el origen de datos. 4. Escriba un nombre de usuario, una contrasea y el nombre del servidor; despus, haga clic en Aceptar. Nota Los archivos DSN tienen la extensin .dsn y residen en el directorio \Archivos de programa\Archivos comunes\ODBC\Data Sources. Para obtener ms informacin acerca de la creacin de DSN de Archivo, visite el sitio Web de Microsoft ODBC en http://microsoft.com/odbc/.

Conexin con una Base de Datos El primer paso para tener acceso a la informacin de una base de datos consiste en establecer una conexin con el origen de datos. ADO proporciona el objeto Connection, que puede utilizar para establecer y administrar las conexiones entre sus aplicaciones y las bases de datos de ODBC. El objeto Connection incorpora diversas propiedades y mtodos que puede utilizar para abrir y cerrar conexiones con bases de datos, y para enviar consultas de actualizacin de la informacin.

Para establecer una conexin con una base de datos, cree primero una instancia del objeto Connection. Por ejemplo, la siguiente secuencia de comandos crea una instancia del objeto Connection y procede a abrir una conexin: <% 'Crea un objeto Connection Set cn = Server.CreateObject("ADODB.Connection") 'Abre una conexin; la cadena hace referencia al DSN cn.Open "FILEDSN=MiBaseDeDatos.dsn" %> Nota La cadena DSN no contiene espacios en blanco ni antes ni despus del signo igual (=). En este caso, el mtodo Open del objeto Connection hace referencia al DSN de Archivo, que contiene la informacin de ubicacin y la configuracin de la base de datos. Opcionalmente, tambin puede hacer referencia directamente a un proveedor, origen de datos, Id. de usuario y contrasea, en lugar de al DSN.

Ejecucin de Consultas con el Objeto CONNECTION Con el mtodo Execute del objeto Connection puede enviar consultas en el Lenguaje de consulta estructurado (SQL) al origen de datos y recuperar los resultados. SQL, un lenguaje estndar para comunicarse con bases de datos, tiene comandos para recuperar y actualizar informacin. La siguiente secuencia de comandos utiliza el mtodo Execute del objeto Connection para enviar una consulta con un comando INSERT de SQL, que inserta datos en una tabla concreta de la base de datos. En este caso, el bloque de la secuencia de comandos inserta el nombre Jos Lugo en una tabla de la base de datos llamada Customers.

<% 'Define el DSN de Archivo strDSN = "FILEDSN=MiBaseDeDatos.dsn"

'Crea la instancia del objeto Connection y abre una conexin con la base de datos

Set cn = Server.CreateObject("ADODB.Connection") cn.Open strDSN

'Define la instruccin SELECT de SQL


strSQL = "INSERT INTO Customers (FirstName, LastName) VALUES ('Jos','Lugo')"

'Utiliza el mtodo Execute para enviar una consulta SQL a la base de datos cn.Execute(strSQL)

%>

Nota La ruta del DSN de Archivo no debe incluir espacios en blanco antes ni despus del signo igual (=). Adems del comando INSERT de SQL, puede utilizar los comandos UPDATE y DELETE de SQL para modificar y quitar informacin de la base de datos. Con el comando UPDATE de SQL puede modificar los valores de los elementos de una tabla de la base de datos. La siguiente secuencia de comandos usa el comando UPDATE para cambiar todos los campos FirstName de la tabla Customers a Juan en todas las filas cuyo campo LastName contenga el apellido Robles.

<% Set cn = Server.CreateObject("ADODB.Connection") cn.Open "FILEDSN=MiBaseDeDatos.dsn"


cn.Execute "UPDATE Customers SET FirstName = 'Juan' WHERE LastName = 'Robles' "

%>

Para quitar determinados registros de una tabla de la base de datos, < BR > utilice el comando DELETE de SQL. La siguiente secuencia de comandos quita todas las filas de la tabla Customers cuyo apellido sea Robles:

<% Set cn = Server.CreateObject("ADODB.Connection") cn.Open "FILEDSN=MiBaseDeDatos.dsn" cn.Execute "DELETE FROM Customers WHERE LastName = 'Robles'" %>

Nota Debe tener mucho cuidado al utilizar el comando DELETE de SQL. Un comando DELETE que no vaya acompaado de una clusula WHERE eliminar todas las filas de la tabla. Asegrese de incluir una clusula WHERE de SQL, que especifica las filas exactas que se van a eliminar.

Uso del Objeto RECORDSET para manipulacin de resultados Aunque el objeto Connection simplifica la tarea de conectar con una base de datos y emitir una consulta, el objeto Connection tiene sus limitaciones. En concreto, con el objeto Connection no se pueden crear secuencias de comandos que recuperen y presenten informacin de una base de datos; tiene que saber exactamente las modificaciones que desea realizar en la base de datos y despus implementar las modificaciones como consultas. Para recuperar datos, examinar resultados y modificar su base de datos, ADO proporciona el objeto Recordset. El objeto Recordset tiene las funciones necesarias para, dependiendo de las restricciones de las consultas, recuperar y presentar un conjunto de filas, o registros, de una base de datos. El objeto Recordset mantiene la posicin de cada registro devuelto por la consulta, lo que permite "recorrer" los resultados de uno en uno. Dependiendo de cmo configure las propiedades del tipo de cursor del objeto Recordset, puede recorrer y actualizar los registros. Los cursores de la base de datos se comportan como punteros que le permiten encontrar un elemento especfico de un conjunto de registros. Los cursores son especialmente til para recuperar y examinar registros, y despus realizar operaciones basadas en dichos registros. El objeto Recordset tiene propiedades que le permiten controlar con precisin el comportamiento de los cursores, lo que aumenta la capacidad de examinar y actualizar los resultados. Por ejemplo, puede utilizar las propiedades CursorType y CursorLocation para configurar un tipo de cursor que devuelva un conjunto de resultados a su aplicacin cliente (los resultados permanecen normalmente en el servidor de base de datos) y presente las ltimas modificaciones realizadas en la base de datos por otros usuarios.

Recuperar un conjunto de registros Las buenas aplicaciones de base de datos emplean el objeto Connection para establecer un vnculo y el objeto Recordset para manipular los datos devueltos. Si utiliza conjuntamente las funciones especializadas de ambos objetos puede desarrollar aplicaciones de bases de datos que realicen casi cualquier tarea de tratamiento de datos. Por ejemplo, la siguiente secuencia de comandos del servidor utiliza el objeto Recordset para ejecutar un comando SELECT de SQL. El comando SELECT recupera un conjunto especfico de informacin basndose en las restricciones de la consulta. La consulta tambin contiene una clusula WHERE de SQL, que se utiliza para establecer el criterio de seleccin de la consulta. En este ejemplo, la clusula WHERE limita la consulta a todos los registros que contengan el apellido Soto en la tabla Customers de la base de datos.

<% 'Establece una conexin con un origen de datos strDSN = "FILEDSN=MiBaseDeDatos.dsn" Set cn = Server.CreateObject("ADODB.Connection") cn.Open strDSN

'Crea una instancia de un objeto Recordset Set rsCustomers = Server.CreateObject("ADODB.Recordset")

'Abre un objeto Recordset con el mtodo Open 'y utiliza la conexin establecida por el objeto Connection
strSQL = "SELECT FirstName, LastName FROM Customers WHERE LastName = 'Soto' "

rsCustomers.Open strSQL, cn

'Recorre el conjunto de los registros y presenta los resultados 'e incrementa la posicin del registro con el mtodo MoveNext Set objFirstName = rsCustomers("FirstName") Set objLastName = rsCustomers("LastName") Do Until rsCustomers.EOF Response.Write objFirstName & " " & objLastName & "<BR>"

rsCustomers.MoveNext Loop %> Observe que en el ejemplo anterior, el objeto Connection estableci la conexin con la base de datos y el objeto Recordset utiliz la misma conexin para recuperar resultados de la base de datos. Este mtodo es til cuando tenga que configurar con precisin la forma en que se establece el vnculo con la base de datos. Por ejemplo, si necesitara especificar el tiempo de espera antes de anular un intento de conexin, tendra que utilizar el objeto Connection para establecer dicha propiedad. Sin embargo, si slo desea establecer una conexin con las propiedades de conexin predeterminadas de ADO, podra utilizar el mtodo Open del objeto Recordset para establecer el vnculo: <% strDSN = "FILEDSN=MiBaseDeDatos.dsn"
strSQL = "SELECT FirstName, LastName FROM Customers WHERE LastName = 'Soto' "

Set rsCustomers = Server.CreateObject("ADODB.Recordset")

'Abre una conexin con el mtodo Open 'y utiliza la conexin establecida por el objeto Connection rsCustomers.Open strSQL, strDSN

'Recorre el conjunto de registros, presenta los resultados 'e incrementa la posicin del registro con el mtodo MoveNext Set objFirstName = rsCustomers("FirstName") Set objLastName = rsCustomers("LastName") Do Until rsCustomers.EOF Response.Write objFirstName & " " & objLastName & "<BR>" rsCustomers.MoveNext Loop %> Cuando establece una conexin con el mtodo Open del objeto Recordset, est utilizando implcitamente el objeto Connection para proteger el vnculo.

Manejo de consultas con el Objeto COMMAND Con el objeto Command de ADO puede ejecutar consultas de la misma forma que con los objetos Connection y Recordset, excepto en que con el objeto Command puede preparar, o compilar, la consulta con el origen de la base de datos y despus enviar la misma consulta repetidamente con distintos valores. La ventaja de compilar consultas de esta manera consiste en la enorme reduccin del tiempo necesario para volver a enviar las modificaciones de una consulta existente. Adems, puede dejar las consultas SQL parcialmente indefinidas, con la posibilidad de alterar partes de las consultas justo antes de su ejecucin. La coleccin Parameters del objeto Command le ahorra los problemas de tener que volver a construir la consulta cada vez que tenga que ejecutarla. Por ejemplo, si tiene que actualizar peridicamente la informacin de suministros y costos en un sistema de inventario Web, puede predefinir su consulta de la siguiente manera: <% 'Abre una conexin mediante el objeto Command del objeto 'Connection no tiene un mtodo Open para establecer 'la conexin strDSN = "FILEDSN=MiBaseDeDatos.dsn" Set cn = Server.CreateObject("ADODB.Connection") cn.Open strDSN

'Crea el objeto Command; utiliza la propiedad 'ActiveConnection para 'adjuntar la conexin al objeto Command Set cm= Server.CreateObject("ADODB.Command") Set cm.ActiveConnection = cn 'Define laconsulta
SQL cm.CommandText = "INSERT INTO Inventory (Material, Quantity) VALUES (?, ?)"

'Guarda una versin preparada (o precompilada) de la consulta < BR > 'especificada en la propiedad

'CommandText antes de la primera ejecucin del objeto Command. cm.Prepared = True

'Define la informacin de configuracin 'de los parmetros de la consulta cm.Parameters.Append cm.CreateParameter("material_type",200,,255) cm.Parameters.Append cm.CreateParameter("quantity",200, ,255 )

'Define y ejecuta la primera insercin cm("material_type") = "Bombillas" cm("quantity") = "40" cm.Execute

'Define y ejecuta la segunda insercin cm("material_type") = "Fusibles" cm("quantity") = "600" cm.Execute %> Si examina el ejemplo anterior, observar que la secuencia de comandos vuelve a construir repetidamente y enva una consulta SQL con distintos valores, sin tener que volver a definir y enviar la consulta al origen de datos. Compilar consultas con el objeto Command tambin le ofrece la ventaja de evitar los problemas que pudieran provenir de concatenar cadenas y variables para formar consultas SQL. En particular, si utiliza la coleccin Parameter del objeto Command puede evitar problemas relacionados con la definicin de ciertos tipos de variables de cadenas, fechas y horas. Por ejemplo, los valores de las consultas SQL que contengan apstrofos (') pueden hacer que la consulta falle:
strSQL = "INSERT INTO Customers (FirstName, LastName) VALUES ('Roberto','O'Hara')"

Observe que el apellido O'Hara contiene un apstrofo que entra en conflicto con los apstrofos que se utilizan como delimitadores de datos en la palabra

clave VALUES de SQL. Si enlaza el valor de la consulta como un parmetro del objeto Command, se evitan este tipo de problemas.

MANEJO DE CONEXIONES A BASES DE DATOS

Uno de los mayores retos del diseo de una aplicacin Web sofisticada de base de datos, como una aplicacin de entrada de pedidos en lnea que atienda a miles de clientes, es la correcta administracin de la conexiones con la base de datos. Abrir y mantener las conexiones con las bases de datos, incluso cuando no se transmita informacin, puede afectar severamente a los recursos del servidor de base de datos y provoca problemas de conectividad. Las aplicaciones Web de bases de datos bien diseadas reciclan las conexiones con la base de datos y compensan los retrasos debidos al trfico de la red. Abandonar los intentos de conexin Un servidor de base de datos que experimente un repentino incremento en su actividad puede quedar saturado en sus conexiones, lo que incrementa considerablemente el tiempo necesario para establecer una nueva conexin. Como resultado, los retrasos excesivos en la conexin pueden reducir el rendimiento de su aplicacin de base de datos. Con la propiedad ConnectionTimeout del objeto Connection puede limitar la cantidad de tiempo que su aplicacin espera antes de abandonar un intento de conexin y emitir un mensaje de error. Por ejemplo, la siguiente secuencia de comandos establece la propiedad ConnectionTimeout para esperar veinte segundos antes de cancelar el intento de conexin:

Set cn = Server.CreateObject("ADODB.Connection") cn.ConnectionTimeout = 20 cn.Open "FILEDSN=MiBaseDeDatos.dsn"

El valor predeterminado de la propiedad ConnectionTimeout es 30 segundos.

Nota Antes de incorporar la propiedad ConnectionTimeout a sus aplicaciones de bases de datos, asegrese de que su proveedor de conexiones y el origen de datos acepten esta propiedad. Aceptar conexiones Las aplicaciones Web de bases de datos que establecen y terminan con frecuencia conexiones con bases de datos pueden reducir el rendimiento del servidor de base de datos. ASP acepta la eficiente administracin de las conexiones que se consigue mediante la funcin de agrupamiento de conexiones de ODBC 3.5. El agrupamiento de conexiones mantiene abiertas las conexiones con las bases de datos y administra el uso compartido de las conexiones entre distintas peticiones de usuario para mantener el nivel de rendimiento y reducir el nmero de conexiones inactivas. En cada peticin de conexin, el conjunto de conexiones determina si hay alguna conexin inactiva en el conjunto. Si es as, el conjunto de conexiones devuelve una de ellas en lugar de establecer una nueva conexin con la base de datos. Si desea que su controlador ODBC participe en el conjunto de conexiones, debe configurar su controlador especfico de base de datos y despus establecer la propiedad CPTimeout del controlador en el registro del sistema de Windows NT. Cuando ODBC desconecta una conexin, la conexin se guarda en un conjunto, en lugar de desconectarse. La propiedad CPTimeout determina el periodo de tiempo de inactividad que una conexin puede permanecer en el conjunto de conexiones. Si la conexin permanece en el conjunto durante un periodo de tiempo mayor que el establecido en CPTimeout, la conexin se cierra y se quita el conjunto. El valor predeterminado de CPTimeout es 60 segundos. Puede establecer selectivamente la propiedad CPTimeout para permitir el agrupamiento de conexiones por cada controlador especfico de base de datos ODBC si crea una entrada en el registro del sistema con los siguientes valores:

\HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBCINST.INI\controlador \CPTimeout = timeout

(REG_SZ, en segundos)

Por ejemplo, la clave siguiente establece el tiempo de inactividad del conjunto de conexiones a 180 segundos (3 minutos) para el controlador de SQL Server.

\HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBCINST.INI\SQL Server\CPTimeout = 180

Nota De forma predeterminada, su servidor Web activa el conjunto de conexiones para SQL Server y asigna a CPTimeout 60 segundos. 6.2.3.1. 6.2.3.2. TCNICA DIDCTICA Exposicin del profesor. MATERIAL DE APOYO

6.2.4. ACTIVIDADES DE APRENDIZAJE 6.2.4.1. ACTIVIDAD DE APRENDIZAJE 1

A26-EC12 Manejo de Bases de Datos atraves de ADO. 6.2.4.1.1. INSTRUCCIONES Realizar una aplicacin que manipule una base de datos utilizando la tecnologa de acceso ADO. a) b) c) d) e) f) Valor actividad: 10 Puntos Producto esperado: Aplicacion Fecha inicio: Fecha entrega: Forma de entrega: Archivo Tipo de Actividad: Equipo (5 gentes) 6.2.4.1.2. CRITERIO DE EVALUACIN DE LA ACTIVIDAD 1
ACTIVIDAD Manejo de Bases de Datos atraves de ADO DESARROLLO Aplicacin que manipula una Base de Datos en cualquier lenguaje de programacin Total PONDERACIN 10 puntos 10 Puntos

6.2.5. RESULTADO DE APRENDIZAJE Aprender a utilizar una tecnologa de acceso a datos 6.2.6. BIBLIOGRAFA Manual SQL Server 2000 Standard final 6.2.7. DOCUMENTOS

6.3. JDBC, PAGINAS DEL SERVIDOR JAVA. 6.3.1. OBJETIVO DE APRENDIZAJE Aprender de forma general las caracterstica del manejador de Base de Datos para Java (JDBC). 6.3.2. RECURSO TIEMPO DEL TEMA 5 horas 6.3.3. DESARROLLO

Acceso a Bases de DatosJava IDL JDBC fue diseado para mantener sencillas las cosas sencillas. Esto significa que el API JDBC hace muy sencillas las tareas diarias de una base de datos, como una simple sentencia SELECT. Esta seccin nos llevar a travs de ejemplos que utilizan el JDBC para ejecutar sentencias SQL comunes, para que podamos ver lo sencilla que es la utilizacin del API JDBC bsico.

Esta seccin est dividida a su vez en dos secciones. JDBC Basico que cubre el API JDBC 1.0, que est incluido en el JDK 1.1. La segunda parte cubre el API JDBC 2.0 API, que forma parte de la versin 1.2 del JDK. Tambin describe brevemente las extensiones del API JDBC, que, al igual que otras extensiones estndard, sern liberadas independientemente. Al final de esta primera seccin, sabremos como utilizar el API bsico del JDBC para crear tablas, insertar valores en ellas, pedir tablas, recuperar los resultados de las peticiones y actualizar las tablas. En este proceso, aprenderemos como utilizar las sentencias sencillas y sentencias preparadas, y veremos un ejemplo de un procedimiento almacenado. Tambin aprenderemos como realizar transaciones y como capturar excepciones y avisos. En la ltima parte de este seccin veremos como crear un Applet. Nuevas Caractersticas en el API JDBC 2.0 nos ensea como mover el cursor por una hoja de resultados, cmo actualizar la hoja de resultados utilizando el API JDBC 2.0, y como hacer actualizaciones batch. Tambin conoceremos los nuevos tipos de datos de SQL3 y como utilizarlos en aplicaciones escritas en Java. La parte final de esta leccin entrega una visin de la extensin del API JDBC, con caractersitas que se aprovechan de la tecnologas JavaBeans y Enterprise JavaBeans.

Esta seccin no cubre cmo utilizar el API metadata, que se utiliza en programas ms sofisticados, como aplicaciones que deban descubrir y presentar dinmicamente la estructura de una base de datos fuente. La Conectividad de Bases de Datos Java (Java Database Connectivity, JDBC) es una especificacin de la interfaz de aplicacin de programa (application program interface, API) para conectar los programas escritos en Java a los datos en bases de datos populares. La interfaz de aplicacin de programa nos permite codificar rdenes de solicitud de acceso en lenguaje estructurado de solicitud (structured query language, SQL) que luego pasan al programa que administra la base de datos. Devuelve los resultados a travs de una interfaz similar. La JDBC es muy similar a la Conectividad Abierta de Base de Datos (Open Database Connectivity, ODBC) de Microsoft y, con un pequeo programa "puente" podemos usar la interfaz JDBC para acceder a bases de datos a travs de la interfaz ODBC de Microsoft. Por ejemplo, podemos escribir un programa diseado para acceder a muchos productos populares de base de datos en una variedad de plataformas de sistema operativo. Cuando se accede a una base de datos en un PC que corre bajo Windows 95 de Microsoft y, por ejemplo, una base de datos de Microsoft Access, nuestro programa con rdenes JDBC ser capaz de acceder a la base de datos de Access de Microsoft.

La JDBC tiene actualmente dos niveles de interfaz. Adems de la interfaz principal hay tambin una API de un "administrador" JDBC que a su vez se comunica con los "controladores" de producto de las bases de datos individuales, si es necesario, el puente JDBC-ODBC bridge y a un controlador de red JDBC cuando el programa Java est corriendo en un entorno de red (es decir, accediendo a una base de datos remota).

Cuando accede a una base de datos remota, la JDBC aprovecha el esquema de direccin de archivos de Internet y un nombre de archivo que tiene en mucho la apariencia de una direccin de pgina web (o URL). Por ejemplo, una orden SQL en Java puede identificar a la base de datos como:

jdbc:odbc://www.empresa.com:400/basededatos

JDBC especifica un conjunto de clases de programacin orientada a objetos para que el programador lo use en la construccin de solicitudes SQL. Un conjunto adicional de clases describe el controlador API de JDBC. Soporta los tipos de datos ms comunes de SQL, mapeados en forma de tipos de datos Java. La API permite el soporte especfico de implementacin para las solicitudes transaccionales y la capacidad de "comprometerse" o volver al principio de una transaccin.13

6.3.3.1. 6.3.3.2.

TCNICA DIDCTICA Exposicin del profesor. MATERIAL DE APOYO

6.3.4. ACTIVIDADES DE APRENDIZAJE 6.3.4.1. ACTIVIDAD DE APRENDIZAJE 1 A27-I7 JDBC. 6.3.4.1.1. INSTRUCCIONES Hacer una investigacin de complemento al tema de JDBC. a) b) c) d) e) f) Valor actividad: 5 Puntos Producto esperado: Investigacin Fecha inicio: Fecha entrega: Forma de entrega: Documento Tipo de Actividad: Equipo (3 gentes) 6.3.4.1.2. CRITERIO DE EVALUACIN DE LA ACTIVIDAD 1
ACTIVIDAD JDBC DESARROLLO Documento que avale la investigacn, el documento debe contener fuentes bibliograficas Total PONDERACIN 5 puntos 5 Puntos

6.3.5. RESULTADO DE APRENDIZAJE Conocer las caractersticas generales de JDBC 6.3.6. BIBLIOGRAFA http://www2.terra.com/informatica/que-es/jdbc.cfm 6.3.7. DOCUMENTOS

13

http://www2.terra.com/informatica/que-es/jdbc.cfm (05-Ago-05)

UNIDAD TEMATICA 7. PROYECTO FINAL 7.1.1. OBJETIVO DE APRENDIZAJE PONER EN PRACTICA TODO LO APRENDIDO EN ESTA MATERIA 7.1.2. RECURSO TIEMPO DEL TEMA 16 horas 7.1.3. DESARROLLO Esta unidad consite bsicamente en realizar un proyecto que incluya muchos de los conceptos y practicas vistas en el curso. Por lo cual se pide un proyecto por equipo de 4 personas, el cual debe cumplir con los siguientes requisitos:

1. El proyecto a realizar debe de estar basado en una organizacin real. 2. Debe manejar una base de datos distribuida o relacional la que mejor se adpate a la organizacin. 3. Todas las reglas de negocio deben de estar validadas ya sea por restricciones CHECK, Reglas, Transacciones, Procedimientos, adems debe de contener los posibles usuarios que el sistema requiera. 4. Por ultimo debe de haber una aplicacin que manipule los datos de la base de datos.

7.1.3.1. 7.1.3.2.

TCNICA DIDCTICA Practica por parte de los alumnos MATERIAL DE APOYO

7.1.4. ACTIVIDADES DE APRENDIZAJE 7.1.4.1. ACTIVIDAD DE APRENDIZAJE 1 A28-T7 Anlisis del sistema. 7.1.4.1.1. INSTRUCCIONES Realizar el anlisis del negocio para poder definir la base da datos (Los puntos a cubrir que a disposicin del docente) a) b) c) d) e) f) Valor actividad: 10 Puntos Producto esperado: Anlisis del Sistema Fecha inicio: Fecha entrega: Forma de entrega: Documento Tipo de Actividad: Equipo (4 gentes) 7.1.4.1.2. CRITERIO DE EVALUACIN DE LA ACTIVIDAD 1
ACTIVIDAD DESARROLLO PONDERACIN

Anlisis del sistema

Debe cubrir con todos los puntos que el docente disponga Total

10 puntos 10 Puntos

7.1.4.2.

ACTIVIDAD DE APRENDIZAJE 2 A29-T8 Diseo de la Base de Datos.

7.1.4.2.1. INSTRUCCIONES Disear la Base de Datos en base al anlisis hecho en la practica anterior. g) h) i) j) k) l) Valor actividad: 15 Puntos Producto esperado: Base de Datos Fecha inicio: Fecha entrega: Forma de entrega: Archivo Tipo de Actividad: Equipo (4 gentes) 7.1.4.2.2. CRITERIO DE EVALUACIN DE LA ACTIVIDAD 1
ACTIVIDAD Diseo de la Base de Datos DESARROLLO La Base de Datos debe de estar normalizada y debe de cubrir con todos los aspectos del negocio Total PONDERACIN 15 puntos 15 Puntos

7.1.4.3.

ACTIVIDAD DE APRENDIZAJE 3 A30-T9 Reglas de Negocio.

7.1.4.3.1. INSTRUCCIONES Aplicar todas las reglas del negocio utilizando restricciones CHECK, reglas, transacciones, relaciones, etc. Asi como tambien debe de contener los usuarios con los privilegios correspondientes. m) n) o) p) q) r) Valor actividad: 20 Puntos Producto esperado: Reglas del negocio aplicadas Fecha inicio: Fecha entrega: Forma de entrega: Archivo Tipo de Actividad: Equipo (4 gentes) 7.1.4.3.2. CRITERIO DE EVALUACIN DE LA ACTIVIDAD 1
ACTIVIDAD Reglas de Negocio DESARROLLO Las reglas deben de estar aplicadas Total PONDERACIN 20 puntos 20 Puntos

7.1.4.4.

ACTIVIDAD DE APRENDIZAJE 4 A31-T10 Sistema de Base de Datos.

7.1.4.4.1. INSTRUCCIONES En cualwuier lenguaje de programacin, realizar la aplicacin que interacte con la base de datos. s) t) u) v) w) x) Valor actividad: 10 Puntos Producto esperado: Sistema de Base de Datos Fecha inicio: Fecha entrega: Forma de entrega: Archivo Tipo de Actividad: Equipo (4 gentes) 7.1.4.4.2. CRITERIO DE EVALUACIN DE LA ACTIVIDAD 1
ACTIVIDAD Sistema de Base de Datos DESARROLLO Checar que el sistema cumpla con las especificaciones necesarias Total PONDERACIN 10 puntos 10 Puntos

7.1.5. RESULTADO DE APRENDIZAJE Conocer el negocio del cual se va a realizar el diseo de la base de datos 7.1.6. BIBLIOGRAFA Manual de las materias de Calidad de SoftWare y el de Ingenieria de SoftWare. Diseo y Administracin de Bases de Datos, HANSEN-HANSEN, PRENTICEHALL , Segunda edicin. 7.1.7. DOCUMENTOS

ANEXO A BASE DE DATOS II TECNOLOGAS DE LA INFORMACIN Y COMUNICACIN

RESUMEN DE ACTIVIDADES DE APREDIZAJE

MES 1
Actividad de Aprendizaje
A1-T1 Cuestionario. A2-T2 Realizar Base de Datos A3-EC1 Sentencias SQL Tablas Multiples A4-ER1 Examen Rpido. A5-EC2 Procedimientos Almacenados A6-EC3 Procedimientos de disparo A7-EC4 Vistas

Fecha de Inicio

Fecha de Entrega

Puntuacin
5 puntos 5 Puntos 10 puntos 10 Puntos 10 Puntos 10 Puntos 10 Puntos

Subtotal Examen Puntaje total del mes:

60 Puntos 40 Puntos 100 Puntos

MES 2
Actividad de Aprendizaje
A8-ER2 Examen Rpido A9-EC5 Restricciones CONSTRAINTS A10-EC6 Valores por omision A11-I1 Investigacion de Indices A12-EC7 Crear Indices A13-T3 Cuestionario transacciones A14-ER3 Examen Rpido A15-T4 Cuestionario planes A16-EC8 Transacciones A17-EC9 Crear usuarios A18-EC10 Seguridad de SQL A19-T5 Concesion y Renovacin de privilegios

Fecha de Inicio

Fecha de Entrega

Puntuacin
5 Puntos 5 Puntos 5 Puntos 5 Puntos 5 Puntos 2.5 Puntos 5 Puntos 2.5 Puntos 10 Puntos 5 Puntos 5 Puntos 5 Puntos

Subtotal Examen Puntaje total del mes:

60 Puntos 40 Puntos 100 Puntos

MES 3
Actividad de Aprendizaje
A20-T6 Configurar SQL Server para poder supervisar los sucesos A21-ER4 Examen Rpido de los temas 4.3 y 4.4 A22-I2 Sistemas en organizaciones A23-ER5 Examen Rpido de SGBD A24-EC11 Realizacin de una Base de Datos Distribuida. A25-ER6 Examen Rpido XML A26-EC12 Manejo de Bases de Datos a travs de ADO

Fecha de Inicio

Fecha de Entrega

Puntuacin
5 Puntos Requisito 5 Puntos 5 Puntos 30 Puntos 5 Puntos 10 Puntos

Subtotal Examen Puntaje total del mes:

60 Puntos 40 Puntos 100 Puntos

MES 4
Actividad de Aprendizaje
A27-I7 JDBC A28-T7 Anlisis del sistema A29-T8 Diseo de la Base de Datos. A30-T9 Reglas de Negocio. A31-T10 Sistema de Base de Datos.

Fecha de Inicio

Fecha de Entrega

Puntuacin
5 Puntos 10 Puntos 15 Puntos 20 Puntos 10 Puntos

Subtotal Examen Puntaje total del mes:

60 Puntos 40 Puntos 100 Puntos

Claves de apoyo: A: Actividad (A#-Tipo#) T: Tarea I: Investigacin EC: Ejercicios en clases ER: Examen Rpido

ANEXO B BASE DE DATOS II TECNOLOGAS DE LA INFORMACIN Y COMUNICACIN

RESUMEN DE ACTIVIDADES DE SESIONES MES 1


Fecha de la sesin
1.1. 1.2. 1.3. 1.4. 1.5. 1.6. 1.7.

Tema
LA VENTAJA DEL SQL CONSULTA DE UNA SOLA TABLA CONSULTA DE TABLAS MULTIPLES CONSULTAS ANIDADAS O CONSULTAS AVANZADAS O SUBCONSULTAS PROCEDIMIENTOS ALMACENADOS TRIGGERS VISTAS

No. Hrs.
1 2 3 5 6 7 6

SUBTOTAL DE HRS FRENTE A GRUPO HORAS EXTRACLASE TOTAL DE HRS AUTORIZADAS

28 0 28

MES 2
Fecha de la sesin
2.1. 2.2. 2.3. 2.4. 2.5. 3.1. 3.2. 3.3. 3.4. 3.5. 3.6. 4.1. 4.2. 4.3.

Tema
TIPOS DE INTEGRIDAD DE DATOS USANDO RESTRICCIONES (CONSTRAINTS) USANDO VALORES POR OMISIN Y REGLAS INTRODUCCIN A INDICES ARQUITECTURA y CREACIN DE INDICES PROCESAMIENTO DE TRANSACCIONES CONCEPTOS DE TRANSACCIONES PROPIEDADES DE LAS TRANSACCIONES PLANES Y RECUPERABILIDAD SERIABILIDAD DE PLANES TRANSACCIONES SQL SEGURIDAD y AUTORIZACIN EN BASES DE DATOS TIPOS DE SEGURIDAD CONTROL DE ACCESO DISCRECIONAL BASADO EN CONCESIN / RENOVACION DE PRIVILEGIOS.

No. Hrs.
1 2 4 1 3 1 1 1 8 1 2 2

SUBTOTAL DE HRS FRENTE A GRUPO HORAS EXTRACLASE TOTAL DE HRS AUTORIZADAS

28 0 28

MES 3
Fecha de la sesin
4.4. 5.1. 5.2. 5.3. 6.1. 6.2.

Tema
SEGUIMIENTO DE AUDITORIA SISTEMAS DE BASES DE DATOS EN LAS ORGANIZACIONES MODELO GENERAL DE UN SGBD PROCESAMIENTO DE CONSULTAS, CONCURRENCIA y RECUPERACIN EN BASES DE DATOS DISTRIBUIDAS. ARQUITECTURAS MULTICAPA y XML TECNOLOGAS DE ACCESO A DATOS: ODBC, OLEDB, ADO y ASP.

No. Hrs.
2 2 1 7 4 12

SUBTOTAL DE HRS FRENTE A GRUPO HORAS EXTRACLASE TOTAL DE HRS AUTORIZADAS

28 0 28

MES 4
Fecha de la sesin
6.3. PROYECTO FINAL

Tema
JDBC, PAGINAS DEL SERVIDOR JAVA.

No. Hrs.
5 16

SUBTOTAL DE HRS FRENTE A GRUPO HORAS EXTRACLASE TOTAL DE HRS AUTORIZADAS

21 0 21

You might also like