Restricciones de Integridad



Documentos relacionados
Lenguaje para descripción de datos

TEMA 6: MODIFICACIÓN DE LA BASE DE DATOS EN SQL

1. DML. Las subconsultas

A.1. Definiciones de datos en SQL

Unidad III: Lenguaje de manipulación de datos (DML) 3.1 Inserción, eliminación y modificación de registros

- Bases de Datos - - Diseño Físico - Luis D. García

LAS SUBCONSULTAS SQL SERVER Manual de Referencia para usuarios. Salomón Ccance CCANCE WEBSITE

El usuario puede utilizar esta tabla derivada como una tabla más, en sus consultas.

Unidad 2 Lenguaje de Definición de Datos (DDL) 2.1 Creación de base de datos. 2.2 Creación de tablas.

Aplicaciones de las vistas Concepto de vista Vistas en SQL Vistas en SQL.

SINTAXIS DE SQL-92. <definición de esquema >::= CREATE SCHEMA <cláusula de nombre de esquema> [ <elemento de esquema>... ]

Restricciones (constraints) FOREIGN KEY

FICHEROS Y BASES DE DATOS (E44) 3º INGENIERÍA EN INFORMÁTICA. Tema 9. Reglas de Integridad

Consultas con combinaciones

Bases de Datos SQL 1 SQL. Jorge Pérez R. Universidad de Talca, II Semestre 2006

MANUAL BÁSICO DEL LENGUAJE SQL

Integridad y Seguridad. Integridad y Seguridad. Restricción de Dominio. Protección. Índice. create domain. Dominios

T12 Vistas y tablas temporales

Base de Datos Práctica 1.

El Lenguaje SQL TEMA V. Grupo de Bas ses de Datos Avanzadas Univ. Carlo os III de Madrid. V.1 SQL como Lenguaje de Definición de Datos

BASE DE DATOS - CURSO 02/03 PRÁCTICA 2: SQL: Lenguaje de definición de datos (DDL)

Diseño de bases de datos

Práctica 3. Consultas SQL

Sub consultas avanzadas

1. Introducción: Qué es un Modelo de Datos? 2. Estática del modelo de datos relacional

SQL (Structured Query Language)

Oracle Básico PL/SQL

Maestría en Bioinformática. Bases de Datos y Sistemas de Información. Diseño Lógico. Ing. Alfonso Vicente, PMP alfonso.vicente@logos.com.

OPTIMIZACIÓN DE CONSULTAS EN SQL. Análisis de Consultas y Transacciones Ajuste de Indices Ajuste de Consultas

m047a Curso Programando una Base de Datos SQL Server 2008, 36 h Creación B.D. y Constraints

Trabajos de Ampliación. Bases de datos NoSQL.

Integridad en sistemas de bases de datos relacionales

Álgebra Relacional. Dra. Amparo López Gaona () Posgrado en Ciencia e Ingeniería de la Compu. Fac. Ciencias, UNAM / 1

Bases de Datos: Structured Query Language (SQL)

SQL. Orígenes y Evolución

Bases de Datos 2. Teórico

UNIVERSIDAD DEL ISTMO CAMPUS IXTEPEC LIC. INFORMATICA GRUPO 508 PROCEDIMIENTOS ALMACENADOS EN SQL SERVER 2000

ÍNDICE. Introducción... Capítulo 1. Novedades de Access

5- Uso de sentencias avanzadas

Tema 6. Restricciones a la Base de Datos: Integridad y seguridad

Bases de datos relacionales y el modelo entidad-relación

SQL (Structured Query Language)- DML

Structured Query Language (SQL) Fundamentos de Bases de Datos InCo

6. Integridad en Sistemas de Bases de Datos Relacionales

Operaciones en el Modelo Relacional. Relacional. Relacional. Índice. Lenguajes de Consulta

SQLModificaciones a la BD

LENGUAJE DE CONSULTA ESTRUCTURADO - SQL CONTENIDO

Unidad. Lenguaje SQL. (Structured Query Language)

Tema 4. Manipulación de datos con SQL

Tema 4. SQL. Juan Ignacio Rodríguez de León

Boletín de Problemas de la Asignatura II18 Bases de Datos. Ingeniería Informática Universitat Jaume I

Capítulo 12: Indexación y asociación

UNIVERSIDAD NACIONAL DE SAN AGUSTÍN FACULTAD DE PRODUCCIÓN Y SERVICIOS ESCUELA PROFESIONAL DE INGENIERÍA DE SISTEMAS LABORATORIO DE BASES DE DATOS 1

UNIDAD 1.- PARTE 1 MANIPULACIÓN AVANZADA DE DATOS CON SQL. BASES DE DATOS PARA APLICACIONES. Xochitl Clemente Parra Armando Méndez Morales

CONSULTAS DE RESUMEN SQL SERVER Manual de Referencia para usuarios. Salomón Ccance CCANCE WEBSITE

COMANDOS DE SQL, OPERADORES, CLAUSULAS Y CONSULTAS SIMPLES DE SELECCIÓN

FICHEROS Y BASES DE DATOS (E44) 3º INGENIERÍA EN INFORMÁTICA. Tema 8. Elementos Básicos

CONSULTAS BASICAS EN SQL SERVER

6- Combinación de tablas

Dependiendo de las tareas, podemos clasificar las sentencias SQL en dos tipos:

CONSULTAS CON SQL. 3. Hacer clic sobre el botón Nuevo de la ventana de la base de datos. Aparecerá el siguiente cuadro de diálogo.

APUNTES: APLICACIONES WEB BASADAS EN PHP Y MYSQL Página 1 de 5

Estándar de desarrollo de aplicaciones del Govern de les Illes Balears

CURSO DE SQL SERVER 2005

Formato para prácticas de laboratorio

EJERCICIO SOBRE EMPRESA DE MATERIALES DE CONSTRUCCIÓN

Formato para prácticas de laboratorio

Lenguaje de Consulta Estructurado S Q. Lenguaje de Consulta Estructurado. Wael Najjar /

BASE DE DATOS QUÉ ES UNA BASE DE DATOS?

: COMPUTACIÓN E INFORMATICA : Ingeniería de Software Ingeniería de Redes y Comunicaciones : Administración de Bases de Datos I : T-INF127

Un ejemplo teórico de trigger podría ser éste:

Tema 4. Lenguajes de consulta comerciales

4- Uso de sentencias para el envió y extracción de datos

Base de datos I Facultad de Ingeniería. Escuela de computación.

Constraints (Restricciones) Copyright Oracle Corporation, All rights reserved.

BASES DE DATOS TEMA 4. SQL. UN LENGUAJE DE CONSULTA COMERCIAL PARA BASES DE DATOS RELACIONALES Contenidos generales

PRACTICA DE ADMINISTRACION DE BASES DE DATOS

Haga clic para PostgreS cambiar el estilo

GUIA DE LABORATORIO N 9 B. (000Webhost Php- Para desarrollar en casa)

EL ENTORNO DE TRABAJO SQL ORACLE

Las restricciones de integridad proporcionan un medio de asegurar que las modificaciones

Base de datos relacional

Bases de Datos SQL 1 SQL. Jorge Pérez R. Universidad de Talca, II Semestre 2006

Tema 3 Modelo relacional

4 Integridad de datos relacional: llaves candidatas y temas relacionados.

EXPLOTACIÓN DE BASES DE DATOS CON ACCESS

Acceso a bases de datos MySQL con PHP

SQL. (...la guía básica de supervivencia de dmi) Universidad de los Andes Demián Gutierrez Enero

FIREBIRD: LENGUAJE DE DEFINICIÓN DE DATOS

8 SQL SERVER 2008 RA-MA

EXAMEN TEMAS 3, 4 y 5. CREACIÓN Y EXPLOTACIÓN DE UNA BASE DE DATOS

INTRODUCCIÓN INTRODUCCIÓN INTRODUCCIÓN INTRODUCCIÓN INSTRUCCIONES DE DEFINICIÓN DE TABLAS E ÍNDICES INSTRUCCIONES DE DEFINICIÓN DE TABLAS E ÍNDICES

Grupo Kybele, Pág. 1

OPERACIONES FUNDAMENTALES DEL ÁLGEBRA RELACIONAL. Bases de Datos Ingeniería de Sistemas y Computación Universidad Nacional de Colombia 2007

Vistas en postgresql

Permite definir cada relación que pertenece a la base de datos relacional, incluyendo:

ESCUELA DE CIENCIAS BASICAS TECNOLOGIA E INGENIERIA Programación de sitios web Act 11: Reconocimiento de la unidad 3

SQL Server FEMEPA SQL Server 2000

[ EDICION ESPECIAL] En el siguiente ejemplo se agrega un archivo de datos de 5 MB a la base de datos BD_Ejemplo01.

Transcripción:

Restricciones de Integridad Amparo López Gaona México, D.F. Semestre 2000-I

Restricciones de Integridad Las principales restricciones de integridad que pueden indicarse son: La clave primaria. Claves candidatas. Claves externas. Valores no nulos. Verificación de cierta condición. c Amparo López Gaona, 2003 Transparencia No. 1

Claves Primarias Existen dos formas de definir una clave primaria al crear una tabla: Al definir el elemento especificar que será clave primaria: CREATE TABLE persona ( nombre CHAR(30) PRIMARY KEY, dir VARCHAR(200), sexo CHAR(1), fechanac DATE ); Agregar una declaración al final de la lista de atributos. CREATE TABLE persona ( nombre CHAR(30), dir VARCHAR(200), sexo CHAR(1), fechanac DATE, PRIMARY KEY (nombre) ); c Amparo López Gaona, 2003 Transparencia No. 2

Otra forma de definir claves es usando la palabra UNIQUE. Esta puede aparecer todas las veces que se desee. CREATE TABLE persona ( nombre CHAR(30) PRIMARY KEY, dir VARCHAR(200), teléfono CHAR(8) UNIQUE, sexo CHAR(1), fechanac DATE ); c Amparo López Gaona, 2003 Transparencia No. 3

Índices Un índice sobre un atributo A es una estructura de datos para hacer eficiente la localización de tuplas cuando se hacen búsquedas sobre un atributo. SELECT * FROM sucursal WHERE ciudad = Villahermosa AND activo >= xxx; CREATE INDEX nombre índice ON tabla(atributos) Se crea un índice con el nombre dado, con el cual las consultas que involucran a esos atributos se verán reducidas en el tiempo que requieren para contestarla. Ventaja. Se agilizan las consultas. Desventajas: Crear y mantener un índice toma tiempo y espacio sobre la BD. Se complican las inserciones, supresiones y actualizaciones de tuplas. c Amparo López Gaona, 2003 Transparencia No. 4

Es normal declarar índices sobre las claves o atributos únicos. CREATE INDEX IndNombre ON persona(nombre); CREATE UNIQUE INDEX IndTel ON persona(teléfono); Aunque es tarea difícil, se presentan una guías para crear índices: Las columnas que forman clave. Las columnas que con frecuencia se usan en joins. Las columnas que con frecuencia se usan en orden. Los índices no son útiles en: Columnas que rara vez se consultan sus valores. Columnas que tienen un dominio muy limitado. Ejemplo: sexo. Tablas pequeñas. DROP INDEX nombre índice c Amparo López Gaona, 2003 Transparencia No. 5

Claves externas Hacer referencia en R1 a un atributo que es clave en otra relación R2 tiene como consecuencias: Los atributos referenciados de la segunda relación deben ser clave primaria. Cualquier valor de atributo en R1, debe aparecer en R2. Formas de declarar las claves externas: Si sólo tiene un atributo basta con terminar su declaración con REFERENCES tabla (atributo) donde el atributo es la clave en la tabla especificada. CREATE TABLE sucursal ( nombre_suc char(20) PRIMARY KEY, ciudad char(30), activo int); c Amparo López Gaona, 2003 Transparencia No. 6

CREATE TABLE cuenta ( nombre_suc char(20) REFERENCES sucursal (nombre_suc), num_cuenta DomCuenta PRIMARY KEY, saldo int); Especificarlo en la lista de restricciones. FOREIGN KEY atributos REFERENCES tabla (atributos) CREATE TABLE cuenta ( nombre_suc char(20); num_cuenta DomCuenta PRIMARY KEY, saldo int, FOREIGN KEY nombre_suc REFERENCES sucursal (nombre_suc)); Todo valor de nombre suc en cuenta debe estar en la relación sucursal. c Amparo López Gaona, 2003 Transparencia No. 7

Existen tres alternativas para mantener las claves externas: 1. Poĺıtica por omisión. Rechazar las modificaciones que signifiquen violación a la integridad referencial. Al tratar de insertar un nueva cuenta cuyo valor de sucursal no sea NULL y no esté en la relación sucursal. Al tratar de actualizar una cuenta cambiando el componente de la sucursal a uno no existente. Al tratar de borrar de sucursal una tupla cuyo valor aparezca en al menos una tupla de cuenta. Al tratar de actualizar una tupla de sucursal y se caiga en caso anterior. 2. Poĺıtica de cascada. Al suprimir una tupla cuyo valor sea referenciado desde otra relación, para mantener la integridad referencial se eliminan la tuplas referenciantes. Al actualizar el valor de una tupla en sucursal se actualizan las de cuenta. c Amparo López Gaona, 2003 Transparencia No. 8

3. Asignación de nulos. Al cambiar un valor en el nombre de la sucursal referenciada, se asigna NULL en las relaciones referenciantes. El usuario puede elegir de manera independiente que hacer: CREATE TABLE cuenta ( nombre_suc char(20); num_cuenta DomCuenta PRIMARY KEY, saldo int, FOREIGN KEY nombre_suc REFERENCES sucursal (nombre_suc) ON DELETE SET NULL ON UPDATE CASCADE); c Amparo López Gaona, 2003 Transparencia No. 9

Restricciones al valor de los atributos Restricciones de dominios para un atributo: Valores no nulos. Especificación de valores en la definición de un atributo. Especificación de valores en la definición del dominio. Restricciones sobre tuplas. Restricciones sobre relaciones. c Amparo López Gaona, 2003 Transparencia No. 10

Valores nulos Al insertar una tupla sin especificar todos los campos se introduce un valor NULL, a menos que haya un valor por omisión. Desconozco el valor de un atributo pero existe o existirá Si se desea evitar la inserción de nulos se debe especificar en la creación de la relación: CREATE TABLE persona ( nombre CHAR(30) PRIMARY KEY, dir VARCHAR(200), teléfono CHAR(8) NOT NULL ); No se puede no especificar el teléfono al insertar una tupla. No se puede modificar el teléfono a nulo. c Amparo López Gaona, 2003 Transparencia No. 11

Reglas importantes para tratar con los nulos. NULL no es una constante, por tanto no puede usarse como operando. Excepto: SELECT núm_préstamo FROM préstamo WHERE importe IS NULL; El resultado de una operación aritmética es nulo si cualquiera de los operandos es nulo. Las operaciones de agregación ignoran los valores nulos, con lo cual puede resultar vacía en cuyo caso devuelven nulo, excepto COUNT(*) que regresa cero. SELECT SUM(importe) FROM préstamo; Las operaciones lógicas que involucran nulos, lo consideran como falso, y da como resultado desconocido, lo cual no es cierto ni falso. c Amparo López Gaona, 2003 Transparencia No. 12

Reglas para el tratamiento de desconocidos en operaciones lógicas: x y x AND y x OR y NOT x true true true true false true false false true false false true false true true false false false false true true unknown unknown true false unknown true unknown true unknown false unknown false unknown true unknown false false unknown unknown unknown unknown unknown unknown unknown En la clausula WHERE se produce uno de estos tres valores pero sólo trabaja con las tuplas que producen verdadero. c Amparo López Gaona, 2003 Transparencia No. 13

SELECT * SELECT * FROM prestamo FROM prestamo; WHERE importe <= 10000 OR importe > 10000; Son distintos si hay al menos una tupla con importe = NULL c Amparo López Gaona, 2003 Transparencia No. 14

Restricciones basadas en un atributo CHECK (condición) La condición puede ser cualquiera que pueda aparecer en la clausula WHERE, es decir puede tener operadores lógicos, de comparación, LIKE, IN, BETWEEN, etc. Se verifica cada vez que se modifica el valor de ese atributo. Si no se cumple la condición se rechaza la modificación. Ejemplo: CREATE TABLE persona ( nombre CHAR(30), dir VARCHAR(200), teléfono CHAR(8) CHECK (teléfono LIKE 5------- ), sexo CHAR(1) CHECK (sexo IN ( F, M )) ); c Amparo López Gaona, 2003 Transparencia No. 15

Si se desea usar otros atributos o tuplas de la relación, o de otras relaciones, la condición debe ser una subconsulta. Estudio (nombe, dirección, curp_pres) Ejecutivo (nombre, dirección, curp, sueldo) CREATE TABLE Estudio ( nombre CHAR(40) PRIMARY KEY, dirección VARCHAR(255), sueldo INT, curp_pres INT CHECK (curp IN (SELECT curp FROM ejecutivo)) ) La validación es correcta y es como restricción de integridad referencial, excepto: la validación se realiza sólo al agregar/modificar una tupla de Estudio, no al suprimir una tupla de ejecutivo c Amparo López Gaona, 2003 Transparencia No. 16

Restricciones de dominio Es similar al punto anterior excepto que no se sabe cuál atributo tomará valores de ese dominio, en ese caso se escribe la palabra VALUE CREATE DOMAIN domsexo CHAR(1) CHECK (VALUE IN ( F, M )); sexo domsexo, CREATE DOMAIN domp INT CHECK ( VALUE >= 1000); c Amparo López Gaona, 2003 Transparencia No. 17

Restricciones globales Restricciones que involucran relación entre varios atributos o entre diferentes relaciones. Restricciones basadas en tupla. Afirmaciones (Assertions). c Amparo López Gaona, 2003 Transparencia No. 18

Restricciones basadas en tuplas Se especifican en la lista de restricciones. Sintaxis: CHECK (condición) pero la condición se puede referir a cualquier atributo de la relación. Se verifican cada vez que se pretende insertar/modificar una tupla de R. Si da falso se rechaza la operación. Ejemplo: Sólo el departamento de artículos de lujo puede tener artículos de más de $x.00 CREATE TABLE ventas ( departamento CHAR(30), articulo VARCHAR(200), precio REAL, CHECK (departamento = lujoso OR precio <= xxxx.00) ); c Amparo López Gaona, 2003 Transparencia No. 19

Afirmaciones Son condiciones que se desea se cumplan en toda la base de datos, no sólo en una relación. CREATE ASSERTION nombre CHECK condición; Se verifican cuando alguna de las relaciones mencionadas cambia. Al crear una afirmación, el sistema comprueba su validez. La comprobación puede introducir una sobrecarga importante. NO puede haber más sucursales que clientes. CREATE ASSERTION pocos CHECK ( (SELECT COUNT (*) FROM sucursal) <= (SELECT COUNT (*) FROM cliente) ); Se verifica cada vez que sucursal o cliente cambien. c Amparo López Gaona, 2003 Transparencia No. 20

La suma de los importes de los préstamos de cada sucursal debe ser menor que la suma de los saldos de cuentas de esa sucursal. CREATE ASSERTION suma_restringida CHECK (NOT EXISTS (SELECT * FROM sucursal WHERE (SELECT SUM(saldo) FROM cuenta WHERE cuenta.nombre_sucursal =sucursal.nombre_sucursal) >= (SELECT SUM(importe) FROM préstamo WHERE préstamo.nombre_sucursal=sucursal.nombre_sucursal) Se puede escribir como restricción dentro de sucursal, pero sólo se validaría al modificar esta tabla, pero no al modificar cuenta. c Amparo López Gaona, 2003 Transparencia No. 21

Verificar que la suma de los saldos por sucursal sea mayor que 10 millones de pesos. CREATE ASSERTION sumasaldo CHECK( 10000000 <= ALL (SELECT SUM(saldo) FROM préstamo GROUP BY nombre_sucursal); Esta involucra sólo a préstamo, así que podría haberse escrito como CHECK basado en tupla. La validación no se efectuaría al suprimir tuplas. c Amparo López Gaona, 2003 Transparencia No. 22

Comparación de restricciones Restricción Declaración Activación Garantizada? CHECK basado con el atributo inserción de tupla no, si hay en atributos modificación de atributo subconsultas CHECK basado elemento del esquema inserción de tupla no, si hay en tuplas de la relación modificación de tupla subconsultas ASSERTION elemento del esquema Al cambiar cualquier Sí de la base de datos relación mencionada c Amparo López Gaona, 2003 Transparencia No. 23

Modificación de restricciones 1. Asignar nombre a las restricciones. Se debe preceder la restricción por CONSTRAINT nombre de la restricción. nombre_suc CHAR(30) CONSTRAINT nombreclave PRIMARY KEY, saldo CHAR(1) CONSTRAINT saldopositivo CHECK (saldo >= 0), CREATE DOMAIN dominiocp INT CONSTRAINT seisdigitos CHECK (VALUE >= 1000000); CONSTRAINT xxxx CHECK (sexo f OR name like María % ) c Amparo López Gaona, 2003 Transparencia No. 24

2. Alterar restricciones ALTER TABLE Para agregar o eliminar columnas. ALTER DOMAIN Pasa cambiar el valor por omisión de un dominio. ALTER TABLE Para cambiar restricciones basadas en atributos y en tuplas. Ejemplos: ALTER TABLE sucursal DROP CONSTRAINT nombreclave; ALTER TABLE cuenta DROP CONSTRAINT saldopositivo; ALTER TABLE persona DROP CONSTRAINT dominiocp; ALTER TABLE persona DROP CONSTRAINT xxxx; ALTER TABLE sucursal ADD CONSTRAINT nombreclave PRIMARY KEY (nombre); c Amparo López Gaona, 2003 Transparencia No. 25

3. Alterar restricciones de dominio ALTER DOMAIN dominiox DROP CONSTRAINT restriccionx; ALTER DOMAIN dominiox ADD CONSTRAINT restriccionx CHECK (VALUE...) ; 4. Alterar afirmaciones DROP ASSERTION nombre; c Amparo López Gaona, 2003 Transparencia No. 26

Disparadores Un disparador (trigger) es una secuencia de acciones que el sistema ejecuta de manera automática como efecto secundario de una modificación a la BD. No son sólo utilizados para prevenir violaciones a las restricciones Para diseñar un disparador se debe: Especificar las condiciones en las que se va a ejecutar el disparador. Especificar las acciones que se van a realizar cuando se active el disparador. c Amparo López Gaona, 2003 Transparencia No. 27

Ejemplo. En lugar de tener saldos negativos, se hace un préstamo por el importe de dicho saldo. DEFINE TRIGGER descubierto ON UPDATE OF cuenta T (IF NEW T.saldo < 0 then ( INSERT INTO prestamo VALUES (T.nombre_sucursal, T.núm_cuenta, - new T.saldo) INSERT INTO prestatario (SELECT nombre_cliente, núm_cuenta FROM cta_cliente WHERE T.núm_cuenta = cta_cliente.núm_cuenta) UPDATE cuenta S SET S.saldo = 0 WHERE S.núm_cuenta = T.núm_cuenta)) c Amparo López Gaona, 2003 Transparencia No. 28