Sei sulla pagina 1di 53

BASE DE DATOS I

ESCUELA: NOMBRES: Ciencias de la Computacin Ing. Juan Carlos Morocho

BIMESTRE:
CICLO

I BIMESTRE
OCTUBRE 2009 FEBRERO 2010

Captulo 6
SQL: definicin de datos

Pearson Education Limited 1995, 2005

Tipos de datos SQL de ISO


Tabla 6.1. Tipos de datos SQL
Tipo de datos Declaraciones

booleano carcter bit

BOOLEAN CHAR BIT VARCHAR BIT VARYING

numrico exacto
numrico aproximado fecha y hora intervalo

NUMERIC
FLOAT DATE INTERVAL TIME

DECIMAL
RAEL

INTEGER

SMALLINT

DOUBLE PRECISION TIMESTAMP

objetos de gran tamao CHARACTER LARGE OBJECT

BINARY LARGE OBJECT

Pearson Education Limited 1995, 2005

Caractersticas de mejora de integridad Tengamos en cuenta cuatro tipos de restricciones de integridad:


4

Datos requeridos Restricciones de dominio Integridad de entidades Integridad referencial Restricciones generales.

Pearson Education Limited 1995, 2005

Caractersticas de mejora de la integridad Datos requeridos position VARCHAR(10) NOT NULL Restricciones de dominio (a) CHECK sex CHAR NOT NULL CHECK (sex IN (M, F))

Integridad de Entidades
La clave principal de una tabla debe contener un valor unvoco y no nulo en cada fila. El estndar ISO soporta las restricciones de integridad de entidades mediante la clusula FOREIGN KEY en las instrucciones CREATE y ALTER TABLE: PRIMARY KEY(staffNo) PRIMARY KEY(clientNo, propertyNo) La clusula PRIMARY KEY slo puede especificarse una vez por tabla. Sigue siendo posible garantizar la unicidad para cualesquiera claves alternativas que tenga la tabla utilizando la palabra clave UNIQUE:

Integridad referencial
Una clave externa en una columna o conjunto de columnas que enlazan cada fila de la tabla hijo que contiene la clave externa con la fila de la clave padre que contiene el valor correspondiente de clave candidata. La integridad referencial significa que, si la clave externa contiene un valor, dicho valor debe hacer referencia a una fila existente y vlida dentro de la tabla padre. El estndar ISO soporta la definicin de claves externas mediante la clusula FOREIGN KEY en las instrucciones CREATE y ALTER TABLE: FOREIGN Branch KEY(branchNo) REFERENCES

Integridad referencial
Cualquier intento de efectuar una operacin INSERT o UPDATE mediante la que se trate de crear un valor de clave externa en una tabla hijo que no tenga un valor correspondiente de clave candidata en la tabla padre ser rechazada. La accin que SQL toma para cualquier operacin UPDATE y DELETE que intente actualizar o borrar un valor de clave candidata de la tabla padre que tenga una o ms filas correspondientes en la tabla hijo depende de la accin referencial especificada mediante las subclusulas ON UPDATE y ON DELETE: CASCADE SET DEFAULT - SET NULL - NO ACTION

Integridad referencial
CASCADE: Borra la fila de la tabla padre y borra automticamente las filas correspondientes en la tabla hijo, y as sucesivamente en cascada. SET NULL: Se borra la fila de la tabla padre y se asigna el valor NULL a los valores de clave externa en la tabla hijo. Slo es vlida si no se ha especificado el cuantificador NOT NULL para las columnas de clave externa. SET DEFAULT: Borra la fila de la tabla padre y asigna a cada componente la clave externa de la tabla hijo del valor predeterminado especificado. Slo es vlido si se ha especificado un valor DEFAULT para las columnas de clave externa. NO ACTION: Se rechaza la operacin de borrado de la tabla padre. Operacin predeterminada.

Integridad referencial FOREIGN KEY (staffNo) REFERENCES Staff ON DELETE SET NULL FOREIGN Owner KEY (ownerNo) REFERENCES ON UPDATE CASCADE

Restricciones generales Podemos usar CHECK/UNIQUE de instrucciones CREATE y ALTER TABLE. las

Definicin de datos
El lenguaje DDL permite crear y destruir objetos de la base de datos tales como esquemas, dominios, vistas e ndices. Las principales instrucciones del DDL son: CREATE SCHEMA DROP SCHEMA CREATE/ALTER DOMAINDROP DOMAIN CREATE/ALTER TABLE DROP TABLE CREATE vista DROP vista Muchos SGBD tambin proporcionan: CREATE INDEX DROP INDEX

Creacin de una tabla


Creacin de una tabla NombreTabla {(NombreColumna tipoDatos [NOT NULL] [UNIQUE] [DEFAULT opcinPredeterminada] [CHECK condicinBsqueda] [,...]} [PRIMARY KEY (listaDeColumnas),] {[UNIQUE (listaDeColumnas),] [,]} {[FOREIGN KEY (listaColumnasClaveExterna) REFERENCES NombreTablaPadre [(listaColumnasClaveCandidatas)], [ON UPDATE accinReferencial] [ON DELETE accinReferencial ]] [,]} {[CHECK (condicinBsqueda)] [,] })

Ejemplo 6.1 - Creacin de una tabla


CREATE DOMAIN OwnerNumber AS VARCHAR(5) CHECK (VALUE IN (SELECT ownerNo FROM PrivateOwner)); CREATE DOMAIN StaffNumber AS VARCHAR(5) CHECK (VALUE IN (SELECT staffNo FROM Staff)); CREATE DOMAIN PNumber AS VARCHAR(5); CREATE DOMAIN PRooms AS SMALLINT; CHECK(VALUE BETWEEN 1 y 15); CREATE DOMAIN PRent AS DECIMAL(6,2) CHECK(VALUE BETWEEN 0 y 9999.99);
13
Pearson Education Limited 1995, 2005

Ejemplo 6.1 - Creacin de una tabla


Crear la tabla PropertyForRent propertyNo PNumber NOT NULL, . rooms PRooms NOT NULL DEFAULT 4, rent PRent NOT NULL, DEFAULT 600, ownerNo OwnerNumber NOT NULL, staffNo StaffNumber Constraint StaffNotHylingTooMuch . branchNo BranchNumber NOT NULL, PRIMARY KEY (propertyNo), FOREIGN KEY (staffNo) REFERENCES Staff ON DELETE SET NULL ON UPDATE CASCADE .);

Modificacin de la definicin de una tabla (ALTER TABLE) Aadir una nueva columna a una tabla. Eliminar una columna de una tabla. Aadir una nueva restriccin de una tabla. Eliminar una restriccin de una tabla. Asignar un valor predeterminado a una columna. Eliminar el valor predeterminado para una columna.

Ejemplo 6.2(a) - ALTER TABLE Cambiar la tabla Staff eliminando el valor predeterminado Assistant para la columna y asignando como valor predeterminado para la columna sex el sexo femenino ( F ). ALTER TABLE Staff ALTER position DROP DEFAULT; ALTER TABLE Staff ALTER sex SET DEFAULT F;

Ejemplo 6.2(b) - ALTER TABLE Cambiar la tabla PropertyForRent eliminando la restriccin de que los empleados no pueden gestionar ms de 100 inmuebles al mismo tiempo. Aadir una nueva columna a la tabla Client. ALTER TABLE PropertyForRent DROP CONSTRAINT StaffNotHylingTooMuch; ALTER TABLE Client ADD prefNoRooms PRooms;

Eliminacin TABLE)

de

una

tabla

(DROP

DROP TABLE NombreTabla [RESTRICT | CASCADE] E.j. DROP TABLE PropertyForRent; Elimina la tabla designada y todas las filas en ella contenidas. Con el comando RESTRICT se rechaza la operacin DROP si hay otros objetos cuya existencia depende de que contine existiendo la tabla que se puede eliminar. Con el comando CASCADE la operacin DROP se lleva a cabo y SQL elimina automticamente todos los objetos dependientes (y tambin los objetos que dependan de otros objetos).

Vistas
Vista Resultado dinmico de una o ms operaciones relacionales que operan sobre las relaciones base para producir otra relacin. Relacin virtual que no tiene por qu existir necesariamente en la base de datos sino que puede producirse cuando se solicite por parte de un usuario concreto, generndosela en el momento de la solicitud.

Creacin de una vista (CREATE VIEW)


CREATE VIEW NombreVista (nuevoNombreColumna [,...]) ] AS subseleccin [WITH [CASCADED | LOCAL] CHECK OPTION] [

Si se especifica una lista de nombres de columna, debe tener el mismo nmero de elementos que el nmero de columnas generadas por la subseleccin Si se omite la lista de nombres de columnas, cada una de las columnas de la vista tomar el nombre de la columna correspondiente en la instruccin de subseleccin.

Ejemplo 6.3 Creacin de una vista horizontal


Crear una vista de modo que el gerente de la sucursal B003 slo pueda ver los detalles referidos a los empleados que trabajen en su sucursal. CREATE vista Manager3Staff AS SELECT * FROM Staff WHERE branchNo = B003;
Tabla 6.3 Datos correspondientes a la vista Manager3Staff

Ejemplo 6.4 Creacin de una vista vertical

Crear una vista de los detalles de los empleados de la sucursal B003 excluyendo la informacin salarial. AS SELECT staffNo, fName, lName, position, sex FROM Staff WHERE branchNo = B003;
Tabla 6.4 Datos correspondientes a la vista Staff3

Ejemplo 6.5 Vistas agrupadas y combinadas


Crear una vista de los empleados que gestionan inmuebles para alquilar en la que se incluya el nmero de la sucursal en la que trabaja el empleado, el nmero del empleado y el nmero de inmuebles que gestiona. CREATE view StaffPropCnt (branchNo, staffNo, cnt) AS SELECT s.branchNo, s.staffNo, COUNT(*) FROM Staff s, PropertyForRent p WHERE s.staffNo = p.staffNo GROUP BY s.branchNo, s.staffNo;
Pearson Education Limited 1995, 2005

23

Ejemplo 6.3 Vistas agrupadas y combinadas


Tabla 6.5 Datos para la vista StaffPropCnt

Eliminacin vista)

de

una

vista

(DROP

DROP VIEW NombreVista [RESTRICT | CASCADE] Hace que se elimine de la base de datos la definicin de la vista. Por Ejemplo: DROP vista Manager3Staff;

DROP VIEW Si se especifica la opcin CASCADE, se borrarn todos los objetos dependientes relacionados, es decir, todos los objetos que hagan referencia a la vista. Si se especifica la opcin RESTRICT (predeterminado), y hay algn objeto cuya existencia dependa de que contine existiendo la vista que se pretende eliminar, el comando no se ejecutar.

Resolucin de vistas Contar el nmero de inmuebles gestionados por cada empleado de la sucursal. SELECT staffNo, cnt FROM StaffPropCnt WHERE branchNo = B003 ORDER BY staffNo;

Resolucin de vistas
(a) Los nombres de columna de la vista contenidos en la lista SELECT se traducen a sus correspondientes nombres de columna en la consulta de definicin: SELECT s.staffNo As staffNo, COUNT(*) As cnt

(b) Los nombres de vistas en la clusula FROM se sustituyen por las correspondientes listas FROM de la consulta de definicin y:
FROM Staff s, PropertyForRent p

Resolucin de las vistas


(c) La clusula WHERE de la consulta del usuario se combina con la clusula WHERE de la consulta de definicin utilizando el operador lgico AND:
WHERE s.staffNo = p.staffNo y branchNo = B003 (d) Las clusulas GROUP BY y HAVING se copian de la columna de definicin:

GROUP BY s.branchNo, s.staffNo


(e) La clusula ORDER BY se copia de la consulta del usuario traduciendo el nombre de columna de la vista a su correspondiente nombre de columna de la consulta de definicin. ORDER BY s.staffNo

Resolucin de las vistas (f) La clusula combinada final ser: SELECT s.staffNo AS staffNo, COUNT(*) AS cnt FROM Staff s, PropertyForRent p WHERE s.staffNo = p.staffNo y branchNo = B003 GROUP BY s.branchNo, s.staffNo ORDER BY s.staffNo;

Restricciones de las vistas


SQL impone diversas restricciones creacin y utilizacin de vistas. a la

(a) Si una columna de la vista est basada en una funcin de agregacin sobre la columna cnt: Dicha columna slo puede aparecer en las clusulas SELECT y ORDER BY de las consultas que accedan a la vista. Dicha columna no podr ser utilizada en una clusula WHERE y no puede emplearse como argumento para una funcin de agregacin en ninguna consulta basada en la vista.

Restricciones de las vistas


Por Ejemplo, la siguiente consulta no sera legal: SELECT COUNT(cnt) FROM StaffPropCnt; De igual forma, tambin fallara: la siguiente consulta

SELECT * FROM StaffPropCnt WHERE cnt > 2;

Restricciones de las vistas (b) Una vista agrupada nunca puede combinarse con una tabla base o con otra vista. Por ejemplo, la vista StaffPropCnt es una vista agrupada por lo que cualquier intento de combinar esta vista con otra tabla o vista fallar.

Actualizacin de vistas Todas las actualizaciones de la tabla base se ven inmediatamente reflejadas en todas las vistas definidas sobre dicha tabla base. De igual forma, cabra esperar que si se actualiza una vista las tablas base reflejen los cambios realizados.

Actualizacin de vistas
Sin embargo, considere de nuevo la vista StaffPropCnt. Si tratramos de insertar un registro que indicara que, en la sucursal B003, el empleado SG5 gestiona dos propiedades: INSERT INTO StaffPropCnt VALUES (B003, SG5, 2); Tendremos que insertar dos registros en la tabla PropertyForRent que indiquen qu inmuebles son. Sin embargo, no sabemos qu inmuebles son, es decir, no conocemos los valores de la clave principal!

Actualizacin de vistas Si cambiamos la definicin de vista, y sustituimos el valor que indica el nmero de inmuebles por los nmeros de inmuebles reales: CREATE VIEW StaffPropList (branchNo, staffNo, propertyNo) AS SELECT s.branchNo, s.staffNo, p.propertyNo FROM Staff s, PropertyForRent p WHERE s.staffNo = p.staffNo;

Actualizacin de vistas
Ahora intentaremos insertar el registro:

INSERT INTO StaffPropList VALUES (B003, SG5, PG19);


Todava contina existiendo un problema con esta insercin, porque hemos especificado en la definicin de la tabla PropertyForRent que todas las columnas excepto postcode y staffNo no pueden contener valores nulos. Sin embargo, no tenemos forma de proporcionar valores a las restantes columnas no nulas.

Ventajas de las vistas Independencia de datos Valores actualizados Mayor seguridad Menor complejidad Comodidad Personalizacin Integridad de los datos

Desventajas de las vistas Restricciones de actualizacin Restricciones de estructura Rendimiento

Materializacin de vistas
El mecanismo para llevar a cabo la resolucin de la vista puede ser lento, especialmente si se accede a esta vista de manera frecuente. La materializacin de vistas almacena las vistas de forma temporal dentro de la base de datos cuando la vista se consulta por primera vez. A partir de ah, las consultas basadas en la vista materializada pueden ser mucho ms rpidas que el proceso de recalcular la vista cada vez. La dificultad consiste en mantener la vista actualizada a medida que se modifican las tablas base.

Mantenimiento de las vistas

EL mantenimiento de las vistas tiene por objetivo mantener actualizada la vista. Tengamos en cuenta la siguiente vista: Tabla 6.8 Datos
CREATE vista StaffPropRent(staffNo) AS SELECT DISTINCT staffNo FROM PropertyForRent WHERE branchNo = B003 y rent > 400;
para la vista StaffPropRent

Transacciones
El estndar SQL define un modelo de transacciones basado en dos instrucciones SQL: COMMIT y ROLLBACK. Una transaccin es una unidad lgica de trabajo compuesta por una o ms instrucciones SQL garantizndose que esa unidad lgica sea atmica con respecto a la recuperacin. Una transaccin SQL comienza automticamente con una instruccin SQL iniciadora de transaccin(por ejemplo SELECT, INSERT). Los cambios realizados por una transaccin no son visibles para otras transacciones que se estn ejecutando concurrentemente hasta que la transaccin se complete.

Transacciones Toda transaccin puede completarse de cuatro formas distintas: - La instruccin COMMIT hace que la transaccin termine con xito, con lo que los cambios realizados en la base de datos sern permanentes. - La instruccin ROLLBACK aborta la transaccin, deshaciendo cualquier cambio que se est ejecutando concurrentemente hasta que la transaccin se complete.

Transacciones - Para el SQL programtico la terminacin satisfactoria de un programa hace que termine con xito la transaccin final, an cuando no se haya ejecutado una instruccin COMMIT. - Para el SQL programtico, una terminacin anormal del programa har que se aborte la transaccin.

Transacciones
Una nueva transaccin comienza con la siguiente instruccin de comienzo de transaccin. Las transacciones SQL no pueden anidarse. La instruccin SET TRANSACTION permite al usuario configurar ciertos aspectos de la transaccin: SET TRANSACTION [READ ONLY | READ WRITE] | [ISOLATION LEVEL READ UNCOMMITTED | READ COMMITTED|REPEATABLE READ |SERIALIZABLE ]

Privilegios
Las acciones que se permite al usuario llevar a cabo sobre una determinada tabla base o vista: SELECT Extraer datos de una tabla. INSERT Insertar nuevas filas en una tabla. UPDATE Modificar filas de datos en una tabla. DELETE Borrar filas de datos de una tabla. REFERENCES Hacer referencia a columnas de una tabla especificada dentro de las restricciones de integridad. USAGE Utilizar dominios, intercalaciones, conjuntos de caracteres y traducciones.

Privilegios
Pueden restringirse a columnas especficas de la tabla, lo que permite que se efecten cambios en dichas columnas pero impidiendo la modificacin de las columnas restantes. El propietario de una base de datos debe proporcionar acceso a los restantes usuarios mediante la instruccin GRANT. Para crear una vista el usuario debe disponer del privilegio SELECT sobre todas las tablas que forman la lista y del privilegio PREFERENCES sobre las columnas especificadas de la vista.

GRANT GRANT {ListaPrivilegios | PRIVILEGES} ON NombreObjeto TO {ListaAutorizacin | PUBLIC} [WITH GRANT OPTION] ALL

ListaPrivilegios est compuesta por uno o ms de los privilegios arriba indicados separados por comas. ALL PRIVILEGES da todos los privilegios a un usuario.

Ejemplo 6.7/8 - GRANT


Proporcionar al usuario con identificador de autorizacin Manager todos los privilegios mediante GRANT. GRANT ALL PRIVILEGES ON Staff TO Manager WITH GRANT OPTION; Conceder a los usuarios Personnel y Director los privilegios SELECT y UPDATE sobre la columna salary de la tabla Staff. GRANT SELECT, UPDATE (salary) ON Staff TO Personnel, Director;

Ejemplo 6.9 Concesin de privilegios especficos a PUBLIC mediante GRANT Conceder a todos los usuarios el privilegio SELECT sobre la tabla Branch. GRANT SELECT ON Branch TO PUBLIC;

REVOKE
REVOKE se utiliza para quitar privilegios concedidos con la instruccin GRANT. REVOKE [GRANT OPTION FOR] {ListaPrivilegios | ALL PRIVILEGES} ON NombreObjeto FROM {ListaIdentificadorAutorizacin PUBLIC} [RESTRICT | CASCADE]

La palabra clave ALL PRIVILEGES hace referencia a todos los privilegios concedidos a un usuario por el usuario que est revocndolo.

Revocar el privilegio SELECT a todos los usuarios sobre la tabla Branch. REVOKE SELECT ON Branch FROM PUBLIC; Revocar todos los privilegios dados a Director sobre la tabla Staff.

Vista 6.10/11 Revocacin de privilegios especficos

REVOKE ALL PRIVILEGES ON Staff FROM Director;