La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Departamento de Lenguajes y Sistemas Informáticos escuela técnica superior de ingeniería informática Diseño de Bases de Datos Tema 4: Integridad.

Presentaciones similares


Presentación del tema: "Departamento de Lenguajes y Sistemas Informáticos escuela técnica superior de ingeniería informática Diseño de Bases de Datos Tema 4: Integridad."— Transcripción de la presentación:

1 Departamento de Lenguajes y Sistemas Informáticos escuela técnica superior de ingeniería informática Diseño de Bases de Datos Tema 4: Integridad

2 2 Índice Conceptos generales Restricciones sobre Dominios Restricciones Generales Restricciones sobre una Tabla Base Definición de Clave Candidata Definición de Clave Ajena Restricciones con la cláusula Check Esquema SQL2 de ejemplo

3 3 Conceptos generales La problemática de integridad asegura que los estados de una BD sean consistentes: BD=I(BD) Restricción de integridad: “regla que restringe estados de la base de datos” Debe quedar definida en catálogos del sistema (Sysconstraints) Con un nombre (definido por el usuario o generado por el sistema) Deben verificarla los estados posteriores. Si los anteriores no la verifican no podrá activarse (será inválida).

4 4 Conceptos generales SQL2 (SQL-92 ISO) Niveles: Entry, Intermediate y Full Level Domain, Assertion aparecen en Intermediate Level Nivel ENTRY de versiones actuales (Oracle 11g, SQL*Server 2005). Los fabricantes retrasan la incorporación de niveles superiores forzados por la eficiencia de verificación de restricciones y competencia en el mercado. Sintaxis SQL2 para definir restricciones. Tres categorías de restricciones: Restricciones sobre dominios Restricciones generales Restricciones sobre una tabla base

5 5 Restricciones sobre Dominios Asociadas a un dominio específico y Aplicadas a cada columna definida sobre ese dominio Definición de Restricción sobre Dominios: CREATE DOMAIN nombre_dominio [AS] tipo_dato [valor_por_defecto] [lista_restricciones_dominio] La “[lista_restricciones_dominio]” es de esta forma: [CONSTRAINT nombre_restriccion] CHECK (expresión_condicional)

6 6 Restricciones sobre Dominios Ejemplo 1: “Dominio de ciudades de 15 caracteres y con la restricción de que sólo permite los valores: Roma, Madrid, Sevilla y Cádiz” CREATE DOMAIN ciudades CHAR(15) CONSTRAINT ciudades_permitidas CHECK (ciudades IN (‘Roma’, ‘Madrid’, ‘Sevilla’, ‘Cádiz’)); Nombre de la restricción sobre el dominio

7 7 Restricciones sobre Dominios Ejemplo 2: “Dominio de ciudades de 15 caracteres y con la restricción de que no pueda tomar valores nulos” CREATE DOMAIN ciudades CHAR(15) CHECK (ciudades IS NOT NULL);

8 8 Restricciones sobre Dominios Modificar la Definición de Restricción sobre Dominios: ALTER DOMAIN nombre_dominio ADD [lista_restricciones_dominio] | DROP CONSTRAINT nombre_restriccion ¿Y si no le asignamos un nombre?

9 9 Restricciones Generales Restricciones de mayor o menor complejidad sobre columnas de una o varias tablas. En las restricciones generales es necesario especificar un nombre al ser creadas. Definición de Restricciones Generales: CREATE ASSERTION nombre_restriccion CHECK (expresión_condicional)

10 10 Restricciones Generales Ejemplo 1: “Todo proveedor tiene un estado mayor o igual a 5” CREATE ASSERTION estado_proveedor CHECK ( NOT EXISTS (SELECT * FROM s WHERE estado < 4 ) ); Ejemplo 2: “Toda pieza tiene un peso positivo” CREATE ASSERTION peso_positivo CHECK ( NOT EXISTS (SELECT * FROM p WHERE peso < 0 ) );

11 11 Restricciones Generales Ejemplo 3: “Todas las piezas rojas tienen que estar almacenadas en Londres” CREATE ASSERTION piezas_rojas CHECK ( NOT EXISTS (SELECT * FROM p WHERE color = ‘rojo’ AND ciudad <> ‘Londres’) );

12 12 Restricciones Generales Ejemplo 4: “Ningún suministro puede tener un peso total (peso de la pieza multiplicado por la cantidad) superior a 20.000” CREATE ASSERTION peso_total_suministro CHECK ( NOT EXISTS (SELECT * FROM p, sp WHERE p.cod_p = sp.cod_p AND (p.peso*sp.cantidad) > 20.000) );

13 13 Restricciones Generales Ejemplo 5: “Ningún proveedor con estado menor que 20 puede suministrar una pieza en cantidad mayor que 500” CREATE ASSERTION proveedor_limitado CHECK ( NOT EXISTS (SELECT * FROM s WHERE estado < 20 AND EXISTS (SELECT * FROM sp WHERE sp.cod_s = s.cod_s AND cantidad > 500) ) );

14 14 Restricciones Generales Borrar una Restricción General: DROP ASSERTION nombre_dominio ¿Y si no le asignamos un nombre?

15 15 Restricciones sobre Tabla Base Asociadas a una tabla específica, pero pueden afectar a varias tablas (definición de claves ajenas). Al borrar la tabla base se borran automáticamente las restricciones asociadas. También pueden ser definidas mediante restricciones generales (assertions), excepto la restricción referencial al definir la clave ajena.

16 16 Restricciones sobre Tabla Base Se definen al crear la tabla. Al hacer un CREATE TABLE se pueden especificar: Definiciones de columnas. Restricciones sobre la tabla base:  Definición de clave candidata.  Definición de clave ajena.  Restricciones con la cláusula CHECK A estas restricciones se les puede asignar un nombre

17 17 Restricciones sobre Tabla Base Utilizando la instrucción ALTER TABLE podemos: Añadir restricciones con ADD Borrar restricciones con DROP Sintaxis general: ALTER TABLE nombre_tabla ADD CONSTRAINT nombre_restriccion restriccion | DROP CONSTRAINT nombre_restriccion restriccion Ejemplos: ALTER TABLE s ADD CONSTRAINT s_unq_nom_p UNIQUE (nom_p) … ALTER TABLE s DROP CONSTRAINT s_unq_nom_p

18 18 Restricciones sobre Tabla Base Definición de clave candidata. {PRIMARY KEY | UNIQUE} (columnas) UNIQUE: Se utiliza para claves alternativas. PRIMARY KEY: Se utiliza para definir la clave primaria. Las columnas definidas como clave primaria asumen de forma automática la restricción NOT NULL Definición alternativa de clave candidata mediante ASSERTIONS CREATE ASSERTION clave_candidata CHECK (UNIQUE (SELECT columnas FROM…))

19 19 Restricciones sobre Tabla Base Definición de clave ajena. FOREIGN KEY (columnas) definicion_referencia “definicion_referencia” es de la forma: REFERENCES tabla_base [(columnas)] [ON DELETE { NO ACTION | CASCADE | SET DEFAULT | SET NULL }] [ON UPDATE { NO ACTION | CASCADE | SET DEFAULT | SET NULL }]

20 20 Restricciones sobre Tabla Base Restricciones con la cláusula CHECK. CHECK (expresion_condicional) Las restricciones generales (assertions) pueden ser rescritas como restricciones con la cláusula CHECK. Ejemplo.- “NOT EXISTS x WHERE NOT y” Equivale a: “CHECK y”

21 21 Ejemplos Ejemplo 1:“Todo Proveedor tiene un estado mayor o igual de 5” CONSTRAINT estado CHECK (estado > 4); Ejemplo 2:“ Toda pieza tiene un peso que debe ser positivo ” CONSTRAINT peso CHECK (peso > 0); Ejemplo 3:“ Todas las piezas rojas tienen que estar almacenadas en Londres ” CONSTRAINT piezas_rojas_Londres CHECK (color <> ‘Rojo’ OR ciudad_p = ‘Londres’);

22 22 Ejemplos Ejemplo 4:“Ningún suministro puede tener un peso total (peso de la pieza por cantidad) superior a 20.000” CONSTRAINT peso_total CHECK (SP.cantidad * (SELECT p.peso FROM p WHERE p.cod_p = sp.cod_p) <= 20.000); Esta restricción debe ser especificada al crear la tabla SP

23 23 Ejemplos Ejemplo 5:“Ningún proveedor con estado menor que 20 puede suministrar una pieza en cantidad mayor de 500” CONSTRAINT limitacion_proveedor CHECK (SP.cantidad <= 500 OR (SELECT estado FROM s WHERE s.cod_s = sp.cod_s) <= 20); Esta restricción debe ser especificada al crear la tabla SP

24 24 Ejemplos (Esquema SQL2) TABLAS UTILIZADAS: Proveedor: S(cod_s, nom_s, ciudad_s, estado) Pk(cod_s) Piezas: P(cod_p, nom_p, ciudad_p, color, peso) Pk(cod_p) Suministro: SP(cod_s, cod_p, cantidad) Pk(cod_s, cod_p) Fk(cod_s)/S Fk(cod_p)/P

25 25 Ejemplos (Esquema SQL2) CREATE DOMAIN codigos CHAR(4) CHECK (codigos IS NOT NULL); CREATE DOMAIN nombres CHAR(20) CHECK (nombres IS NOT NULL); CREATE DOMAIN cantidades NUMBER(3); CREATE DOMAIN ciudades CHAR(15) CONSTRAINT ciudades_validas CHECK (ciudades IN (‘Roma’, ‘Madrid’, ‘Sevilla’, ‘Cádiz’)); CREATE DOMAIN colores CHAR(10);

26 26 Ejemplos (Esquema SQL2) CREATE TABLE s (cod_scodigos, nom_snombres UNIQUE, ciudad_sciudades, estadocantidades CONSTRAINT estado_limitado CHECK (estado > 4), PRIMARY KEY cod_s );

27 27 Ejemplos (Esquema SQL2) CREATE TABLE p (cod_pcodigos, nom_pnombres CONSTRAINT nombres_unicos UNIQUE, ciudad_pciudades, colorcolores CONSTRAINT colores_validos CHECK (colores IN (‘Blanco’,…)), pesocantidades DEFAULT 100, PRIMARY KEY cod_p );

28 28 Ejemplos (Esquema SQL2) CREATE TABLE sp (cod_scodigos, cod_pcodigos, cantidadcantidades NOT NULL), PRIMARY KEY (cod_s, cod_p), FOREIGN KEY (cod_s) REFERENCES s ON DELETE CASCADE, ON UPDATE CASCADE, FOREIGN KEY (cod_p) REFERENCES p ON DELETE CASCADE, ON UPDATE CASCADE );

29 29 SQL2 vs. ORACLE Integridad SQL2Integridad Oracle Dominios + Restricciones sobre Dominios x Restricciones GeneralesTRIGGERS Restricciones sobre Tabla Base Check sobre literales. No permite variables


Descargar ppt "Departamento de Lenguajes y Sistemas Informáticos escuela técnica superior de ingeniería informática Diseño de Bases de Datos Tema 4: Integridad."

Presentaciones similares


Anuncios Google