Universidad Nacional del Sur – Departamento de Ciencias e Ingeniería de la Computación Elementos de Bases de Datos – 2do. Cuatrimestre de 2004 Integridad en los datos Elementos de Bases de Datos Entre las ventajas de mantener la información con un Sistema de Manejo Base de Datos (DBMS) está la posibilidad de garantizar integridad de datos. Ejemplo: para la relación Cuentas, deseamos poder asegurar que su saldo nunca se inferior a los 300$. Dpto.Ciencias e Ingeniería de la Computación Universidad Nacional del Sur Lic. María Mercedes Vitturini [mvitturi@cs.uns.edu.ar] Clase 14 1er. Cuatrimestre de 2004 Elementos de Bases de Datos Clase 14 Ligaduras de Integridad Ligaduras de integridad Proporcionan un medio para asegurar que las actualizaciones hechas sobre la base de datos mantengan la consistencia de los datos. Los sistemas de manejo de bases de datos (DBMS) proveen diversos mecanismos para implementar ligaduras de integridad. Elementos de Bases de Datos Clase 14 3 Otras formas de ligadura Mecanismos para asegurar integridad vistos: Claves: el conjunto de instancias legales queda restringido a que dos tuplas no pueden compartir la misma clave. Multiplicidad de una relación (1-1, m-1, etc): restringe el conjunto de relaciones legales entre entidades. Dependencias funcionales: juegan un rol determinante en el diseño de las bases de datos relacionales. Elementos de Bases de Datos Clase 14 4 Ligaduras de dominio 1. Ligaduras de dominio: permiten restringir a cada atributo a un dominio de valores posibles. 2. Ligaduras de integridad referencial: permiten asegurar que el valor que aparece en una relación para un conjunto de atributos sea miembro también en otra relación para cierto conjunto de atributos. 3. Disparardores o triggers: es una orden que ejecuta el sistema como efecto de una actualización. Elementos de Bases de Datos Clase 14 2 5 Son las de implementación más simple. Restringen cada atributo a un dominio de valores posibles. La restricción puede incluir no aceptar valores nulos. Es posible que varios atributos de la misma relación o de distintas relaciones tengan el mismo dominio asociado. Gran parte de los sistemas relacionales actuales tienen un número reducido de tipos de dominio. Elementos de Bases de Datos Clase 14 6 1 Universidad Nacional del Sur – Departamento de Ciencias e Ingeniería de la Computación Elementos de Bases de Datos – 2do. Cuatrimestre de 2004 Ligaduras de dominio Integridad Referencial La clausula check en SQL provee facilidades para implementar nuevas restricciones de dominios. Ejemplo: una manera de asegurar que todas las cuentas tengan saldo mínimo de 300 $ podría ser: CREATE TABLE Cuentas ( ... ctasaldo DECIMAL, ... CONSTRAINT ch_ctasaldo CHECK (ctasaldo>=300.00), Elementos de Bases de Datos ...); Clase 14 7 Integridad Referencial Cursa (aluLU, matCódigo) Materias (matCódigo, matNombre). De cursa|><| materias, se espera que toda tupla de cursa haga join con alguna de las materias de la relación materias. Por otra lado, no habría problemas en que alguna tupla de materias no haga join con ninguna tupla de cursa. Elementos de Bases de Datos Clase 14 8 Observar que la definición de clave foránea en r2 referencia a la clave primaria de r1. 9 Elementos de Bases de Datos Clase 14 10 Modificación de la Base de Datos Integridad Referencial E-R Si el esquema de base de datos relacional se obtiene a partir del E-R, entonces podemos asegurar que cada esquema de relación que proviene de un conjunto de relaciones tendrá referencias foráneas a las entidades. Lo mismo ocurre con los conjuntos de entidades débiles con relación al conjunto de entidades fuertes del que depende. Elementos de Bases de Datos Clase 14 Formalmente, sean r1(R1) y r2(R2) dos relaciones con claves primarias K1 y K2 respectivamente. Se dice que un subconjunto α de R2 es una clave foránea que hace referencia a K1 de la relación r1 si se exige que para cada t2 de r2 haya una tupla t1 de r1 tal que t1[K1]=t2[α]. El atributo matCódigo de Cursa tiene definida una “clave foránea” hacia Materias, indicando que toda materia de Cursa referencia a alguna materia de la relación Materias. Por otra parte, el atributo matCódigo de Materias NO tiene definida una “clave foránea” hacia Cursa. Elementos de Bases de Datos Clase 14 Ejemplo: dadas las relaciones Clave Foránea En el ejemplo se dice que: Dadas las relaciones r(R) y s(S) y la operación r|><|s. Puede darse que una tupla t de r que no haga join con ninguna tupla de s. Esta tupla se denomina colgante. Hay situaciones en que no se permiten tuplas colgantes. 11 Dadas dos relaciones r1 y r2, r2 con una referencia foránea hacia r1. El sistema realiza la siguiente comprobación para asegurar que se cumpla la restricción de integridad referencial: Πα (r2) ⊆ ΠK (r1) Elementos de Bases de Datos Clase 14 12 2 Universidad Nacional del Sur – Departamento de Ciencias e Ingeniería de la Computación Elementos de Bases de Datos – 2do. Cuatrimestre de 2004 Controles al modificar la base de datos Reglas de Integridad en SQL Insertar en r2 Si se inserta una tupla t2 en r2, el sistema debe asegurar que existe una tupla t1 en r1 tal que t1[K] = t2[α]. Borrar en r1 Si se borra una tupla t1 en r1, el sistema debe calcular el conjunto de tuplas de r2 que hacen referencia a r1 Elementos de Bases de Datos Clase 14 Un disparador es una orden que el sistema ejecuta automáticamente como efecto secundario a una modificación de la base de datos. En un disparador se deben especificar: 15 Elementos de Bases de Datos Clase 14 16 Constituyen eventos la ejecución de una instrucción SQL de INSERT, UPDATE o DELETE. ON evento IF precondición THEN acción En base a este concepto simple es posible plantear diferentes alternativas: Una precondición cualquier condición permitida en un WHERE. Cuándo evaluar la condición. Cuándo ejecutar las acciones. Granularidad del cambio. El comportamiento será diferente de acuerdo con la alternativa elegida. Según las necesidades de la aplicación se deberá elegir la configuración más apropiada. Elementos de Bases de Datos Clase 14 Condiciones en las que se va a ejecutar el disparador. Acciones que se van a realizar cuando se ejecute el disparador. Triggers en SQL La estructura de un trigger puede definirse como: 14 Triggers o Disparadores Triggers o Disparadores PRIMARY KEY: para definir la clave primaria. UNIQUE: para definir claves candidatas distintas a la primaria. FOREIGN KEY: para definir claves foráneas. Elementos de Bases de Datos Clase 14 13 CREATE TABLE atenciones ( at_numero integer NOT NULL, pa_numero integer NOT NULL, me_matricula integer NOT NULL, at_fecha date, PRIMARY KEY (at_número) CONSTRAINT pk_atenciones, FOREIGN KEY (me_matricula) REFERENCES medicos CONSTRAINT fk_at_medicos, FOREIGN KEY (pa_numero) REFERENCES pacientes CONSTRAINT fk_at_pacientes ); Ejemplo: restricciones de integridad en la definición de una tabla Elementos de Bases de Datos Clase 14 La definición de claves forma parte del LDD. La instrucción SQL CREATE TABLE incluye facilidades para: 17 Una acción una consulta SQL, DELETE, INSERT, UPDATE, ROLLBACK, SIGNAL, o la ejecución de un programa SQL (Store Procedure). Elementos de Bases de Datos Clase 14 18 3 Universidad Nacional del Sur – Departamento de Ciencias e Ingeniería de la Computación Elementos de Bases de Datos – 2do. Cuatrimestre de 2004 Ejemplo En SQl Supongamos que no se deben permitir saldos en las cuentas negativos. En caso de un descubierto, esto es la cuenta queda con saldo negativo, la manera de proceder sería la siguiente: Dejar el saldo de la cuenta en 0 Crear un nuevo registro en préstamos por la diferencia. Elementos de Bases de Datos Clase 14 19 Observaciones Otro mecanismo para incorporar controles es que los desarrolladores de programas de aplicación hagan cumplir ciertas ligaduras de integridad añadiendo código apropiado en distintos puntos de control de la aplicación. La desventaja de este último mecanismo es que cuando cambian las reglas se deben modificar los programas. 21 SQL en los programas de aplicación Interface a nivel de sentencia (StatementLavel Interface SLI). SQL embebido. SQL dinámico. Interface a nivel de llamado (Call-Lavel Interface CLI) Elementos de Bases de Datos Clase 14 20 Los programas de aplicación involucran una mezcla de sentencias SQL y lenguaje convencional. Las sentencias SQL son las que permiten al programa acceder a la base de datos. El lenguaje convencional, se denomina lenguaje propietario o lenguaje host, y provee las características que no están disponibles en SQL. Elementos de Bases de Datos Clase 14 22 Constructores SQL con SLI Los constructores de SQL se pueden incluir en un programa de aplicación de diferentes maneras: Elementos de Bases de Datos Clase 14 SQL en el mundo real Las ligaduras impuestas en la base de datos siempre se van a controlar. Elementos de Bases de Datos Clase 14 DEFINE TRIGGER descubierto ON UPDATE OF cuenta T IF NEW T.saldo < 0 THEN ( INSERT INTO prestamos VALUES (T.nombre-suc, T.nro-cta, -NEW T.saldo) INSERT INTO prestatario (SELECT nombre-cli, nro-cta FROM impositor WHERE T.nro-cta, depositario.nro-cta) UPDATE cuenta S SET s.saldo= 0 WHERE s.nro-cta = T.nro-cta)) 23 El programa es una combinación de sentencias en dos lenguajes: el lenguaje propietario y las nuevas sentencias SQL. Antes de compilar el programa por el lenguaje propietario, los constructores SQL deben ser procesados por un precompilador, que traslada los constructores a llamadas a procedimientos del lenguaje propietario. Elementos de Bases de Datos Clase 14 24 4 Universidad Nacional del Sur – Departamento de Ciencias e Ingeniería de la Computación Elementos de Bases de Datos – 2do. Cuatrimestre de 2004 Aplicación C con sentencias SQL Constructores SQL con SLI prog.pc SQL embebido: son sentencias SQL ordinarias, (SELECT, INSERT). Precompilador prog.c Compilador C prog.o ejecutable Cargador ... EXEC SQL SELECT C.nroAlumno INTO :qnro_alumno FROM curso C WHERE C.CodCurso=:vcod_curso Librerías SQL Elementos de Bases de Datos Clase 14 26 Constructores SQL con CLI SQL dinámico: son directivas para ejecutar SQL. Las sentencias SQL aparecen en el programa como valores de variables de tipo cadena que son construidas por el lenguaje propietario en tiempo de ejecución. ...Printf (“Qué datos de curso desea ver ?”); scanf(“%s”, colum) // El usuario ingresa un campo sprintf (my_sql_stmt, “SELECT C.%s FROM Curso C \ WHERE C.CodCurso=?”) EXEC SQL PREPARE st1 FROM :my_sql_stmt EXEC SQL EXECUTE st1 INTO :var1 USING :vcod_curso Elementos de Bases de Datos Clase 14 Elementos de Bases de Datos Clase 14 25 Constructores SQL con SLI Requiere conocimiento previo del esquema de base de datos. Las sentencias SQL son precedidas EXEC SQL. Las aplicaciones son dependientes de la base de datos para la que fueron desarrolladas. ODBS (Open Database Conectivity) es una API al DBMS que provee una interface a nivel de llamado para la ejecución de sentencias SQL. Se trabajo en la especificación de una interface a nivel de llamada, conocida como especificación SQL/CLI. Las sentencias se pueden construir en tiempo de ejecución. Elementos de Bases de Datos Clase 14 27 Ejemplo 28 Temas de la clase de hoy A continuación se muestra un patrón de llamadas a procedimientos necesarios para establecer una conexión ODBC en un programa C. Restricciones de integridad. Representación en SQL SQLAllocEnv (&henv); SQLAllocConnect (henv, &hdbc); SQLConnect (hdbc, database_name, userid, passwd); SQLAllocStmt (hdbc, &hstmt); SQLExecDirect (hstmt, ...sentencias SQL ....); .. Procesar resultados ... SQL FreeStmt (hstmt, fOption); SQLDisconnect (hdbc); SQLFreeConnect (hdbc); SQLFreeEnv(henv); Elementos de Bases de Datos Clase 14 Integridad de Claves. Integridad de Dominios. Integridad Referencial. Disparadores. Combinando SQL con lenguajes de programación. Constructores A nivel de sentencia (SLI). A nivel de llamado (CLI). Bibliografía 29 “Fundamentos de Bases de Datos” – A. Silberschatz. Capítulo 6. Databases and Transaction Procesing - Philip Lewis. Capítulo 10. Elementos de Bases de Datos Clase 14 30 5