2ª Parte: Definición de Bases de Datos

Anuncio
Práctica 3:
Lenguaje SQL
2ª Parte: Definición de datos
Objetivos
• Presentar la sintaxis de creación de tablas
• Diferencia con SQL/92
• Presentar la sintaxis de la modificación de definición de una tabla
• Presentar la sintaxis de la creación de una vista
• Presentar la sintaxis para otorgar autorizaciones
• Presentar la sintaxis para la creación de reglas de actividad
(disparadores)
• Todo ello para el sistema Oracle9
27/04/2006
Bases de Datos
2
1
Creación de una tabla
definición_relación_básica ::=
CREATE TABLE nom_relación
(comalista_elemento_relación_básica)
elemento_relación_básica ::=
definición_atributo | restricción_relación
definición_atributo ::=
nom_atributo tipo_datos [DEFAULT (expresión)]
[lista_restricción_atributo]
tipo_datos::=
CHAR (longitud) | VARCHAR (longitud)
| NUMBER [(precisión[, escala])] | DATE
27/04/2006
Bases de Datos
3
Creación de una tabla
restricción_atributo ::=
[CONSTRAINT nombre_restricción]
{[NOT] NULL| UNIQUE| PRIMARY KEY|
REFERENCES nom_relación* [(nom_atributo*)]
[ON DELETE CASCADE]
| CHECK (condición) }
[cuando_comprobar]
27/04/2006
Bases de Datos
4
2
Creación de una tabla
restricción_relación ::=
[CONSTRAINT nombre_restricción]
{ UNIQUE (comalista_nom_atributo)
| PRIMARY KEY (comalista_nom_atributo)
| FOREIGN KEY (comalista_nom_atributo)
REFERENCES nom_relación* [(comalista_nom_atributo*)]
[ON DELETE CASCADE]
| CHECK (condición)}
[cuando_comprobar]
cuando_comprobar:=
[NOT] DEFERRABLE [INITIALLY {INMEDIATE |
DEFERRED}]
27/04/2006
Bases de Datos
5
Creación de una tabla
Tipos de datos:
• Numéricos:
– NUMBER [(precisión[, escala])]
– NUMBER (precisión): entero
– NUMBER (precisión, escala): real
• Alfanuméricos:
– CHAR (longitud)
– VARCHAR (longitud) o VARCHAR2 (longitud)
• Fechas:
– DATE
27/04/2006
Bases de Datos
6
3
Creación de una tabla
• DEFAULT:
La expresión de la cláusula DEFAULT se construye a partir de constantes de
los tipos de datos predefinidos, operadores y funciones del sistema siguiendo
la sintaxis adecuada en cada
• Integridad referencial: débil y borrado en cascada
• CHECK:
– expresión lógica
– sólo pueden aparecer columnas de la tabla donde se define
– no puede incluir subconsultas
– la tabla satisface la condición si se evalúa a cierto o indefinido para toda fila
de la misma
27/04/2006
Bases de Datos
7
Creación de una tabla
• DEFERRABLE:
– permite que indicarle al sistema si la restricción se comprueba al final de la
transacción o después de cada instrucción de actualización
– SET CONSTRAINT {DEFERRED | INMEDIATE}
27/04/2006
Bases de Datos
8
4
Creación de una tabla. Ejemplo
CREATE TABLE ciclista (
dorsal NUMBER(3) PRIMARY KEY,
nombre VARCHAR2(30) NOT NULL,
edad NUMBER(2) ,
nomeq VARCHAR(25) NOT NULL REFERENCES equipo (nomeq));
CREATE TABLE etapa (
netapa NUMBER(2) PRIMARY KEY,
km NUMBER(3) ,
salida VARCHAR(35),
llegada VARCHAR(35),
dorsal NUMBER(3) REFERENCES ciclista (dorsal));
27/04/2006
Bases de Datos
9
Diferencia con el SQL/92
restricción_relación ::=
[CONSTRAINT nombre_restricción]
{ UNIQUE (comalista_nom_atributo)
| PRIMARY KEY (comalista_nom_atributo)
| FOREIGN KEY (comalista_nom_atributo)
REFERENCES nom_relación* [(comalista_nom_atributo*)]
[tipo_integridad_referencial]
[directriz_borrado]
[directriz_modificación]
| CHECK (condición)}
[cuando_comprobar]
27/04/2006
Bases de Datos
10
5
Diferencia con el SQL/92
restricción_atributo ::=
[CONSTRAINT nombre_restricción]
{[NOT] NULL| UNIQUE| PRIMARY KEY|
REFERENCES nom_relación* [(nom_atributo*)]
[directriz_borrado]
[directriz_modificación]
| CHECK (condición) }
[cuando_comprobar]
27/04/2006
Bases de Datos
11
Diferencia con el SQL/92
tipo_integridad_referencial ::=
MATCH { FULL | PARTIAL}
directriz_borrado ::=
ON DELETE { CASCADE | SET NULL | SET DEFAULT |
NO ACTION}
directriz_actualización ::=
ON UPDATE { CASCADE | SET NULL | SET DEFAULT |
NO ACTION}
27/04/2006
Bases de Datos
12
6
Modificación de la definición de una tabla
modificación_relación::=
ALTER TABLE nombre_relación
{ADD (comalista_elemento_relación_básica)
/*Añadir nuevos atributos o restricciones*/
| MODIFY (comalista_definición_atributo)
/*Modificar la definición de atributos*/
| {DROP
/*Borrar una restricción*/
| [VALIDATE | NOVALIDATE] ENABLE
| DISABLE }
(restricción) }
/*Activar (desactivar) una restrición de integridad*/
restricción::=
{PRIMARY [CASCADE]
| UNIQUE (comalista_nombre_atributo) [CASCADE]
| CONSTRAINT nombre_restricción }
27/04/2006
Bases de Datos
13
Eliminación de una tabla
eliminación_relación::=
DROP TABLE nombre_relación [CASCADE CONSTRAINTS]
27/04/2006
Bases de Datos
14
7
Definición de vistas
definición_vista::=
CREATE [OR REPLACE] VIEW nombre_vista
[(comalista_nombre_atributo)] AS sentencia_SELECT
[WITH CHECK OPTION]
eliminación_vista::=
DROP VIEW nombre_vista
27/04/2006
Bases de Datos
15
Definición de vistas. Ejemplo
CREATE VIEW etapas_con_puertos (netapa, salida, llegada)
AS SELECT distinct netapa, salida, llegada
FROM Etapa E, Puerto P
WHERE E.netapa=P.netapa
27/04/2006
Bases de Datos
16
8
Definición de vistas: vistas actualizables
Motivos por los que una vista no es actualizable:
• contiene operadores conjuntistas (UNION, INTERSECT,…
• el operador DISTINCT
• funciones agregadas (SUM, AVG, ..)
• la cláusula GROUP BY
27/04/2006
Bases de Datos
17
Definición de vistas: vistas actualizables
Vista sobre una tabla básica:
• el sistema traducirá la actualización sobre la vista en una
operación de actualización sobre la relación básica
• siempre que no se viole ninguna restricción de integridad
definida sobre dicha relación
27/04/2006
Bases de Datos
18
9
Definición de vistas: vistas actualizables
Vista sobre una concatenación de relaciones:
• la actualización sólo puede modificar UNA de las tablas básicas
• actualización modificará la relación básica que cumpla la
propiedad de conservación de la clave (aquella relación tal que su
clave primaria podría ser también clave de la vista)
• la actualización no se realizará si viola alguna de las restricciones
definidas sobre la relación básica que se va a actualizar
27/04/2006
Bases de Datos
19
Definición de privilegios
definición_operación_grant::=
GRANT comalista_privilegios_objeto
ON usuario.objeto
TO {PUBLIC | comalista_usuario}
/*PUBLIC : trasmite los privilegios a todos los usuarios*/
[WITH ADMIN OPTION]
/*permiso para ceder privilegios a terceros*/
privilegio_objeto::=
{ ALTER | EXECUTE | INDEX | INSERT | READ |
REFERENCES | SELECT | UPDATE | DELETE}
definición_operación_revoke::=
REVOKE {comalista_privilegios_objeto | ALL PRIVILEGES}
ON usuario.objeto
FROM {PUBLIC | comalista_usuario} [WITH ADMIN OPTION]
27/04/2006
Bases de Datos
20
10
Definición de privilegios
Ejemplo 1: Dar permisos de inserción y borrado en ciclista a
todo el mundo:
GRANT INSERT, DELETE ON ciclista TO PUBLIC
Ejemplo 2: Dar permisos de consulta en etapa al usuario
“pepe”, dándole permiso de que a su vez pueda conceder
permisos a otros usuarios:
GRANT SELECT ON etapa TO pepe
WITH ADMIN OPTION
27/04/2006
Bases de Datos
21
Definición de reglas de actividad: disparadores
Define el comportamiento activo del sistema. Aplicaciones:
• comprobación de restricciones de integridad
• control de la seguridad
• definición de reglas de funcionamiento de la organización
• mantenimiento de información derivada
27/04/2006
Bases de Datos
22
11
Definición de reglas de actividad: disparadores
Forma de una regla de actividad:
Evento - Condición - Acción
acción que el sistema ejecuta cuando como respuesta a la ocurrencia de
un evento cuando cierta condición se satisface. En Oracle:
•
evento: operación de actualización
•
condición: expresión lógica del SQL
•
acción: procedimiento escrito en PL/SQL (incluye instrucción de
manipulación de la BD)
27/04/2006
Bases de Datos
23
Definición de reglas de actividad
definición_regla::=
{CREATE | REPLACE} TRIGGER nombre_regla
{BEFORE | AFTER | INSTEAD OF} evento [disyunción_eventos]
ON {nombre_relación | nombre_vista}
[ [REFERENCING OLD AS nombre_referencia
[NEW AS nombre_referencia] ]
[FOR EACH {ROW | STATEMENT} [WHEN ( condición ) ] ]
bloque PL/SQL
disyunción_eventos ::= OR evento [disyunción_eventos]
evento ::=
INSERT | DELETE | UPDATE [OF comalista_nombre_atributo]
27/04/2006
Bases de Datos
24
12
Definición de reglas de actividad
FOR EACH STATEMENT
FOR EACH ROW
BEFORE
La regla se ejecuta una vez
antes de la ejecución de la
operación de actualización
La regla se ejecuta una vez
antes de actualización de
cada tupla afectada por la
operación de actualización
AFTER
La regla se ejecuta una vez
después de la ejecución de la
operación de actualización
La regla se ejecuta una vez
después de actualización de
cada tupla afectada por la
operación de actualización
27/04/2006
Bases de Datos
25
Definición de reglas de actividad
EVENTOS
{BEFORE | AFTER | INSTEAD OF} evento [disyunción_eventos]
ON {nombre_relación | nombre_vista}
disyunción_eventos ::= OR evento [disyunción_eventos]
evento ::=
INSERT | DELETE | UPDATE [OF comalista_nombre_atributo]
27/04/2006
Bases de Datos
26
13
Definición de reglas de actividad
EVENTOS
Parametrización de eventos:
– los eventos de las reglas FOR EACH ROW están parametrizados
– pametrización implícita:
• evento INSERT o DELETE: n (n grado de la relación)
• evento UPDATE: 2*n
– nombre de parámetros:
• evento INSERT: NEW
• evento DELETE: OLD
• evento UPDATE: OLD y NEW
– se pueden usar en la condición de la regla
– se pueden usar en el bloque PL/SQL
27/04/2006
Bases de Datos
27
Definición de reglas de actividad
CONDICIONES
WHEN (condición)
– expresión lógica de sintaxis similar a la condición de la cláusula WHERE de la
instrucción SELECT
– no puede contener subconsultas ni funciones agregadas
– sólo se puede hacer referencia a los parámetros del evento
27/04/2006
Bases de Datos
28
14
Definición de reglas de actividad
ACCIONES
bloque PL/SQL
– bloque escrito en el lenguaje de programación de Oracke PL/SQL
– sentencias de manipulación de la BD: INSERT, DELETE, UPDATE,
SELECT ... INTO ...
– sentencias de programa: asignación, selección, iteración
– sentencias de manejo de errores
– sentencias de entrada/salida
27/04/2006
Bases de Datos
29
Definición de reglas de actividad
Lenguaje de reglas:
– Creación: CREATE TRIGGER nombre_regla ...
– Eliminación: DROP TRIGGER nombre_reglas
– Modificación: REPLACE TRIGGER nombre_regla ...
– Recompilación: ALTER TRIGGER nombre_regla COMPILE
– Des/Habilitar regla: ALTER TRIGGER nombre_regla [ENABLE | DISABLE]
– Des/Habilitar todas las reglas sobre una relación:
ALTER TABLE nombre_relación [{ENABLE | DISABLE} ALL TRIGGERS]
27/04/2006
Bases de Datos
30
15
Definición de reglas de actividad
a) La siguiente regla define en el esquema de la base de datos el
siguiente comportamiento activo: “después de cada inserción en
la relación R hacer una copia de la tupla insertada en la relación
R_copia”.
(El esquema de R es R(A:dom_A, B:dom_B) )
CREATE TRIGGER T1
AFTER INSERT ON R
FOR EACH ROW
BEGIN
INSERT INTO R_copia VALUES(:NEW.A, :NEW.B);
END;
27/04/2006
Bases de Datos
31
Definición de reglas de actividad
b) La siguiente regla define en el esquema de la base de datos el
siguiente comportamiento activo: “ después de cada operación de
actualización de la relación R registrar la información sobre el
usuario y la fecha de la actualización en la relación R_control”
CREATE TRIGGER T2
AFTER INSERT OR UPDATE OR DELETE ON R
FOR EACH STATMENT
BEGIN
INSERT INTO R_control VALUES(user, sysdate);
END;
(user y sysdate son funciones del sistema que devuelven
respectivmente el usuario de la sesión y la fecha del sistema)
27/04/2006
Bases de Datos
32
16
Definición de reglas de actividad
c) La siguiente regla define en el esquema la restricción: “No se
puede insertar en la relación R una tupla si existe en la relación
S”
CREATE TRIGGER T3
AFTER INSERT ON R
FOR EACH ROW
DECLARE
Aux NUMBER;
BEGIN
SELECT Count(*) INTO Aux
FROM S WHERE :NEW.A=S.A;
IF Aux>0 THEN RAISE_APPLICATION_ERROR(-20000,
‘No se puede realizar esta operación’);
END IF;
END;
27/04/2006
Bases de Datos
33
Ejercicios – (Práctica nº3, 2ª parte)
Diseñar la base de datos de una pequeña biblioteca:
– consultar los datos de un libro: código del libro, título, autor(es), temática y en
caso de estar prestado, el socio que lo tiene actualmente en préstamo
– consultar la información sobre un socio: código del socio, nombre, dirección,
teléfono y libros que actualmente tiene en préstamo así como la fecha de
préstamo
– consultar los préstamos históricos de un socio: código del libro, fecha del
préstamo y fecha de la devolución
– dar de alta, dar de baja y modificar los datos de un socio
– gestionar los préstamos: prestar un libro a un socio y registrar la devolución de
un libro. (se supone que un préstamo dura al menos un día, es decir un libro no
se puede prestar el mismo día más de una vez).
27/04/2006
Bases de Datos
34
17
Ejercicios – (Práctica nº3, 2ª parte)
Diseñar la base de datos de una pequeña biblioteca: restricciones
– el código del libro identifica unívocamente al libro
– el código del socio identifica unívocamente al socio
– el conjunto de temas utilizados para clasificar un libro son: física, electricidad,
mecánica y óptica
– la fecha de devolución de un libro debe ser posterior a la fecha de préstamo
– el número total de libros que tiene prestados un socio es un dato derivado que
será mantenido automáticamente por el sistema
27/04/2006
Bases de Datos
35
Ejercicios – (Práctica nº3, 2ª parte)
Tareas:
a) Definir el esquema relacional de la base datos anterior (usando los conceptos
del modelo relacional
b) Definir la base de datos en el sistema ORACLE9
c) Realizar actualizaciones y consultas sobre la base de datos creada
27/04/2006
Bases de Datos
36
18
Diferencia con el SQL/92
esquema ::=
CREATE SQUEME [esquema] [AUTORIZATION usuario]
lista_elemento_esquema
elemento_esquema ::=
{ definición_dominio
definición_relación_básica
definición_vista
definición_restricción
definición_privilegio }
27/04/2006
|
|
|
|
Bases de Datos
37
Diferencia con el SQL/92: dominios
definición_dominio ::=
CREATE DOMAIN dominio [AS ] tipo_dato
[DEFAULT {literal | función_sistema | NULL ]
[definición_restricción_dominio]
definición_restricción_dominio ::=
[CONSTRAINT nombre ]
CHECK (expresión_condicional)
[cuando_comprobar]
27/04/2006
Bases de Datos
38
19
Diferencia con el SQL/92: relaciones
restricción_relación ::=
[CONSTRAINT nombre_restricción]
{ UNIQUE (comalista_nom_atributo)
| PRIMARY KEY (comalista_nom_atributo)
| FOREIGN KEY (comalista_nom_atributo)
REFERENCES nom_relación* [(comalista_nom_atributo*)]
[tipo_integridad_referencial]
[directriz_borrado]
[directriz_actualización]
| CHECK (condición)}
[cuando_comprobar]
27/04/2006
Bases de Datos
39
Diferencia con el SQL/92:relaciones
restricción_atributo ::=
[CONSTRAINT nombre_restricción]
{[NOT] NULL| UNIQUE| PRIMARY KEY|
REFERENCES nom_relación* [(nom_atributo*)]
[directriz_borrado]
[directriz_actualización]
| CHECK (condición) }
[cuando_comprobar]
27/04/2006
Bases de Datos
40
20
Diferencia con el SQL/92: relaciones
tipo_integridad_referencial ::=
MATCH { FULL | PARTIAL}
directriz_borrado ::=
ON DELETE { CASCADE | SET NULL | SET DEFAULT |
NO ACTION}
directriz_actualización ::=
ON UPDATE { CASCADE | SET NULL | SET DEFAULT |
NO ACTION}
27/04/2006
Bases de Datos
41
Diferencia con el SQL/92: restricciones
definición_restricción ::=
CREATE ASSERTION restricción
CHECK (expresión_condicional)
[cuando_comprobar]
27/04/2006
Bases de Datos
42
21
Descargar