Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Integridad de dominio: significa que debemos velar porque cada valor o instancia de
un atributo esté en el dominio o conjunto de valores posibles para ese atributo.
§ Continuo: se dice que un atributo tiene un dominio continuo cuando toma cualquier
valor en un rango dado. Ejemplos: el peso de un producto, el tiempo de
calentamiento y la demanda de energía.
§ Discreto: se dice que un atributo tiene un dominio discreto cuando puede tomar
valores de una lista dada. Ejemplos: el estado civil, el sexo, la profesión y la
dependencia donde trabaja un empleado.
Para velar por la integridad de dominio podemos apoyarnos en el tipo de datos que le
asociemos a cada atributo y en las funciones de chequeos que se puedan definir con el
DBMS utilizado. Cuando tengamos atributos con dominio dinámico y discreto lo más
aconsejable para velar por la integridad de dominio, consiste en crear tablas de
referencia y luego se crean restricciones de clave foránea. Cuando se trate de un
dominio dinámico y continuo, se pueden definir variables dentro de paquetes que se
usan dentro de disparadores o triggers.
Integridad de entidad: este tipo de integridad vigila que toda instancia de una
entidad se distinga de las demás, inequívocamente.
Las entidades dentro de una base de datos corresponden a entidades del mundo real
donde sus instancias son completamente diferenciables; por ello, cada instancia debe
poseer un identificador único y no nulo denominado clave primaria en el modelo
relacional. El mecanismo empleado por casi todos los DBMS para garantizar la
integridad de entidad es la restricción impuesta a los atributos que forman parte del
identificador único de la entidad con la cláusula PRIMARY KEY cuando se define una
tabla.
Integridad Referencial: Este tipo de integridad vigila que un dato que sirva de
referencia en una relación o tabla del modelo relacional, de verdad exista en la tabla
referenciada. El dato (o conjunto de datos) de referencia es llamado clave foránea y
es clave primaria en otra entidad.
Por ejemplo:
Qué sucedería si se tuviese que eliminar a un proveedor que por lo menos tiene un
pedido a su nombre?
Así mismo, como en el caso de la eliminación, debemos decidir que acción tomar cuando
se actualiza un atributo clave foránea. Se debe especificar el rechazo o la
actualización en cascada. A continuación se muestra un ejemplo de cómo sería una
actualización en cascada implementada con un trigger o disparador elaborado con
PL/SQL para una base de datos ORACLE.
Integridad Definida por el Usuario: son reglas establecidas por el propio diseñador
de la base de datos y que corresponden a políticas o normas de la empresa.
Algunas de estas reglas se pueden especificar en la base de datos, sin tener que
definirlas en las aplicaciones. Esto sería lo ideal no sólo para velar por la integridad
de la base de datos, sin importar el ambiente desde el cual se esté teniendo acceso a
la base de datos, sino por la reutilización de código que además permite una mayor
adaptabilidad del sistema a los cambios organizacionales.
Ejemplos:
Seguridad
Diferentes usuarios pueden tener diferentes derechos sobre los mismos objetos. Los
manejadores de bases de datos relacionales permiten que el administrador pueda
restringir el acceso a ciertos datos que no competen con las funciones del usuario.
La seguridad se logra utilizando básicamente dos mecanismos:
• Vistas: Permite que se limite la visión del usuario a ciertas columnas o filas de
determinadas tablas.
Otros dos mecanismos para la protección del acceso no autorizado, que también debe
ser tenidos en cuenta, son:
• La criptografía: que consiste en cifrar los datos para hacerlos ilegibles mediante
algoritmos altamente sofisticados de tal manera que sólo los usuarios autorizados
puedan descifrarlos. Para encriptar o cifrar los datos, entonces, se necesita de un
algoritmo de encriptamiento y de otro para el desencriptamiento.
VISTAS
Del mismo modo que una cámara solo captura una parte del escenario, una vista es una
presentación restringida de los datos en una base de datos. Una vista es una orden de
consulta de datos almacenada que selecciona datos guardados en tablas. Esto es, una
vista es una orden SELECT sin la cláusula ORDER BY. La vista no guarda datos, lo que
almacena realmente es el texto SQL de la orden SELECT.
Obsérvese, en el último ejemplo, que en las vistas se pueden cambiar los nombres de
los atributos especificando los nuevos entre paréntesis, después del nombre de la
vista.
En Oracle, se puede utilizar el comando SQL*PLUS DESC, para describir una vista.
Los tipos de datos serán los mismos de las tablas bases.
Cuando se crea un vista, se puede usar en una orden SQL como una tabla básica:
SELECT *
FROM V_VUELOS
WHERE ORIGEN<>'MADRID';
Sin embargo, el DBMS la interpreta esta misma orden, como aparece a continuación.
SELECT *
FROM (SELECT ORIGEN, DESTINO
FROM VUELOS
WHERE NUM_VUELO NOT LIKE 'IB%' )
WHERE ORIGEN<>'MADRID';
Para la eliminación de una vista se usa el comando DROP; así, por ejemplo:
El sistema de privilegios
Para poder tener acceso a una base de datos, el DBA debe crear usuarios que serán
validados con una contraseña, cada vez intenten conectarse. Un nombre-de-usuario
(username) es el conjunto nominado de objetos que un usuario guarda juntos; llamado
también esquema. Cuando se crea un objeto en un esquema, los demás no tienen acceso
a él, a no ser que se concedan privilegios.
En Oracle existen tres roles predefinidos, según el tipo de usuario que se desee
crear: CONNECT para un usuario final que no tiene que crear o eliminar objetos en la
base de datos, RESOURCE para aquellos que si tienen este derecho y DBA que es tipo
de usuarios que pueden no sólo crear o destruir objetos propios sino también los
objetos de los demás usuarios. Estos permisos se deben dar en orden ascendente;
esto es, para dar el permiso RESOURCE, se debe haber concedido previamente el
permiso CONNECT y para ser usuario DBA, que es privilegio más alto, se deben haber
concedido los dos anteriores.
Ahora, para conceder privilegios o roles a los usuarios, se utiliza la orden GRANT,
cuya sintaxis aparece en la página siguiente.
Donde lista de permisos puede ser una serie de permisos separados por comas.
Además de los roles ya enunciados, se tienen entre otros, los permisos o roles
siguientes:
SELECT
INSERT
DELETE
UPDATE
ALL (para abreviar)
INDEX
ALTER
CREATE USER
CREATE PROFILE
CREATE ROLE
IMP_FULL_DATABASE (importar o cargar datos de respaldos)
EXP_FULL_DATABASE (hacer respaldos)
EXECUTE (ejecutar un procedimiento)
Ejemplos:
Un usuario puede conceder privilegios a los roles, o a los usuarios sobre los objetos de
su esquema o de otros usuarios a los que se le hayan dado privilegios con la opción
WITH GRANT OPTION.
Para quitar los permisos concedidos, se utiliza la orden REVOKE, que tiene la sintaxis
siguiente:
Las Transacciones
Una transacción es una unidad lógica de trabajo que corresponde directamente a una
sola actividad de la organización. Un sistema de bases de datos puede tener
diferentes clases de transacciones, desde actualizaciones simples de manera
interactiva hasta transacciones altamente complejas que incluyen miles de
operaciones; pero la característica en común que deben tener éstas es que no pueden
dejar ninguna de ellas, la base de datos en un estado inconsistente.
Esto significa que las operaciones realizadas deben conducir de un estado consistente
a otro que también lo sea; aunque después de realizar algunas de las operaciones
existan estados intermedios que pueden ser inconsistentes. Por lo tanto, para
garantizar la consistencia de la base de datos, se requiere que las operaciones dentro
de una transacción se efectúen todas o ninguna de ellas (las transacciones deben
considerarse atómicas). Una transacción que no se hizo completamente, debido a una
falla en software o en el hardware, debe ser devuelta a su estado inicial y cualquier
cambio que se haya grabado debe ser deshecho.
En ORACLE los comandos SQL COMMIT y ROLLBACK son usados para finalizar una
transacción y comenzar otra (COMMIT hace los cambios permanentes y ROLLBACK
deshace todos los cambios hechos en esa transacción).
Una unidad lógica de trabajo o transacción se da por finalizada en los siguientes casos:
El archivo BI copia los bloques antes de la transacción para poder facilitar que un
usuario se arrepienta y pueda deshacer los cambios. Esto haría que los bloques del
archivo BI sean vuelvan a escribir en la base de datos, deshaciendo efectivamente la
transacción. Hasta que el trabajo del usuario no se comprometa, los otros usuarios que
consulten los mismos datos, los leerán del archivo BI.
BEGIN
INSERT INTO emp
VALUES(‘10’, ’JARAMILLO’, ’LUIS’, ’ANALISTA’, 800000);
SAVEPOINT A;
INSERT INTO emp
VALUES (‘11’,’VELASQUEZ’,’ANA’,’ANALISTA’, 980000);
SAVEPOINT B;
INSERT INTO emp
VALUES (‘12’,’ARANGO’,’JULIO’,’DIGITADOR’, 210000);
......
ROLLBACK TO SAVEPOINT B; COMMIT;
END;
En este ejemplo quedarían en la tabla “emp”, sólo los registros de Luis y Ana.
CONCURRENCIA
- Que el acceso a los objetos en forma simultánea, por los usuarios, sea coordinado.
- Consistencia de los datos: Un usuario siempre debe tener una vista consistente de
los datos que está manipulando.
Suponga una compañía de viajes que mantiene una base de datos con la información de
los vuelos y alguien llama a reservar un número dado de asientos para determinada
fecha. Esta transacción implica mirar la tabla de vuelos para ver cuál cantidad de
asientos disponibles existe, luego registrar los nuevos pasajeros y por último
actualizar los asientos disponibles. Una dificultad que se puede presentar con esta
transacción es que otra persona también esté haciendo otra reservación y se pueda
sobrecargar el vuelo.
T1 TTj2
IN SHARE MODE impide que otra transacción actualice los datos de la tabla que ha
sido bloqueada para lectura hasta que haya una orden COMMIT, ROLLBACK o con otra
terminación de la transacción, como se expresó anteriormente. IN EXCLUSIVE MODE
permite cambiar los datos de la tabla e impide, a otra transacción cualquiera,
actualizar los datos al mismo tiempo; pero si le permite verlos excluyendo otros
bloqueos. IN SHARE UPDATE MODE permite a otras transacciones consultar la tabla
o bloquearla en modo SHARE UPDATE reservándose el derecho de actualizar una(s)
fila(s) en una tabla e impidiendo a las otras cambiar las mismas filas; tampoco permite
bloqueos exclusivos.
Granularidad: Es el tamaño del ítem sobre el cual se ejerce un bloqueo. Este ítem
puede ser una página, bloque, una tabla o toda la base de datos.
Esta situación se presenta cuando una transacción t1 está esperando por un recurso
que tiene la transacción t2 y ésta a su vez está esperando por un recurso que tiene la
t1.
Ejemplo:
Muchos manejadores de bases de datos, optan por deshacer la transacción que tenga
menos instrucciones y le informa al usuario que se ha detectado una situación de este
tipo. Cada aplicación deberá manejar estas situaciones dentro de su programación.
2.2.4. Respaldo
En línea: Mientras se está respaldando, los datos sigue estando disponible para los
usuarios. Esto es muy útil para bases de datos que deben estar en servicio las 24
horas.
Fuera de línea: Requiere que la base de datos esté fuera de servicio, mientras se está
respaldando.
2.2.5. Recuperación
- Dinámica: No sólo restaura la base desde la copia más reciente que se tenga, sino
que también es capaz de recuperar las transacciones que se hayan hecho desde
ese entonces.