Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                

Bada - Unidad 5 - Integridad

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 35

UNIDAD 5

INTEGRIDAD

Las restricciones o reglas de integridad proporcionan un medio de


asegurar que las modificaciones hechas a la base de datos no
provoquen la pérdida de la consistencia de los datos. Por tanto, las
restricciones de integridad protegen a la base de datos contra los
daños accidentales.

www.ibeltran.com.ar Analista de Sistemas


UNIDAD 5
INTEGRIDAD

La integridad de los datos está garantizada por un conjunto


predefinido de reglas de negocio o constraints. La definición de
constraints garantiza:

• Permitir o no valores nulos en las columnas.


• Valores únicos para las columnas.
• Un valor primario identificando cada una de las filas en una tabla
• Existencia de valores referenciales para cada columna que se lo
indique.
• Garantizar que las columnas cumplan reglas de negocio.
www.ibeltran.com.ar Analista de Sistemas
UNIDAD 5
INTEGRIDAD

VENTAJAS:

• Mejoramiento de la eficiencia.
• Centralización de reglas.
• Fácilmente modificables.
• Flexibilidad (Enable/Disable)
• Documentación completa en el diccionario de datos.

www.ibeltran.com.ar Analista de Sistemas


UNIDAD 5
INTEGRIDAD

Tipos de constraints:

• Not null
• Unique
• Check
• Primary Key
• Foreign Key

www.ibeltran.com.ar Analista de Sistemas


UNIDAD 5
INTEGRIDAD

Las constraints pueden ser declaradas cuando se crea la tabla.


Pueden definirse como parte de la columna imponiendo reglas
sobre ella. O puede definirse como parte de la tabla, en cuyo caso
impone reglas que alcanzan cualquier columna o conjunto de
columnas de la tabla.
Las constraints deben ser nombradas cuando son definidas. El
nombre debe ser único en el esquema. Dicho nombre aparecerá
en los mensajes cuando la constraint es violada. Si una constraint
no es nombrada, el motor de base de datos le asignará un
nombre.
www.ibeltran.com.ar Analista de Sistemas
UNIDAD 5
Las restricciones de integridad válidas incluyen:

• Not Null: Cuando una columna debe contener siempre valores,


debe usarse la restricción de integridad NOT NULL, la cual se
controlará en las inserciones y actualizaciones. Es la única
constraint que se recomienda que no tenga nombre.

create table empleados


(id_empleado char (5) not null,
nombre char (15) not null,
nivel-estudios char (15));

www.ibeltran.com.ar Analista de Sistemas


UNIDAD 5
• Unique (UK): Garantiza que dos filas en la tabla no tengan
valores duplicados para la columna o columnas sobre las cuales se
define la restricción unique. Los valores de una restricción de
unicidad deben ser distintos o nulos.

create table Empleados


(id_emp int (5) not null,
nombre char (10) not null,
dni int (10) not null constraint uk_dni unique);

www.ibeltran.com.ar Analista de Sistemas


UNIDAD 5
Las restricciones de integridad válidas incluyen:

• Check (CK): Obliga a que una condición especificada sea


evaluada a TRUE para la columna o grupo de columnas que se
aplica la check constraint.

create table Empleados


(id_emp int (5) not null,
nombre char (10) not null,
edad int (10) constraint ck_edad_emp
check (edad > 17 and edad < 65));

www.ibeltran.com.ar Analista de Sistemas


UNIDAD 5
Las restricciones de integridad válidas incluyen:
• Primary Key (PK): Especifica un simple o compuesto conjunto de
columnas que identifican cada una de las filas de la tabla. Una
tabla puede tener una sola clave primaria y las columnas que la
componen no pueden todas tener valores nulos.

create table gerentes


(Id_sucursal int (3) NOT NULL,
Id_gerente int (3) NOT NULL,
....
constraint pk_gerentes primary key (id_sucursal,
Id_gerente));
www.ibeltran.com.ar Analista de Sistemas
UNIDAD 5
Las restricciones de integridad válidas incluyen:

• Foreign Key (FK): la restricción Foreign Key asegura que los


valores en las columnas existan previamente en la definición de
una clave primaria o única de otra tabla o en la misma tabla. No
garantiza que los valores de las columnas sean no nulos (para esto
usar la restricción NOT NULL). Es la más usada de las restricciones
de integridad para definir una base de datos relacional.

www.ibeltran.com.ar Analista de Sistemas


UNIDAD 5
Creación de una tabla con una PK y otra con una FK.
create table Departamentos
(id_dept int (5) not null,
descripción char (10) not null,
constraint dept_pk_id_dept primary key (id_dept));
create table Empleados
(id_emp int (5) not null,
descripción char (10) not null,
id_dept int (5) not null,
constraint emp_pk_id_emp primary key (id_emp),
constraint emp_fk_dept_id foreign key (id_dept) references
Departamentos);
www.ibeltran.com.ar Analista de Sistemas
UNIDAD 5
En caso que la regla de integridad (o constraint) sea violada, se
obtendrá el siguiente error:

Integrity Constraint (EMP_FK_DEPT_ID) violated. Parent Key not


found.

www.ibeltran.com.ar Analista de Sistemas


UNIDAD 5
Borrado en cascada:

Las filas que son referenciadas desde una FK, por defecto no
pueden ser borradas si existen filas referenciándolas. Excepto que
las constraints que las referencian sean definidas con la opción de
DELETE CASCADE. Lo cual es peligroso, porque puede propagar un
borrado de un único registro al borrado de miles de registros en
diversas tablas.

www.ibeltran.com.ar Analista de Sistemas


UNIDAD 5
Borrado en cascada:

Ejemplo:

Supongamos que la tabla empleados se creó como:

CREATE TABLE EMPLEADOS (


Id int (3) not null, ...
Ofic int (3) CONSTRAINT oficinas_fk_ofic FOREIGN KEY
REFERENCES oficinas (id_ofic) ON DELETE CASCADE);

www.ibeltran.com.ar Analista de Sistemas


UNIDAD 5
Borrado en cascada:

Lo que gráficamente sería:

Oficinas Empleados
ID_Ofic Descr_Ofic ID_Emp Nombre Apellido Id_Ofic

10 Operaciones 1 Juan Pérez 10

15 Sistemas 2 Ana García 15

20 Contaduría 3 Luis Gonzalez 10

4 María Gómez 10

Si se ejecuta el comando:
DELETE FROM oficinas WHERE id_ofic = 10;
www.ibeltran.com.ar Analista de Sistemas
UNIDAD 5
No sólo se borrará un registro de la tabla de oficinas, sino que
también se borrarán tres registros de la tabla empleados, y así
sucesivamente si todas las FK que referencien a la tabla oficinas
en otras tablas están definidas como ON DELETE CASCADE, y lo
mismo para la tabla empleados, etc.

Agregando Constraints

Una constraint puede ser agregada a una tabla que ya está creada,
para ello se debe usar el comando ALTER TABLE.

www.ibeltran.com.ar Analista de Sistemas


UNIDAD 5
Ejemplo:

ALTER TABLE Empleados


ADD (CONSTRAINT s_emp_pk_id PRIMARY KEY (id_emp),
CONSTRAINT s_emp_ck_salario CHECK (salario > 500));

Deshabilitando / Habilitando constraints:

El control establecido por las constraints puede ser habilitado o


deshabilitado.

www.ibeltran.com.ar Analista de Sistemas


UNIDAD 5
Constraints deshabilitadas:

Cuando una constraint es deshabilitada (disable), la constraint no


seguirá siendo controlada.
Una constraint puede ser deshabilitada para cargar grandes
volúmenes de filas, o para exportar/importar una tabla más
rápidamente.
La sintáxis para deshabilitar una constraint es:

ALTER TABLE tabla DISABLE UNIQUE (columna, columna)


PRIMARY KEY
CONSTRAINT nombre_constraint
www.ibeltran.com.ar Analista de Sistemas
UNIDAD 5
Constraints habilitadas:
Cuando una constraint es habilitada (enable):
La constraint empezará a ser controlada para los futuros
INSERT/UPDATE.
Todos los registros actuales de la tabla se controlarán para ver si
cumplen con la constraint.
La tabla es bloqueada hasta que el control sea realizado.
Si una excepción es encontrada, la constraint no es habilitada.
La sintáxis para habilitar una constraint es:
ALTER TABLE tabla ENABLE UNIQUE (columna, columna)
PRIMARY KEY
CONSTRAINT nombre_constraint
www.ibeltran.com.ar Analista de Sistemas
UNIDAD 5
Borrando constraints:

Para borrar una constraint se debe utilizar el comando ALTER


TABLE.

ALTER TABLE tabla DROP UNIQUE (columna, columna)


PRIMARY KEY
CONSTRAINT nombre_constraint

www.ibeltran.com.ar Analista de Sistemas


UNIDAD 5
INTEGRIDAD - LOS DISPARADORES
Los disparadores, son instrucciones que el sistema ejecuta
automáticamente como efecto colateral de una modificación de la
base de datos. Los disparadores se usan para asegurar algunos
tipos de integridad.
Para diseñar un mecanismo disparador hay que cumplir dos
requisitos:

1. Especificar las condiciones en las que se va a ejecutar el


disparador. Esto se descompone en un evento que causa la
comprobación del disparador y una condición que se debe cumplir
para ejecutar el disparador.
www.ibeltran.com.ar Analista de Sistemas
UNIDAD 5
INTEGRIDAD - LOS DISPARADORES
2. Especificar las acciones que se van a realizar cuando se ejecute
el disparador.
Este modelo de disparadores se denomina
modelo evento- condición-acción.
La base de datos almacena disparadores como si fuesen datos
normales, por lo que son persistentes y accesibles para todas las
operaciones de la base de datos.
Una vez que se almacena un disparador en la base de datos, el
sistema de base de datos asume la responsabilidad de ejecutarlo
cada vez que ocurra el evento especificado y se satisfaga la
condición correspondiente.
www.ibeltran.com.ar Analista de Sistemas
UNIDAD 5
INTEGRIDAD - LOS DISPARADORES
Los disparadores son mecanismos útiles para alertar a los usuarios
o para realizar de manera automática ciertas tareas cuando se
cumplen determinadas condiciones.

Ej.: En lugar de permitir saldos de cuenta negativos, el banco trata


los descubiertos dejando a cero el saldo de las cuentas y creando
un préstamo por el importe del descubierto.
Este préstamo recibe un número de préstamo idéntico al número
de cuenta que ha tenido el descubierto.

www.ibeltran.com.ar Analista de Sistemas


UNIDAD 5
INTEGRIDAD - LOS DISPARADORES
En este ejemplo la condición para ejecutar el disparador es
una actualización de la relación cuenta que dé lugar a un valor
negativo de saldo.
Suponiendo que Santos retiró cierta cantidad de dinero de una
cuenta que dio lugar a que el saldo de la cuenta fuera negativo.

Nota: t denota la tupla de la cuenta con un valor negativo de


saldo.

Las acciones que hay que emprender son las siguientes:

www.ibeltran.com.ar Analista de Sistemas


UNIDAD 5
INTEGRIDAD - LOS DISPARADORES
• Insertar una nueva tupla s a la relación préstamo con
s[nombre-sucursal] = t[nombre-sucursal]
s[número-préstamo] = t[número-cuenta]
s[importe] = – t[saldo]

(Obsérvese que, dado que t[saldo] es negativo, hay que cambiar el


signo de t[saldo] para obtener el importe del préstamo – un
número positivo).

www.ibeltran.com.ar Analista de Sistemas


UNIDAD 5
INTEGRIDAD - LOS DISPARADORES
• Insertar una nueva tupla u a la relación prestatario con
u[nombre-cliente] = «Santos»
u[número-préstamo] = t[número-cuenta]

• Hacer que t[saldo] sea 0.

www.ibeltran.com.ar Analista de Sistemas


UNIDAD 5
INTEGRIDAD - LOS DISPARADORES

Los sistemas de bases de datos SQL usan ampliamente los


disparadores, aunque antes de SQL:1999 no fueron parte de la
norma.
Por desgracia, cada sistema de bases de datos implementó su
propia sintaxis para los disparadores, conduciendo a
incompatibilidades.

www.ibeltran.com.ar Analista de Sistemas


UNIDAD 5
INTEGRIDAD - LOS DISPARADORES
Ejemplo de la sintaxis de SQL:1999 para los disparadores.
create trigger descubierto after update on cuenta
referencing new row as nfila
for each row
when nfila.saldo < 0
begin atomic
insert into prestatario
(select nombre-cliente, número-cuenta
from impositor
where nfila.número-cuenta = impositor.número-cuenta);
insert into préstamo values (nfila.número-cuenta, nfila.nombre-sucursal, – nfila.saldo)
update cuenta set saldo = 0
where cuenta.número-cuenta = nfila.número-cuenta
end

www.ibeltran.com.ar Analista de Sistemas


UNIDAD 5
INTEGRIDAD - LOS DISPARADORES
Esta definición de disparador especifica que el disparador se inicia
después (after) de cualquier actualización de la relación cuenta.
Una instrucción de actualización SQL podría actualizar múltiples
tuplas de la relación, y la cláusula for each row en el código del
disparador se iteraría explícitamente por cada fila actualizada.
La cláusula referencing new row as crea una variable nfila
(denominada variable de transición) que almacena el valor de una
fila actualizada después de la actualización.
La instrucción when especifica una condición, en este caso
nfila.saldo < 0.

www.ibeltran.com.ar Analista de Sistemas


UNIDAD 5
INTEGRIDAD - LOS DISPARADORES
El sistema ejecuta el resto del cuerpo del disparador sólo para las
tuplas que satisfacen la condición.
La cláusula begin atomic …end sirve para encuadrar varias
instrucciones SQL en una única instrucción compuesta.
Las dos instrucciones insert en la estructura begin … end realizan
las tareas específicas para la creación de nuevas tuplas en las
relaciones prestatario y préstamo para representar el nuevo
préstamo.
La instrucción update sirve para establecer en 0 el saldo de la
cuenta.

www.ibeltran.com.ar Analista de Sistemas


UNIDAD 5
INTEGRIDAD - LOS DISPARADORES
El evento del disparador puede tener varias formas:

-El evento del disparador puede ser insert o delete en lugar de


update.

-Para las actualizaciones el disparador puede especificar columnas


cuya actualización cause la ejecución del disparador.
Ej.: create trigger descubierto after update of saldo on cuenta
el disparador se ejecutaría sólo cuando se actualizase saldo; las
actualizaciones del resto de atributos no causarían su ejecución.

www.ibeltran.com.ar Analista de Sistemas


UNIDAD 5
INTEGRIDAD - LOS DISPARADORES
El evento del disparador puede tener varias formas:

-La cláusula referencing old row as se puede usar para crear una
variable que almacene el valor anterior de una fila actualizada o
borrada.

-Los disparadores se pueden activar antes (before) del evento


(insert/delete/update) en lugar de después (after) del evento.

www.ibeltran.com.ar Analista de Sistemas


UNIDAD 5
Ejercicio:
Dadas las siguientes tablas:
Empleados (cod_emp, nombre,apellido,tipo_doc, num_doc,
categoria, cod_ofic)
Oficinas (cod_ofic, descripción)
Crear las siguientes reglas de integridad:
• La columna cod_emp debe ser clave primaria.
• La columna cod_emp debe tener valores entre 100 y 1000.
• Las columnas tipo_doc y num_doc deben contener valores no
repetidos (únicos).
• La columna Categoria debe contener algunos de los siguientes
valores: Senior, Semi Senior, Junior.
• La columna cod_ofic debe tener valores que existan en Oficinas
www.ibeltran.com.ar Analista de Sistemas

También podría gustarte