Manual Base de Datos II TIC Completo
Manual Base de Datos II TIC Completo
Manual Base de Datos II TIC Completo
HIDALGUENSE
BASE DE DATOS II
Elaborado por:
AGOSTO 2005
ÍNDICE
Elaboró Revisó
El lenguaje SQL es usado para comunicarse con una base de datos según el
ANSI (American National Standards Institute). Es el lenguaje clásico para
sistemas manejadores de bases de datos relaciónales. 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 más sistemas usan SQL tienen sus propias
extensiones adicionales que usualmente son usadas sólo 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.
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.3. DESARROLLO
Las aplicaciones en red son cada día más numerosas y versátiles. En muchos
casos, el esquema básico de operación es una serie de scripts que rigen el
comportamiento de una base de datos.
El hecho de que sea estándar no quiere decir que sea idéntico para cada base
de datos. En efecto, determinadas bases de datos implementan funciones
específicas que no tienen necesariamente que funcionar en otras.
TRANSACT-SQL
COMPONENTE COMPONENTE
PLATAFORMA
SERVER CLIENTE
Microsoft W in 95/98 Si Si
Microsoft W indows NT Si Si
Workstation 4.0 y posteriores
Microsoft W indows NT Server Si Si
4.0 y posteriores
Microsoft W indows NT Server Si Si
Enterprise Edition 4.0 y
posteriores
Windows 3.X No Si
MS-DOS No Si
Third party No Si (Unix,
apple
Macintosh)
Internet browsers No Si
TIPOS DE CAMPO
COMPONENTES DE SQL
COMANDOS DDL
Comando Descripción
CREATE Utilizado para crear nuevas tablas, campos e índices
DROP Empleado para eliminar tablas e índices
Utilizado para modificar las tablas agregando campos o
ALTER
cambiando la definición de los campos.
COMANDOS DML
Comando Descripción
Utilizado para consultar registros de la base de datos que
SELECT
satisfagan un criterio determinado
Utilizado para cargar lotes de datos en la base de datos en una
INSERT
única operación.
Utilizado para modificar los valores de los campos y registros
UPDATE
especificados
Utilizado para eliminar registros de una tabla de una base de
DELETE
datos
CLAUSULAS
Las cláusulas son condiciones de modificación utilizadas para definir los datos
que desea seleccionar o manipular.
Cláusula Descripción
Utilizada para especificar la tabla de la cual se van a seleccionar
FROM
los registros
Utilizada para especificar las condiciones que deben reunir los
WHERE
registros que se van a seleccionar
Utilizada para separar los registros seleccionados en grupos
GROUP BY
específicos
Utilizada para expresar la condición que debe satisfacer cada
HAVING
grupo
Utilizada para ordenar los registros seleccionados de acuerdo
ORDER BY
con un orden específico
OPERADORES LÓGICOS
Operador Uso
Es el "y" lógico. Evalua dos condiciones y devuelve un valor de
AND
verdad sólo si ambas son ciertas.
Es el "o" lógico. Evalúa dos condiciones y devuelve un valor de
OR
verdar si alguna de las dos es cierta.
NOT Negación lógica. Devuelve el valor contrario de la expresión.
OPERADORES DE COMPARACIÓN
Operador Uso
< Menor que
> Mayor que
<> Distinto de
<= Menor ó Igual que
>= Mayor ó Igual que
= Igual que
BETWEEN Utilizado para especificar un intervalo de valores.
LIKE Utilizado en la comparación de un modelo
Utilizado para especificar registros de una base de datos
IN
FUNCIONES DE AGREGADO
Función Descripción
Utilizada para calcular el promedio de los valores de un campo
AVG
determinado
COUNT Utilizada para devolver el número de registros de la selección
Utilizada para devolver la suma de todos los valores de un
SUM
campo determinado
Utilizada para devolver el valor más alto de un campo
MAX
especificado
Utilizada para devolver el valor más bajo de un campo
MIN
especificado
ORDEN DE EJECUCIÓN DE LOS COMANDOS
Dada una sentencia SQL de selección que incluye todas las posibles
cláusulas, el orden de ejecución de las mismas es el siguiente:
1. Cláusula FROM
2. Cláusula WHERE
3. Cláusula GROUP BY
4. Cláusula HAVING
5. Cláusula SELECT
6. Cláusula ORDER BY
CONSULTAS DE SELECCIÓN
Consultas básicas
DEVOLVER LITERALES
En determinadas ocasiones nos puede interesar incluir una columna con un
texto fijo en una consulta de selección, por ejemplo, supongamos que
tenemos una tabla de empleados y deseamos recuperar las tarifas
semanales de los electricistas, podríamos realizar la siguiente consulta:
Se pueden ordenar los registros por mas de un campo, como por ejemplo:
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 búsqueda especificados en la cláusula WHERE. Si se desea
forzar a no utilizar ningún índice utilizaremos la siguiente sintaxis:
PREDICADO DESCRIPCIÓN
ALL
TOP
El valor que va a continuación de TOP debe ser un entero sin signo. TOP no
afecta a la posible actualización de la consulta.
DISTINCT
DISTINCTROW
Este predicado no es compatible con ANSI. Que yo sepa a día de hoy sólo
funciona con ACCESS.
Devuelve los registros diferentes de una tabla; a diferencia del predicado
anterior que sólo 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 cláusula SELECT.
ALIAS
(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 cláusua SELECT.
RECUPERAR INFORMACIÓN DE UNA BASE DE DATOS EXTERNA
CONSULTAS DE ACCIÓN
Las consultas de acción son aquellas que no devuelven ningún registro, son
las encargadas de acciones como añadir y borrar y modificar registros. Tanto
las sentencias de actualización como las de borrado desencaderán (según 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 eliminación que elimina los registros de una o más de las
tablas listadas en la cláusula FROM que satisfagan la cláusula WHERE. Esta
consulta elimina los registros completos, no es posible eliminar el contenido de
algún campo en concreto. Su sintaxis es:
Una vez que se han eliminado los registros utilizando una consulta de borrado,
no puede deshacer la operación. Si desea saber qué registros se eliminarán,
primero examine los resultados de una consulta de selección que utilice el
mismo criterio y después 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.
INSERT INTO
De esta forma los campos de Tabla Origen se grabarán en Tabla, para realizar
esta operación es necesario que todos los campos de Tabla Origen estén
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 atención con los campos
contadores o autonuméricos puesto que al insertar un valor en un campo de
este tipo se escribe el valor que contenga su campo homólogo en la tabla
origen, no incrementándose como le corresponde.
Se puede utilizar la instrucción INSERT INTO para agregar un registro único a
una tabla, utilizando la sintaxis de la consulta de adición de registro único tal y
como se mostró anteriormente. En este caso, su código 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.
También se puede utilizar INSERT INTO para agregar un conjunto de registros
pertenecientes a otra tabla o consulta utilizando la cláusula SELECT... FROM
como se mostró anteriormente en la sintaxis de la consulta de adición de
múltiples registros. En este caso la cláusula 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 agregarán 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 cláusula IN para agregar
registros a una tabla en otra base de datos.
Se pueden averiguar los registros que se agregarán en la consulta ejecutando
primero una consulta de selección que utilice el mismo criterio de selección y
ver el resultado. Una consulta de adición copia los registros de una o más
tablas en otra. Las tablas que contienen los registros que se van a agregar no
se verán afectadas por la consulta de adición. En lugar de agregar registros
existentes en otra tabla, se puede especificar los valores de cada campo en un
nuevo registro utilizando la cláusula VALUES. Si se omite la lista de campos,
la cláusula VALUES debe incluir un valor para cada campo de la tabla, de otra
forma fallará INSERT.
EJEMPLOS
Esta consulta crea una tabla nueva llamada programadores con igual
estructura que la tabla empleado y copia aquellos registros cuyo campo
categoría se programador
UPDATE
Crea una consulta de actualización que cambia los valores de los campos de
una tabla especificada basándose en un criterio específico. Su sintaxis es:
En donde:
Son los nombres de las tablas desde las que se combinan los
tb1, tb2
registros.
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
Como se puede observar los cambios realizados han sido los siguientes:
CONSULTAS DE AUTOCOMBINACIÓN
Para listar el salario medio dentro de cada grado salarial habría que lanzar esta
otra sentencia:
SELF JOIN
Autores
Como podemos observar, las parejas de autores se repiten en cada uno de los
libros, podemos omitir estas repeticiones de la siguiente forma
Empleados
Id Nombre SuJefe
1 Marcos 6
2 Lucas 1
3 Ana 2
4 Eva 1
5 Juan 6
6 Antonio
FULL JOIN
Este tipo de operador se utiliza para devolver todas las filas de una
combinación tengan o no correspondencia. Es el equivalente a la utilización de
LEFT JOIN y RIGHT JOIN a la misma vez. Mediante este operador se
obtendrán por un lado las filas que tengan correspondencia en ambas tablas y
también 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 además todos los autores que no han escrito
ningún libro y todos aquellos libros sin autor (devemos suponer que no existe
un autor llamado anónimo):
En donde:
TABLE Lista_Clientes
UNION TABLE ListaProveedores
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:
En donde:
Función Es una función SQL agregada que opera sobre los datos
agregada seleccionados.
instrucción
Es una instrucción SELECT.
SELECT
Crea una consulta de tabla de referencias cruzadas que muestra las ventas de
productos por mes para un año específico. Los meses aparecen de izquierda a
derecha como columnas y los nombres de los productos aparecen de arriba
hacia abajo como filas.
Crea una consulta de tabla de referencias cruzadas que muestra las ventas de
productos por trimestre de cada proveedor en el año 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 práctico:
Se trata de resolver el siguiente problema: tenemos una tabla de productos con
dos campos, el código y el nombre del producto, tenemos otra tabla de pedidos
en la que anotamos el código del producto, la fecha del pedido y la cantidad
pedida. Deseamos consultar los totales de producto por año, calculando la
media anual de ventas.
Estructura y datos de las tablas:
ARTICULOS PEDIDOS
1 12/10/1996 50
2 04/10/1996 250
3 05/08/1996 100
1 01/01/1997 40
2 02/08/1997 60
3 05/10/1997 70
1 12/12/1997 8
2 15/12/1997 520
3 17/10/1997 1.250
Comentarios a la consulta:
CRITERIOS DE SELECCIÓN
EJEMPLO
Fecha = #05-18-1969# ó
SQL-SERVER
Fecha = 19690518
Referente a los valores lógicos TRUE o FALSE cabe destacar que no son
reconocidos en ORACLE, ni en este sistema de bases de datos ni en SQL-
SERVER 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 LÓGICOS
Los operadores lógicos soportados por SQL son: AND, OR, XOR, EQV, IMP,
IS y NOT. A excepción de los dos últimos todos poseen la siguiente sintaxis:
<expresión1> operador <expresión2>
En donde expresión1 y expresión2 son las condiciones a evaluar, el resultado
de la operación varía en función del operador lógico. La tabla adjunta muestra
los diferentes posibles resultados:
SELECT * FROM Empleados WHERE (Sueldo > 100 AND Sueldo < 500)
OR (Provincia = 'Madrid' AND Estado = 'Casado')
Valores Nulos
Este operador no está reconocido en ACCESS y por ello hay que utilizar la
siguiente sintaxis:
Intervalos de Valores
El Operador LIKE
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]*'
ACCESS
Tipo de Modelo No
Coincide
coincidencia Planteado coincide
'aa', 'aBa',
Varios caracteres 'a*a' 'aBC'
'aBBBa'
Distinto de un dígito '[!0-9]' 'A', 'a', '&', '~' '0', '1', '9'
SQL-SERVER
Ejemplo Descripción
LIKE '[A- Todo lo que comience por cualquier letra comprendida entre
F]%' la A y la F
El Operador IN
Este operador devuelve aquellos registros cuyo campo indicado coincide con
alguno de los en una lista. Su sintaxis es:
expresión [NOT] IN(valor1, valor2, . . .)
LA CLÁUSULA WHERE
La cláusula WHERE puede usarse para determinar qué registros de las tablas
enumeradas en la cláusula FROM aparecerán en los resultados de la
instrucción SELECT. Después de escribir esta cláusula se deben especificar
las condiciones expuestas en los apartados anteriores. Si no se emplea esta
cláusula, la consulta devolverá todas las filas de la tabla. WHERE es opcional,
pero cuando aparece debe ir a continuación de FROM.
GROUP BY
AVG
AVG(expr)
En donde expr representa el campo que contiene los datos numéricos para los
que se desea calcular la media o una expresión que realiza un cálculo
utilizando los datos de dicho campo. La media calculada por AVG es la media
aritmética (la suma de los valores dividido por el número de valores). La
función AVG no incluye ningún campo NULL en el cálculo.
COUNT
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 función (la cual puede ser intrínseca 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 cálculo sobre un campo, COUNT simplemente
cuenta el número de registros sin tener en cuenta qué valores se almacenan
en los registros. La función COUNT no cuenta los registros que tienen campos
NULL a menos que expr sea el carácter comodín asterisco (*). Si utiliza un
asterisco, COUNT calcula el número total de registros, incluyendo aquellos que
contienen campos NULL. COUNT(*) es considerablemente más rápida que
COUNT(Campo). No se debe poner el asterisco entre dobles comillas ('*').
MAX, MIN
MIN(expr)
MAX(expr)
STDEV, STDEVP
STDEV(expr)
STDEVP(expr)
En donde expr representa el nombre del campo que contiene los datos que
desean evaluarse o una expresión que realiza un cálculo utilizando los datos
de dichos campos. Los operandos de expr pueden incluir el nombre de un
campo de una tabla, una constante o una función (la cual puede ser intrínseca
o definida por el usuario pero no otras de las funciones agregadas de SQL).
STDEVP evalúa una población, y STDEV evalúa una muestra de la población.
Si la consulta contiene menos de dos registros (o ningún registro para
STDEVP), estas funciones devuelven un valor NULL (el cual indica que la
desviación estándar no puede calcularse).
SUM(expr)
En donde expr representa el nombre del campo que contiene los datos que
desean sumarse o una expresión que realiza un cálculo utilizando los datos de
dichos campos. Los operandos de expr pueden incluir el nombre de un campo
de una tabla, una constante o una función (la cual puede ser intrínseca o
definida por el usuario pero no otras de las funciones agregadas de SQL).
VAR, VARP
VAR(expr)
VARP(expr)
VARP evalúa una población, y VAR evalúa una muestra de la población. Expr
el nombre del campo que contiene los datos que desean evaluarse o una
expresión que realiza un cálculo utilizando los datos de dichos campos. Los
operandos de expr pueden incluir el nombre de un campo de una tabla, una
constante o una función (la cual puede ser intrínseca 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 expresión de consulta o en una Instrucción SQL.
SELECT VAR(Gastos) AS Varianza
FROM Pedidos WHERE País = 'España'
COMPUTE de SQL-SERVER
Esta cláusula añade una fila en el conjunto de datos que se está recuperando,
se utiliza para realizar cálculos en campos numéricos. COMPUTE actúa
siempre sobre un campo o expresión del conjunto de resultados y esta
expresión debe figurar exactamente igual en la cláusula SELECT y siempre se
debe ordenar el resultado por la misma o al memos agrupar el resultado. Esta
expresión no puede utilizar ningún ALIAS.
En donde:
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.
Obtiene una lista con el nombre y el precio unitario de todos los productos con
el mismo precio que el almíbar anisado.
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.
Por otra parte, cuando el procedimiento se ejecuta por vez primera, se produce
su compilación y la optimización 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.
[(lista de parámetros) ]
AS sentencias SQL
PARAMETROS
CREATE VIEW
CREATE TRIGGER
CREATE DEFAULT
CREATE PROCEDURE
CREATE RULE
Creación de procedimientos almacenados mediante Enterprise Manager
Hasta este momento hemos presentado la sintaxis de la sentencia Transact
SQL que permite crear procedimientos almacenados. A continuación
recordaremos el procedimiento necesario para crear un procedimiento
almacenado mediante Enterprise Manager
Para ello deberán seguirse los siguientes pasos:
Una vez creado el procedimiento, esto es, una vez definido, SQL Server
generará el siguiente código.
GO
GO
Las líneas adicionales evitarán que se intenten crear dos procedimientos con el
mismo nombre.
ELIMINACIÓN DE PROCEDIMIENTOS ALMACENADOS
[WITH RECOMPILE]]
IF (SELECT Cal FROM Calificacion WHERE Matricula = 2004001 AND CvMat = 100) > 70
RETURN 100
ELSE
RETURN 200
GO
IF (@ValorDeRetorno = 100)
PRINT 'APROBADO'
ELSE
PRINT 'REPROBADO'
GO
RETORNO DE PARÁMETROS
PASO DE PARÁMETROS
CREATE PROCEDURE suma @sum1 int, @sum2 int, @res int OUTPUT
AS
RETURN 0
RETURN 0
GO
PRINT @Prom
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
Como hemos dicho, las acciones que motivarán que un TRIGGER se ponga en
ejecución, es decir aquellas acciones que disparan el TRIGGER, son
modificaciones que puedan llevarse a cabo en los datos, tanto la adición de
datos nuevos como la eliminación de datos existentes. Dichas modificaciones
se llevan a cabo, evidentemente, mediante la ejecución de las sentencias
UPDATE, DELETE o INSERT.
De este modo, los TRIGGERS pueden utilizarse para resolver, entre otras, las
siguientes situaciones:
[WITH ENCRyPTION]
AS sentenciasSQL
ELIMINACIÓN DE TRIGGERS
INSERCIÓN MÚLTIPLE
La tabla inserted almacena una copia de las filas que se han añadido durante la
ejecución de una sentencia INSERT o UPDATE sobre una tabla que tiene
asociado un TRIGGER.
BORRADO MÚLTIPLE
La tabla deleted almacena una copia de las filas eliminadas durante una
sentencia DELETE o UPDATE. Evidentemente, una vez realizada la loperación
de borrado, las filas desaparecerán de la tabla asociada al TRIGGER y sólo
aparecerán en la tabla deleted
TRIGGERS y TRANSACCIONES
TRANSACCIONES y TRIGGERS
BEGIN TRANSACTION
END TRANSACTION
UN EJEMPLO COMPLETO
Nos proponemos informatizar una biblioteca creando una base de datos que
mantenga información de los volúmenes existentes en su fondo, de los socios
inscritos y de los préstamos efectuados. Evidentemente, nuestro objetivo es
simplemente ilustrar el sentido y necesidad de procedimientos almacenados y
TRIGGERS por lo que el diseño se ha simplificado al máximo evitando
cualquier tipo de consideración sobre el modelo de datos.
El primer paso será definir siquiera burdamente las tablas necesarias. Del más
sencillo análisis 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 acción de préstamo que se lleve a cabo.
La definición 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 mínimas equivalentes serían
Tabla libros:
(registro smallint
signatura char(20),
titulo varchar(50),
nombreautor varchar(50)
editorial varchar(20),
fechaentrada datetime)
Tabla autores:
(idautor smallint
nombreautor varchar(50),
nacionalidad varchar(20))
Tabla socios:
nombresocio varchar(50),
edad smallint,
direccion varchar(20),
teléfono varchar(10))
Tabla prestamos:
(idprestamo smallint
idautor smallint,
idsocio smallint,
fechaprestamo datetime)
Procedimiento ObraPorAutor
FROM libros
DEFINICIÓN DE TRIGGERS
ON prestamos
FOR INSERT AS
IF
BEGIN
END
ON libros
FOR DELETE AS
IF
(SELECT COUNT(*) FROM libros
BEGIN
END
Otro ejemplo con la base de datos ESCUELA, que se activa cada vez que
deseo ingresar una calificación nueva.
Lo que que hace es checar si no hay alguna calificación para ese alumno
y esa misma matricula.
IF (SELECT COUNT(Calificacion.Cal)
BEGIN
END
La definición más 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 información
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
están autorizados a consultar los datos de forma interactiva, probablemente
desee simplificar el modelo de datos, incluso si los usuarios utilizan potentes
herramientas de análisis.
Una simplificación habitual consiste en realizar una combinación en la
definición de la vista. En lugar de que el usuario realice la combinación 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 continuación.
Como ejemplo creamos una vista que encuentre todos los alumnos que cursan
una materia de Ingles.
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 continuación.
DROP VIEW nommbre_vista
La sentencia utilizada para modificar una vista es ALTER VIEW, cuya sintaxis
es idéntica a la sintaxis de la instrucción CREATE VIEW.
La regla “los títulos de las películas son únicos” se aplica a la tabla base
PELICULA, y a cualquier vista definida sobre ésta ¿Podemos definir RI sobre
relaciones derivadas (sobre vistas)?
Sería deseable
La vista heredaría toda RI de sus relaciones base y podría añadir
nuevas (clave candidata nueva para la vista, p.ej.)
No hablaremos de...
Procedimientos almacenados (stored procedures), ni de
Procedimientos disparados (triggered procedures)
A. Nombre
Regla almacenada en el Catálogo del Sistema bajo ese nombre.
Aparecerá en diagnósticos, producidos por el sistema como
respuesta a intentos de violación de la regla (mensajes de error al
usuario)
Los valores de los datos tienen que ser del tipo de datos correcto y se
tienen que encontrar en el dominio definido.
Los datos de una tabla sólo 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
Integridad de entidad
Integridad de dominio
Integridad referencial
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:
//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
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 inicialización y el incremento, o no especificar
ninguno de los dos. Si no se especifica ninguno, el valor predeterminado es
(1,1).
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.
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 institución no paga menos de 1000 y no paga mas de 5000.
INTEGRIDAD DE ENTIDAD
Restricciones 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
restricción PRIMARY KEY, la cual indica que el campo Clave es la llave de la
tabla Empleado.
INTEGRIDAD DE DOMINIO
predeterminado para una columna int debe ser un número entero, no una
cadena de caracteres.
a una tabla ya existente, puede especificar que SQL Server inserte en la nueva
Cuando elimine una definición DEFAULT, SQL Server insertará un valor NULL
en vez del valor predeterminado si no se inserta ningún valor para las nuevas
filas de la columna. No obstante, no se realizan cambios en los datos
existentes en la tabla.
Las restricciones FOREIGN KEY sólo 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 través de
desencadenadores. Para obtener más información, consulte CREATE
TRIGGER.
Este ejemplo, crea una tabla nueva la cual se llama Secretaria y tiene su
propia llave primaria, pero además crea el campo CvJefe el cual hace
referencia al campo Clave de la tabla Empleado creada en el ejemplo anterior.
constraint_name
Ejemplo:
CvDepto SMALLINT,
Nota El que SQL Server interprete una cadena vacía como un espacio simple
o como una verdadera cadena vacía se controla mediante el valor de
sp_dbcmptlevel. Si el nivel de compatibilidad es menor o igual que 65, SQL
Server interpreta las cadenas vacías como espacios simples. Si el nivel de
compatibilidad es igual a 70, SQL Server interpreta las cadenas vacías como
tales. Para obtener más información, consulte sp_dbcmptlevel.
Permisos
De forma predeterminada, los permisos CREATE RULE se conceden a los
miembros de la función 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.
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 Calificación.
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 sólo aquéllos
enumerados en la regla.
CREAR UN ÍNDICE
Después de determinar el diseño, puede crear índices en las tablas de la base
de datos.
Microsoft® SQL Server™ 2000 crea automáticamente í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 explícitamente un índice no agrupado, se creará un índice único,
agrupado, para exigir la restricción PRIMARY KEY. A menos que se
especifique explícitamente un índice agrupado, se creará de forma
predeterminada un índice único, no agrupado, para exigir la restricción
UNIQUE.
Si necesita crear un índice independiente de una restricción, puede utilizar la
instrucción CREATE INDEX. De forma predeterminada, se crea un índice no
agrupado si no se especifica la opción de agrupación.
Otras consideraciones que hay que tener en cuenta en el momento de crear un
índice incluyen:
Índices agrupados
Cuando cree un índice agrupado, se copiará la tabla, se ordenarán los datos de
la tabla y se eliminará la tabla original. Por lo tanto, debe haber suficiente
espacio vacío 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 están ordenados porque ya había un índice
agrupado y se vuelve a crear con el mismo nombre y las mismas columnas, la
operación de ordenación puede omitirse automáticamente 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 estén ordenadas mientras se genera el
índice. Si las filas no están correctamente ordenadas, se cancelan las
operaciones y no se crea el índice.
Índices únicos
La creación de un índice único asegura que fracase cualquier intento de
duplicar valores clave. Si se crea una sola consulta que provoque la agregación
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 instrucción de inserción 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
rechazarán las 20 filas de forma predeterminada. Sin embargo, se puede
especificar la cláusula IGNORE_DUP_KEY cuando se crea el índice; así, sólo
se rechazarán los valores de clave duplicados; los no duplicados se agregarán.
En el ejemplo anterior, sólo se rechazarían los 10 valores de clave duplicados;
los 10 valores no duplicados se insertarían 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 más de una fila. Tampoco se puede crear un índice
único en varias columnas si la combinación de columnas contiene valores
NULL en más de una fila. Estos valores se tratan como duplicados a efectos de
indización.
2.4.3.1. TÉCNICA DIDÁCTICA Exposición del profesor.
2.4.3.2. 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 investigación que complemente el tema de indices.
a) Valor actividad: 5 Puntos
b) Producto esperado: documento que avale la investigación.
c) Fecha inicio:
d) Fecha entrega:
e) Forma de entrega: Documento
f) Tipo de Actividad: Equipo (3 gentes)
Las filas de datos para cada tabla o vista indizada se almacenan en una
colección de páginas de datos de 8 KB. Cada página de datos dispone de una
cabecera de 96 bytes que contiene información del sistema como el
identificador (Id.) de la tabla que es propietaria de la página. La cabecera de
página también incluye punteros a las páginas anteriores y siguientes que se
utilizan si las páginas se vinculan a una lista. Al final de la página se encuentra
una tabla de desplazamiento de filas. Las filas de datos ocupan el resto de la
página.
Organización de páginas de datos
Las tablas de SQL Server 2000 utilizan uno de estos dos métodos para
organizar sus páginas 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
también tienen una fila en sysindexes, con indid = 255.
Por ejemplo:
CREACIÓN DE INDICE
Estas instrucciones crean un indice a la tabla Calificacion, para el campo de
Cal.
USE ESCUELA
CREATE INDEX IndCal
ON Calificacion (Cal)
ELIMINACIÓN DE INDICE
USE ESCUELA
DROP INDEX Calificacion.IndCal
La idea clave es que una transacción debe ser atómica, es decir, las
operaciones que la componen deben ser ejecutadas en su totalidad o no ser
ejecutadas en absoluto.
Una sentencia de definición o manipulación de datos ejecutada de forma
interactiva (por ejemplo utilizar el SQL * Plus de Oracle para realizar una
consulta) puede suponer el inicio de una transacción.
Asimismo, la ejecución de una sentencia SQL por parte de un programa que no
tiene ya una transacción en progreso, supone la iniciación de una transacción.
Toda transacción finaliza con una operación de COMMIT (confirmar) o bien con
una operación de ROLLBACK (anular, abortar o revertir).
1
El conjunto de valores almacenados en la base de datos cumple toda restricción de integridad especificada en el
esquema, así como cualesquiera otras restricciones que deban cumplirse en la base de datos.
Tanto una operación como la otra puede ser de tipo explícito (si la propia
transacción (su código) contiene una sentencia COMMIT o ROLLBACK) o
implícito (si dicha operación es realizada por el sistema de forma automática,
por ejemplo tras detectar una terminación normal (éxito) o anormal (fallo) de la
transacción).
Por defecto, una vez finalizada una transacción, si todas sus operaciones se
han realizado con éxito, se realiza un COMMIT implícito de dicha transacción; y
si alguna de ellas tuvo problemas, se lleva a cabo un ROLLBACK implícito de
la transacción (es decir, se deshacen todas las operaciones que había
realizado hasta el momento del fallo).
3.1.3.1. TÉCNICA DIDÁCTICA Exposición del profesor.
3.1.3.2. 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) Valor actividad: 2.5 Puntos
b) Producto esperado: Contestar preguntas de manera escrita
c) Fecha inicio:
d) Fecha entrega:
e) Forma de entrega: Documento
f) Tipo de Actividad: Individual
Se suele hacer referencia a estas como las propiedades ACID (por sus iniciales
en inglés).
1. Atomicidad
2. Consistencia
3. Aislamiento (Isolation)
4. Durabilidad
INICIO DE TRANSACCIÓN
Operación que marca el momento en el que una transacción comienza a
ejecutarse. En un entorno SQL, esta operación «es implicada» de forma
implícita por la primera sentencia SQL que se ejecuta dentro de una
transacción.
LEER o ESCRIBIR
Operaciones de lectura/escritura de elementos de la base de datos, que se
realizan como parte de una transacción.
FIN DE TRANSACCIÓN
Las operaciones de LEER y ESCRIBIR han terminado. En este punto se
verifica si la transacción debe abortarse por alguna razón (si viola el control de
concurrencia, por ejemplo), o bien si los cambios realizados por la transacción
(hasta ahora en búfers de memoria volátil) pueden aplicarse permanentemente
a la base de datos en disco (es decir, si puede realizarse una operación de
CONFIRMAR).
CONFIRMAR (COMMIT)
La transacción terminó con éxito, todos los cambios que ha realizado se
pueden confirmar sin peligro en la BD y ya no serán cancelados.
ABORTAR (ROLLBACK)
La transacción terminó sin éxito y toda actualización que ha realizado se debe
cancelar.
Algunas técnicas de recuperación necesitan operaciones adicionales como las
siguientes:
DESHACER
Similar a ABORTAR, pero se aplica a una sola operación y no a una
transacción completa.
REHACER
Especifica que algunas de las operaciones realizadas por una transacción
deben repetirse, para asegurar que todas las operaciones realizadas por una
transacción que ha sido CONFIRMADA se hayan aplicado con éxito a la BD (es
decir, los cambios hayan quedado grabados físicamente en disco).
3.4.3.1. TÉCNICA DIDÁCTICA Exposición del profesor.
3.4.3.2. MATERIAL DE APOYO
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 transacción‟
ROLLBACK TRAN
END
USE ESCUELA
DECLARE @ERROR int
Iniciamos la transacción
UPDATE Calificacion SET Cal = 90 WHERE Matricula= 2004001 AND CvMat = 100
SET @ERROR=@@ERROR
UPDATE Calificacion SET Cal = 100 WHERE Matricula= 2004002 AND CvMat = 100
SET @ERROR=@@ERROR
Si llegamos hasta aquí es que los dos UPDATE se han completado con éxito y
podemos "guardar" la transacción en la base de datos.
COMMIT TRAN
TratarError:
ROLLBACK TRAN
END
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 ejecutarán como una sola. Si por ejemplo en medio de
la transacción (después del primer UPDATE y antes del segundo) hay un corte
de electricidad, cuando el SQL Server se recupere se encontrará en medio de
una transacción y, o bien la termina o bien la deshace, pero no se quedará a
medias.
El ERROR está en pensar que si la ejecución de la primera sentencia da un
ERROR se cancelará la transacción. El SQL Server sólo se preocupa de
ejecutar las sentencias, no de averiguar si lo hacen correctamente o si la lógica
de la transacción es correcta. Eso es cosa nuestra.
Por eso en el ejemplo que tenemos más arriba para cada sentencia de nuestro
conjunto averiguamos si se ha producido un ERROR y si es así actuamos en
consecuencia cancelando toda la operación.
TRANSACCIONES ANIDADAS
Otra de las posibilidades que nos ofrece el SQL Server es utilizar transacciones
anidadas.
sean parte permanente de la base de datos, libera los recursos mantenidos por
@@TRANCOUNT ahora es 1
@@TRANCOUNT ahora es 2.
SELECT 'El nivel de anidamiento es', @@TRANCOUNT
@@TRANCOUNT ahora es 3.
Reduce @@TRANCOUNT a 2.
Reduce @@TRANCOUNT a 1.
Reduce @@TRANCOUNT a 0.
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.
@@TRANCOUNT ahora es 1
@@TRANCOUNT ahora es 2.
@@TRANCOUNT ahora es 3.
ROLLBACK TRAN
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 más lejos hay una cuarta sentencia
para trabajar con transacciones: SAVE TRAN
SAVE TRAN
Esta marca sirve para deshacer una transacción en curso sólo hasta ese punto.
Las Bases de Datos (BDs) incluidas hoy en día en los sistemas de información
de cualquier organización, nacen con el fin de resolver las limitaciones que en
algunos casos presentan los ficheros para el almacenamiento de información.
En los entornos de Bases de Datos, las diferentes aplicaciones y usuarios
utilizan un único conjunto de datos integrado a través de un Sistema de Gestión
de Bases de Datos (SGBD). De esta forma se pueden resolver problemas
como duplicación de información, inconsistencia de los datos y dependencia
entre programa y estructura de datos. Por otra parte, la agrupación 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 operación sobre la BD.
Para conseguir un entorno de BD seguro se han de identificar las amenazas
reales, elegir las políticas de seguridad adecuadas que establezcan
mecanismos de prevención así como métodos que comprueben que no se han
producido accesos ilícitos.
Las BDs que contienen información sobre datos financieros son un blanco
tentador para los ladrones. Asímismo, las BDs que contienen información
referentes a las operaciones de una compañía pueden ser de interés para sus
competidores sin escrúpulos. También existen BD que por su contenido
personal deben ser mantenidas en estricto secreto. Por otra parte, la pérdida
de operatividad del SGBD o de información de sus BDs es un problema que
afecta muy seriamente al funcionamiento de una compañía.
Una amenaza contra la seguridad de las BDs es un agente hostil que puede
difundir o modificar información gestionada por el SGBD sin la debida
autorización. 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: difusión de información confidencial, modificación no autorizada de datos e
incluso denegación de servicio a usuarios.
A continuación se estudian dos aspectos de seguridad que afectan
particularmente a las BDs como son la deducción ilícita de información
confidencial a partir de información accesible y vulneraciones de la integridad
de sus datos. También 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
información confidencial de la BD. Por ejemplo, cuando en una BD tenemos
dos campos relacionados por una función matemática siendo uno accesible y el
otro secreto, si el atacante conoce la relación podrá hacerse fácilmente con los
datos secretos. También 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 número de litros de combustible que se
han cargado en el avión podremos, con un sencillo cálculo, 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 información secreta se puede realizar
aplicando únicamente el sentido común, o utilizando información auxiliar.
Agregación
Agregación consiste en el proceso de combinar múltiples 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 agregación inferencial, si se combinan objetos del
mismo tipo se denomina agregación cardinal. Los dos tipos precisan de
diferente forma de prevención.
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 modificación,
adición o borrado de información de la BD. La integridad se debe garantizar
también frente a errores del sistema, virus y sabotajes que puedan dañar los
datos almacenados. Este tipo de protección se consigue mediante controles del
sistema apropiados, procedimientos de respaldo y recuperación y también
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 caída 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
eléctrico, 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 función lógica en una
aplicación de la BD.
4
Procedimientos almacenados del sistema que permiten la supervisión
Las transacciones deben cumplir dos requisitos: (1) ser atómicas, esto es,
todos las operaciones asociadas a una transacción deben ejecutarse por
completo o ninguna de ellas, y (2) ser correctas, es decir, cada transacción
debe ser un programa que conserve la consistencia de la BD.
Si se produce algún incidente durante la ejecución de una transacción que deje
la BD inconsistente el SGBD debe recuperar el estado previo a dicha
transacción. Los procedimientos de respaldo y recuperación tienen como
objetivo poder recuperar un estado anterior de la BD. Para ello, mantienen en
un fichero (fichero LOG o Bitácora de la BD) información sobre las
transacciones que se realizan. Si por cualquier razón se detecta que se pierde
la consistencia en la BD el sistema de recuperación 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 lógica 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 simultáneos
a un mismo objeto de la BD la práctica común consiste en bloquear el objeto
accedido el tiempo que dure la operación y liberarlo una vez completada. Esta
técnica, 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 políticas de integridad se basan en limitar los privilegios a los
usuarios en cada momento de tal forma que cada usuario sólo puede acceder a
los datos que precisa para su trabajo y utilizando únicamente las operaciones
estrictamente necesarias. Las restricciones de privilegios no sólo se aplican a
departamentos dentro de una organización sino también 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 más fácilmente las actividades de los
usuarios y detectar cambios en los privilegios otorgados a cada role (ver figura
4.1). Además, el administrador de la BD puede fácilmente modificar los
privilegios a grupos de usuarios cambiando un único role.
Fig. 4.1 : Ejemplo de control de acceso basado en roles.
SQL Server valida a los usuarios con 2 niveles de seguridad; autentificación del
login y validación de permisos en la Base de Datos de cuentas de usuarios y de
roles. La autentificación identifica al usuario que está usando una cuenta y
verifica sólo 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 específicos 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.
Un usuario debe tener una cuenta para conectarse al SQL Server. Este
reconoce 2 mecanismos de autentificación: Autentificación de SQL Server y de
Windows NT. Cada uno tiene un diferente tipo de cuenta.
Autentificación de sql server
Autentificación de windows nt
Modo de autentificación
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 específicas 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
asignársele determinados permisos administrativos a un usuario en particular.
También se pueden crear roles de Base de Datos definidos por el usuario. En
SQL Server, los usuarios pueden pertenecer a varios roles:
Validación de permisos
6. Opcionalmente:
En Base de datos, haga clic en la base de datos predeterminada
a la que se conecta la cuenta de inicio de sesión después de
iniciar una sesión en una instancia de SQL Server.
En Idioma, haga clic en el idioma predeterminado en el que se
mostrarán los mensajes al usuario.
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
USE master
GO
sp_addlogin @loginame = 'TempWorker', @password = 'fff', defdb = 'sales'
GO
USE sales
GO
sp_grantdbaccess 'TempWorker'
GO
El usuario debe tener los permisos adecuados para realizar cualquier actividad
que implique cambiar la definición de una base de datos o el acceso a su
contenido.
La administración de permisos incluye la concesión o revocación de los
derechos de usuario para:
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 de instrucción
Las actividades que implica la creación 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 instrucción. Por ejemplo, si
un usuario necesita crear una tabla en una base de datos, será necesario
otorgarle el permiso de instrucción CREATE TABLE. Los permisos de
instrucción como, por ejemplo, CREATE DATABASE, se aplican a la
instrucción en sí y no a un objeto específico definido en la base de datos.
Los permisos de instrucción son:
BACKUP DATABASE
BACKUP LOG
CREATE DATABASE
CREATE DEFAULT
CREATE FUNCTION
CREATE PROCEDURE
CREATE RULE
CREATE TABLE
CREATE VIEW
Permisos implícitos
Los permisos implícitos controlan las actividades que sólo 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 función fija de
servidor sysadmin hereda automáticamente todos los permisos para realizar
cualquier actividad o ver cualquier elemento de la instalación de SQL Server.
Los propietarios de objetos de base de datos también tienen permisos
implícitos 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 definición de la tabla o controlar
sus permisos para permitir que otros usuarios trabajen con ella.
4.3.3.1. TÉCNICA DIDÁCTICA Exposición del profesor.
4.3.3.2. MATERIAL DE APOYO
4.3.4. ACTIVIDADES DE APRENDIZAJE
4.3.4.1. ACTIVIDAD DE APRENDIZAJE 1
A19-T5 Concesion y Renovación de privilegios.
4.3.4.1.1. INSTRUCCIONES
El usuario general creado anteriormente (el cual solo podia consultar e insertar
información), le agregamos el privilegio de ppoder modificar información.
Creamos un tercer usuario el cual se llama supervisor el cual solo puede
observar la información.
a) Valor actividad: 5 Puntos
b) Producto esperado: Tres usuarios en la base de datos
c) Fecha inicio:
d) Fecha entrega:
e) Forma de entrega: Archivo
f) Tipo de Actividad: Individual
5
La auditoría C2 es necesaria si se está ejecutando un sistema certificado C2. Un sistema certificado C2 cumple con
un estándar gubernamental que define el nivel de seguridad. Para que Microsoft® SQL Server™ tenga la certificación
C2, debe configurarlo en la configuración C2 evaluada.
USAR EL ANALIZADOR DE SQL
El Analizador de SQL proporciona la interfaz de usuario para la auditoría de
sucesos. Existen varias categorías de sucesos que se pueden auditar con el
Analizador de SQL, por ejemplo:
tipo de suceso
6
FUNDAMENTOS DE BASES DE DATOS, Segunda Edición, 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. Además, una localidad puede
participar en la ejecución de transacciones globales, es decir, aquellas que
acceden a datos de varias localidades. La ejecución de transacciones globales
requiere comunicación entre las localidades.
Las localidades en el sistema conectarse físicamente 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 conexión directa entre las dos localidades. En la figura 5.1.1 se ilustra
algunas de las configuraciones más comunes. Las diferencias principales entre
estas configuraciones son:
Fiabilidad y disponibilidad
Si se produce un fallo en una localidad en un sistema distribuido, es posible
que las demás localidades puedan seguir trabajando. En particular, si los datos
se repiten en varias localidades, una transacción que requiere un dato
especifico puede encontrarlo en más de una localidad. Así, el fallo de una
localidad no implica necesariamente la desactivación 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 mínimo de
complicaciones.
Aunque la recuperación de fallos es más 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 línea aérea no
puede tener acceso a la información, es posible que pierda clientes a favor de
la competencia.
7
http://www.dsic.upv.es/~emarzal/bda/Tema3a.pdf (03/Ago/05)
Definición de vistas Esquemas externos
parciales
Control de:
Integridad y seguridad de Integridad semántica Herramientas para:
los datos Accesos concurrentes Control integridad
Reconstrucción en caso Reconstrucción
de fallo Control seguridad
Seguridad (privacidad)
Esquema lógico:
Empleado(dni, nombre, dirección, salario, tipo)
CP: {dni}
Esquema Interno:
Fichero ordenado Empleado con índice primario sobre el campo dni en el
camino h:/disco1/gerencia
EJEMPLO
Especificación
Una pequeña inmobiliaria desea mantener información sobre los edificios cuya
venta gestiona. Se quiere saber:
– De cada edificio, el código, la ubicación, el distrito, el propietario, el precio
solicitado por éste y el agente encargado de la venta si ya está asignado.
– De cada propietario, el código, nombre y teléfono.
– De cada agente el DNI, el nombre, la comisión por cada venta, los años de
antigüedad y el teléfono.
Grupos de trabajo:
– El personal de administración tiene acceso a toda la información comentada.
– El jefe de la inmobiliaria sólo desea tener información referente a los edificios
con precio solicitado superior a 5 millones. De cada uno desea el código, la
ubicación, y el distrito.
– El jefe es el único que puede modificar la información de los agentes.
Esquema Físico
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
Repetición y fragmentación
Consideramos una consulta muy sencilla: “encontrar todas las tuplas de la
relación deposito”. Aunque la consulta es muy simple, de hecho es trivial; su
procesamiento no es trivial, ya que es posible que la relación deposito esté
fragmentada, repetida o las dos cosas. Si la relación 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 transmisión más reducidos.
Pero si una copia esta fragmentada, la elección no es tan sencilla, ya que es
preciso calcular varios productos o uniones para reconstruir la relación
deposito. En tal caso, el numero de estrategias para este ejemplo sencillo
puede ser grande. De hecho, la elección de una estrategias puede ser una
tarea tan compleja como hacer una consulta arbitraria.
La transparencia de la fragmentación implica que el usuario puede escribir una
consulta como esta:
σ nombre – sucursal = “Hillside” (deposito)
Estrategia de semiinterseccion
Suponer que deseamos calcular la expresión r1 |X| r2, donde r1 y r2 están
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:
como r1 |X| II (R1 ∩ R2) (r1)= r1, la expresión 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
situación si r1 es el resultado de una expresión de álgebra relacionan que
contenga la selección. 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 pequeña fracción 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 fracción de tuplas en r2.
Esta estrategia es conocida como una estrategia de semiproducto, después del
operador de semiproducto, indicado por |X, de álgebra relacional. El
semiproducto de r1 con r2, indicado por r1 |X| r2, es:
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 configuración distribuida es necesario prever otro tipo de fallos, como
pueden ser:
El fallo total de una localidad.
La interrupción de una línea de comunicación.
Perdida de mensajes.
Fragmentación 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 línea de comunicación afectados.
En general, no es posible distinguir entre la interrupción de una línea de
comunicación, el fallo total de una localidad, la perdida de mensajes o la
fragmentación de la red. Por lo general, es posible detectar que existe un fallo,
pero resulta difícil 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 también es factible que se haya
interrumpido la línea de comunicación 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 reconfiguración del sistema que le
permita continuar con sus operaciones normales.
Sin en la localidad que esta fuera de servicio se almacena información
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 existían 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 información
que se encuentra el localidades que siguen activas.
Si la localidad que quedo fuera de servicio en el distribuidor central de
algún 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.
PROTOCOLO DE COMPROMISO
Para garantizar la atomicidad, es preciso que todas las localidades en las que
haya ejecutado la transacción T coincidan en el resultado final de la ejecución.
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
dos–fases. Otra alternativa es el protocolo de compromiso de tres–fases, el
cual impide ciertas desventajas del compromiso de dos fases, pero añade
complejidad y tiempo extra.
Compromiso de dos – fases
sea T una transacción 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 añade el registro <preparar T> a la bitácora y la graba en
memoria estable. Una vez hecho esto envía 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 añade un registro <no T> la bitácora y a continuación
enviará un mensaje abortar T a C1. Si la respuesta es afirmativa
agregara un registro < T lista > a la bitácora y grabara todos los
registros de bitácora 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 después de un intervalo de tiempo,
previamente especificado, Ci puede determinar si la transacción T puede
ejecutarse o abortarse. Si Ci recibió el mensaje T lista de todas las
localidades que participan, la transacción T puede ejecutarse. En caso
contrario, la transacción T debe abortarse. Según haya sido el veredicto,
se agregara un registro <ejecutar T> o <abortar T> a la bitácora y se
grabara en memoria estable. En este punto, el destino de la transacción
se habrá sallado. A continuación, 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
bitácora.
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 información requerida esta ya
en almacenamiento estable. En caso contrario, si la localidad se cayera
después de enviar el mensaje T lista, no seria capaz de cumplir su promesa.
El destino de una transacción 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 transacción. 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 bitácora y graba esta en la memoria estable. En algunas implementaciones
del protocolo de compromiso de dos – fases, una localidad envía 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,
añade el registro <T completo> en la bitácora.
Manejo de fallos
El protocolo de compromiso
Si ocurre un error entre las dos fases, todos los servidores se comunican con el
servidor de confirmación para ver si la transacción 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:
LA IMPORTANCIA DE MSDTC.lOG
INSTALACIÓN
Durante la instalación del servicio (que tiene lugar como parte de la instalación
del servidor), las DLL y los archivos ejecutables del servidor DTC se copian al
subdirectorio \BIRM del directorio raíz de SQL. El archivo de registro de DTC se
instala en el directorio \DATA, bajo la raíz de SQL.
PRECAUCIÓN
Antes de instalar un pJiquete de servicio o actualización, asegúrese 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 versión y
otra.
Una vez iniciado el servicio DTC, puede realizarse una prueba simple para
verificar que todo está funcionando como debe.
Abra la ventana Estadísticas de la consola de administración 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 instrucción ROLLBACK; el contador debería volver a 0.
UTILIZACIÓN
Afortunadamente, no necesitamos preocuparnos de los protocolos subyacentes
ni de las funciones que se invocan para que tenga lugar una transacción
distribuida. Como desarrolladores, basta con cambiar muy sutilmente nuestra
forma de programar, utilizando BEGIN DISTRIBUTED TRAN en lugar de la
instrucción más usual BEGIN TRAN.
Al ejecutar BEGIN DISTRIBUTED TRAN, la transacción se registra ante el
servidor MS DTC. Esta acción nos convierte en el origen de la transacción y
nos asigna la responsabilidad de enviar las instrucciones COMMIT o
ROLLBACK al DTC, que entonces se encargará de gestionar la terminación de
la transacción en todos los servidores implicados.
Los servidores SQL pueden registrarse en nuestra transacción de una de las
siguientes maneras:
NOTA
Para que los procedimientos almacenados remotos se ejecuten siempre dentro
del contexto de una transacción distribuida. Puede utilizarse la opción SET
REMOTE ROC TRANSACTlONS ON. que se establece por separado para
cada conexión, o puede configurarse esta opción globalmente para todo un
servidor utilizando sp_configure 'remote proc trans', ´1´.
NOTA
Después de haber configurado servidores enlazados, pueden realizarse
transacciones distribuidas sin estar restringidos a ejecutar solamente
procedimientos almacenados remotos.
Solución de problemas
Obviamente, como hemos complicado nuestra transacción y hemos
involucrado más componentes (servidores, red, etc.), tarde o temprano se
producirán problemas (confiamos en que más tarde que temprano).
8
Microsoft SQL Server /, Sharon Bjeletich, Greg Mable, et al., PRENTICE HALL
plantearnos un montón de cuestiones, todas ellas complejas. Si tengo dos
conexiones a mi base de datos y abro una transacción 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 tendría mi
aplicación que garantizar que va a poder validar la segunda transacción, antes
de validar la primera. Esto resumido y simplificado es lo que podríamos
denominar confirmación en dos pasos.
No obstante no es nada sencillo desde el punto de vista técnico 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 artículo, espero que
a no mucho tardar, podremos hablar de COM+ y Visual Studio .NET, y como
crear componentes transaccionales que nos permitan olvidarnos más 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 servirán
también 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 podía esperar mucho más. Podría cambiarlo, de
hecho no se vería afectado mi Sql, ya que tengo Sql-server 2000, pero no lo
voy a hacer, :-).
Los dos servidores están físicamente conectados en red, en una red local.
Para comunicarlos he usado los procedimientos almacenados
sp_addlinkedserver y sp_addlinkedsrvlogin, con el código que podéis ver a
continuación :
sp_addlinkedsrvlogin @rmtsrvname='maricarmen'
, @useself ='False'
, @rmtuser='sa'
, @rmtpassword='javier'
USE pruebas
GO
SET xact_abort on
GO
BEGIN TRAN
INSERT INTO maricarmen.pruebas.dbo.pruebas (texto) VALUES('hola')
INSERT INTO pruebas (texto) VALUES ('adiós')
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
QUE ES XML
Introduccion
Las tecnologías XML son un conjunto de módulos que ofrecen servicios útiles a
las demandas más frecuentes por parte de los usuarios. XML sirve para
estructurar, almacenar e intercambiar información.
Conceptos
Cómo funcionan
XSL funciona como un lenguaje avanzado para crear hojas de estilos. Es capaz
de transformar, ordenar y filtrar datos XML, y darles formato basándolo 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
estándar para añadir hipervínculos en un archivo XML. Es decir, es un
mecanismo de vinculación a otros documentos XML.
Una de las prestaciones más esperadas de SQL 2000 ha sido el soporte para
XML (eXtensible Markup Language o Lenguaje de marcas extensible).
Paradójicamente, es una característica cuyo valor práctico e inmediato no
acaba de estar claro. Por una parte, todo el mundo ha oído hablar de ese
lenguaje tan especial que haría de puente entre el resto de los lenguajes y, por
otra, la práctica totalidad de sistemas gestores de bases de datos relacionales
proclaman soportar el estándar XML. Pero veamos, ¿cuándo, dónde y por qué
habría que usar XML?
10
http://www.netyweb.com/contenido.asp?vcon=33 (05-aGO-05)
aceptación de algún lenguaje definido mediante XML, o por la aceptación del
propio estándar XML, y después por la proliferación de utilidades, herramientas
e infraestructura que sin duda surgirán para soportar su utilización. 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 están acostumbrados a desarrollar aplicaciones Windows de 32 bits
con los productos más conocidos de Microsoft. Si hablamos de transferir datos
a través de redes locales, la opción más lógica 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 organización, empieza a ser raro encontrar un entorno puro (no
híbrido), con tipos de servidores, plataformas o lenguajes únicos.
Si bien SQL Server 2000 es la primera versión de SQL Server que soporta
XML, las primeras entregas de tecnología XML desarrolladas por Microsoft ya
podían ejecutarse bajo las versiones 7.0 y 6.5 (entregas que pueden
descargarse desde la sede web de Microsoft
http://msdn.microsoft.com/workshop/xml/articles/xmlsql/). Otra manera de
proporcionar soporte para XML bajo SQL Server 7.0, 6.x y 4.2 consiste en
escribir procedimientos almacenados ampliados y estándares, aunque estos
últimos podrían menguar considerablemente el rendimiento si se están
manipulando grandes tablas de resultados con estructuras complejas. Por otro
lado, algunas funciones de SQL Server 7.0, como la búsqueda de textos
completos, son capaces de almacenar el código XML como texto. La pregunta
obvia es: ¿qué otras prestaciones aporta SQL Server 2000 para que
oficialmente se declare compatible con XML?
SQL Server 2000 permite introducir una sentencia SQL en el campo Dirección
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
continuación, la consulta dirige su petición al servidor web, IIS (Internet
Information Server, de Microsoft), a través de una raíz 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 métodos típicos: GET o
POST. Con GET, los datos del formulario contenido en el cliente se transfieren
hasta el servidor como pares nombre/valor añadidos al final de la URL. Este
mecanismo está sujeto a inconvenientes harto conocidos, entre los que se
cuentan la limitación de longitud para la URL y ciertos fallos de seguridad. El
método 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 artículo utilizarán el
método 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.
http://miservidor/Northwind/miconsulta.xml
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>
En SQL Server 2000, el empleo de la nueva cláusula FOR XML dentro de una
sentencia SELECT genera documentos XML en lugar de un conjunto de filas.
Esta nueva cláusula puede utilizarse tanto en consultas como en
procedimientos almacenados. Los argumentos admitidos por FOR XML son
XML mode, SchemaOptions y ELEMENTS.
GRAMS DE ACTUALIZACIÓN
<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 operación INSERT, basta con utilizar un bloque
sql:after. El bloque sql:before ejecuta una operación de DELETE y la de
UPDATE se consigue empleando ambos bloques. Para que la transacción se
produzca con éxito, la base de datos debe completar todas las operaciones
dentro de un bloque sql:sync.
http://miservidor/Northwind?sql=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 múltiples capas (n-tier) que utilizan
un número limitado de procedimientos almacenados
con parámetros establecidos para controlar el acceso a
los datos, el esquema de la base de datos puede
modificarse, sin tener que cambiar ningún código
cliente, con sólo 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 continuación, tendrá que enviar al servidor SQL una solicitud
“execute pedidosclientesxml ´GNZLZ´", introduciendo la siguiente URL en el
campo Dirección de IE 5.0:
http://miservidor/northwind?sql=execute+
pedidosclientesxml+GNZLZ
Las ventajas del método XML sobre las páginas ASP tradicionales son que, por
una parte, XML ofrece más flexibilidad para generar presentaciones de datos
sencillas y, por otra, su implementación es mucho menos costosa. Si desea
conocer todas sus posibilidades, espere a ver el alud de aplicaciones de
ejemplo que nos llegarán con la nueva versión de SQL Server 2000.
RASCANDO EN LA SUPERFICIE
Este artículo apenas deja al descubierto una parte insignificante de todo lo que
se puede hacer –y rápidamente-- 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 parámetros de consulta bien definidos que
devolvían datos XML) en un asombroso tiempo récord de 10 minutos.
Conseguimos tener la URL funcionando en menos tiempo del que tardamos en
telefonear para averiguar si la especificación había llegado correctamente. Este
tipo de productividad mejorada hará de SQL Server 2000 la plataforma ideal
para la entrega de formatos XML11
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
ADO
OLE DB
OLE DB es una API de bajo nivel basada en COM12 (Desde un punto de vista
práctico, un objeto COM es básicamente una caja negra que nuestra aplicación
puede usar para llevar a cabo una o más tareas) para acceder a datos de
diversos orígenes de datos. OLE DB es el método preferido para desarrollar
utilidades o aplicaciones SQL Server que requieran un máximo rendimiento. El
proveedor OLE DB de SQL Server, SQLOLEDB, es un proveedor compatible
con la versión 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á
más tiempo de desarrollo, tanto en términos de la curva de aprendizaje de la
nueva API, como del tiempo requerido para escribir programas.
12
El COM (Component Object Model ) es un estándar binario que define como se crean y destruyen los objetos y, lo
más importante, como interactúan entre ellos. La idea es que distintas aplicaciones con distintos códigos fuente puedan
comunicarse entre ellas mediante procesos, siempre que dichas aplicaciones sigan el estándar COM. Normalmente se
usa el COM para establecer fácilmente 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,
versión 3.70 o posterior, incluido en SQL Server 7.0.
SQL Namespace, SQL-NS, es un conjunto de interfaces COM que permite a
una aplicación mostrar los componentes de interfaz de usuario del
Administrador corporativo. Esto permite a cualquier aplicación desarrollada en
Visual Basic o Visual C++ mostrar cualquiera de los muchos asistentes, hojas
de propiedades y cuadros de diálogo 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
aplicación, puede utilizar objetos SQL Namespace para proporcionar esta
capacidad, en lugar de escribir su propio código.
ODBC y RDO
ODBC es la API estándar 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 migración desde ODBC o
RDO a OLE DB o ADO. OLE DB es la dirección futura para todas las API
de acceso a datos, porque proporciona la posibilidad de consultar y extraer
datos de orígenes tan diversos como SQL Server, Microsoft Access e
incluso hojas de cálculo Microsoft Excel.
PRECAUCIÓN
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
seguirán funcionando con SQL Server 7.0, no podrán acceder a las numerosas
funciones nuevas que SQL Server 7.0 proporciona. Considere realizar la
migración de sus aplicaciones DB-Library a alguna de las nuevas API, como
ADO.
ASP
Qué es ADO?
ActiveX Data Objects (ADO) es una tecnología ampliable y de fácil uso para
agregar acceso a bases de datos a sus páginas 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 orígenes 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 programación con bases de datos,
apreciará las características avanzadas de conexión y de manipulación 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" -->
Características de ADO
Objetos ADO
Métodos:
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
Con ODBC puede elegir el tipo de DSN que va a crear: Usuario, Sistema o
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.
<%
'Crea un objeto Connection
Set cn = Server.CreateObject("ADODB.Connection")
'Abre una conexión; la cadena hace referencia al DSN
cn.Open "FILEDSN=MiBaseDeDatos.dsn"
%>
Nota La cadena DSN no contiene espacios en blanco ni antes ni después del
signo igual (=).
En este caso, el método Open del objeto Connection hace referencia al DSN
de Archivo, que contiene la información de ubicación y la configuración de la
base de datos. Opcionalmente, también puede hacer referencia directamente a
un proveedor, origen de datos, Id. de usuario y contraseña, en lugar de al DSN.
<%
'Define el DSN de Archivo
strDSN = "FILEDSN=MiBaseDeDatos.dsn"
'Crea la instancia del objeto Connection y abre una conexión con la base de datos
Set cn = Server.CreateObject("ADODB.Connection")
cn.Open strDSN
'Utiliza el método 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
después del signo igual (=).
Además del comando INSERT de SQL, puede utilizar los comandos UPDATE y
DELETE de SQL para modificar y quitar información 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 acompañado de una cláusula WHERE
eliminará todas las filas de la tabla. Asegúrese de incluir una cláusula WHERE
de SQL, que especifica las filas exactas que se van a eliminar.
<%
'Establece una conexión con un origen de datos
strDSN = "FILEDSN=MiBaseDeDatos.dsn"
Set cn = Server.CreateObject("ADODB.Connection")
cn.Open strDSN
<%
'Abre una conexión mediante el objeto Command del objeto
'Connection no tiene un método Open para establecer
'la conexión
strDSN = "FILEDSN=MiBaseDeDatos.dsn"
Set cn = Server.CreateObject("ADODB.Connection")
cn.Open strDSN
Uno de los mayores retos del diseño de una aplicación Web sofisticada de
base de datos, como una aplicación de entrada de pedidos en línea que
atienda a miles de clientes, es la correcta administración de la conexiones con
la base de datos. Abrir y mantener las conexiones con las bases de datos,
incluso cuando no se transmita información, 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 diseñadas reciclan las
conexiones con la base de datos y compensan los retrasos debidos al tráfico
de la red.
Abandonar los intentos de conexión
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 conexión.
Como resultado, los retrasos excesivos en la conexión pueden reducir el
rendimiento de su aplicación de base de datos.
Con la propiedad ConnectionTimeout del objeto Connection puede limitar la
cantidad de tiempo que su aplicación espera antes de abandonar un intento de
conexión 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 conexión:
Set cn = Server.CreateObject("ADODB.Connection")
cn.ConnectionTimeout = 20
cn.Open "FILEDSN=MiBaseDeDatos.dsn"
\HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBCINST.INI\controlador
\CPTimeout = timeout
(REG_SZ, en segundos)
\HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBCINST.INI\SQL
Server\CPTimeout = 180
jdbc:odbc://www.empresa.com:400/basededatos
JDBC especifica un conjunto de clases de programación orientada a objetos
para que el programador lo use en la construcción de solicitudes SQL. Un
conjunto adicional de clases describe el controlador API de JDBC. Soporta los
tipos de datos más comunes de SQL, mapeados en forma de tipos de datos
Java. La API permite el soporte específico de implementación para las
solicitudes transaccionales y la capacidad de "comprometerse" o volver al
principio de una transacción.13
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 básicamente 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:
MES 1
Actividad de Fecha de Fecha de
Puntuación
Aprendizaje Inicio Entrega
A1-T1 Cuestionario. 5 puntos
A2-T2 Realizar Base de Datos 5 Puntos
A3-EC1 Sentencias SQL “Tablas
10 puntos
Multiples”
A4-ER1 Examen Rápido. 10 Puntos
A5-EC2 Procedimientos
10 Puntos
Almacenados
A6-EC3 Procedimientos de
10 Puntos
disparo
A7-EC4 Vistas 10 Puntos
Subtotal 60 Puntos
Examen 40 Puntos
Puntaje total del mes: 100 Puntos
MES 2
Actividad de Fecha de Fecha de
Puntuación
Aprendizaje Inicio Entrega
A8-ER2 Examen Rápido 5 Puntos
A9-EC5 Restricciones
5 Puntos
CONSTRAINTS
A10-EC6 Valores por omision 5 Puntos
A11-I1 Investigacion de
5 Puntos
Indices
A12-EC7 Crear Indices 5 Puntos
A13-T3 Cuestionario
2.5 Puntos
transacciones
A14-ER3 Examen Rápido 5 Puntos
A15-T4 Cuestionario planes 2.5 Puntos
A16-EC8 Transacciones 10 Puntos
A17-EC9 Crear usuarios 5 Puntos
A18-EC10 Seguridad de SQL 5 Puntos
A19-T5 Concesion y Renovación
5 Puntos
de privilegios
Subtotal 60 Puntos
Examen 40 Puntos
Puntaje total del mes: 100 Puntos
MES 3
Actividad de Fecha de Fecha de
Puntuación
Aprendizaje Inicio Entrega
A20-T6 Configurar SQL Server
para poder supervisar los 5 Puntos
sucesos
A21-ER4 Examen Rápido de los
Requisito
temas 4.3 y 4.4
A22-I2 Sistemas en
5 Puntos
organizaciones
A23-ER5 Examen Rápido de SGBD 5 Puntos
A24-EC11 Realización de una
30 Puntos
Base de Datos Distribuida.
A25-ER6 Examen Rápido XML 5 Puntos
A26-EC12 Manejo de Bases de
10 Puntos
Datos a través de ADO
Subtotal 60 Puntos
Examen 40 Puntos
Puntaje total del mes: 100 Puntos
MES 4
Actividad de Fecha de Fecha de
Puntuación
Aprendizaje Inicio Entrega
A27-I7 JDBC 5 Puntos
A28-T7 Análisis del sistema 10 Puntos
A29-T8 Diseño de la Base de
15 Puntos
Datos.
A30-T9 Reglas de Negocio. 20 Puntos
A31-T10 Sistema de Base de
10 Puntos
Datos.
Subtotal 60 Puntos
Examen 40 Puntos
Puntaje total del mes: 100 Puntos
Claves de apoyo:
A: Actividad (A#-Tipo#)
T: Tarea
I: Investigación
EC: Ejercicios en clases
ER: Examen Rápido
ANEXO B
BASE DE DATOS II
TECNOLOGÍAS DE LA INFORMACIÓN Y COMUNICACIÓN
SUBTOTAL DE
HRS FRENTE A 28
GRUPO
HORAS
0
EXTRACLASE
TOTAL DE HRS
28
AUTORIZADAS
MES 2
Fecha de la No.
Tema
sesión Hrs.
2.1. TIPOS DE INTEGRIDAD DE DATOS 1
2.2. USANDO RESTRICCIONES (CONSTRAINTS) 2
2.3. USANDO VALORES POR OMISIÓN Y REGLAS 4
2.4. INTRODUCCIÓN A INDICES 1
2.5. ARQUITECTURA y CREACIÓN DE INDICES 3
SUBTOTAL DE
HRS FRENTE A 28
GRUPO
HORAS
0
EXTRACLASE
TOTAL DE HRS
28
AUTORIZADAS
MES 3
Fecha de la No.
Tema
sesión Hrs.
4.4. SEGUIMIENTO DE AUDITORIA 2
SUBTOTAL DE
HRS FRENTE A 28
GRUPO
HORAS
0
EXTRACLASE
TOTAL DE HRS
28
AUTORIZADAS
MES 4
Fecha de la No.
Tema
sesión Hrs.
6.3. JDBC, PAGINAS DEL SERVIDOR JAVA. 5
PROYECTO FINAL 16
SUBTOTAL DE
HRS FRENTE A 21
GRUPO
HORAS
0
EXTRACLASE
TOTAL DE HRS
21
AUTORIZADAS