Download Definición de datos

Document related concepts

Lenguaje de definición de datos wikipedia , lookup

SQL wikipedia , lookup

Trigger (base de datos) wikipedia , lookup

PL/SQL wikipedia , lookup

Transcript
Lenguaje SQL (2ª Parte)
Definición de datos
Bases de Datos
Práctica 3
DSIC - UPV
Facultad de Informática
Escuela Técnica Superior de Informática Aplicada
Objetivos
„ Sintaxis del Lenguaje de Definición de Datos.
„ Creación de tablas.
„ Modificación de la definición de una tabla.
Visto en Teoría
„ Creación de una vista.
„ Otorgar autorizaciones.
„ Diferencias entre Oracle y SQL (estándar).
„ Creación de reglas de actividad (disparadores).
„ Realizar todo lo anterior usando la
herramienta ISQL del sistema de gestión de
bases de datos ORACLE.
Bases de Datos
DSIC-UPV
2
1
Diferencias entre
Oracle 9i / SQL ANSI
Definición
Definición de
de Relaciones
Relaciones (Oracle):
(Oracle):
„ No permite la definición de esquemas (CREATE
SQUEMA) Î Todas las relaciones forman parte de
misma BD.
„ No se permite la definir dominios (CREATE
DOMAIN) Î Los atributos sólo se pueden definir
sobre los tipos de datos proporcionados por el
sistema.
„ Solamente implementa la integridad referencial
débil para las claves ajenas. Las únicas directrices
para la restauración de la integridad referencial
disponibles son borrado en cascada y a nulos.
„ No se permite la definición de restricciones generales
sobre la base de datos (CREATE ASSERTION).
Bases de Datos
DSIC-UPV
3
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
„
Bases de Datos
DSIC-UPV
4
2
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)
„
Bases de Datos
DSIC-UPV
5
Definición de reglas de
actividad (Disparadores)
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]
Bases de Datos
DSIC-UPV
6
3
Definición de reglas de
actividad (Disparadores)
Definición
Definición de
de Disparadores
Disparadores (Oracle):
(Oracle):
„ Un mismo TRIGGER se puede activar por más de un
evento sobre la misma tabla (se dispone de las variables
booleanas INSERTING, DELETING, UPDATING).
„ Sólo en el caso de granularidad orientada a la tupla
(FOR EACH ROW) el disparador está parametrizado.
No existen parámetros de tabla. No es necesario dar
nombre a los parámetros.
„ En la construcción de la condición de la regla (WHEN)
solamente pueden aparecer referencias a los
parámetros, sin subconsultas ni funciones agregadas.
„ La acción siempre es un boque PL/SQL. En la acción no
se puede hacer referencia a la tabla que ha disparado el
TRIGGER.
Bases de Datos
DSIC-UPV
7
Ejemplo
La
La siguiente
siguiente regla
regla define
define en
en el
el esquema
esquema de
de la
la base
base de
de
datos
el
siguiente
comportamiento
activo:
“después
de
datos el siguiente comportamiento activo: “después de
cada
cada inserción
inserción en
en la
la relación
relación RR hacer
hacer una
una copia
copia de
de la
la
tupla
insertada
en
la
relación
R_copia”.
tupla insertada en la relación R_copia”.
(El
(El esquema
esquema de
de RR es
es R(A:dom_A,
R(A:dom_A, B:dom_B))
B:dom_B))
CREATE
CREATE TRIGGER
TRIGGER T1
T1
AFTER
INSERT
ON
AFTER INSERT ON RR
FOR
FOR EACH
EACH ROW
ROW
BEGIN
BEGIN
INSERT
INSERT INTO
INTO R_copia
R_copia VALUES(:NEW.A,
VALUES(:NEW.A, :NEW.B);
:NEW.B);
END;
END;
Bases de Datos
DSIC-UPV
8
4
Ejemplo
La
La siguiente
siguiente regla
regla define
define en
en el
el esquema
esquema de
de la
la base
base de
de
datos
el
siguiente
comportamiento
activo:
“después
datos el siguiente comportamiento activo: “después
de
de cada
cada operación
operación de
de actualización
actualización de
de la
la relación
relación RR
registrar
registrar la
la información
información sobre
sobre el
el usuario
usuario yy la
la fecha
fecha
de
la
actualización
en
la
relación
R_control”
de la actualización en la relación R_control”
CREATE
CREATE TRIGGER
TRIGGER T2
T2
AFTER
INSERT
OR
AFTER INSERT OR UPDATE
UPDATE OR
OR DELETE
DELETE ON
ON RR
FOR
FOR EACH
EACH STATMENT
STATMENT
BEGIN
BEGIN
INSERT
INSERT INTO
INTO R_control
R_control VALUES(user,
VALUES(user, sysdate);
sysdate);
END;
END;
(user
(user yy sysdate
sysdate son
son funciones
funciones del
del sistema
sistema que
que
devuelven
devuelven respectivmente
respectivmente el
el usuario
usuario de
de la
la sesión
sesión yy
la
la fecha
fecha del
del sistema)
sistema)
Bases de Datos
DSIC-UPV
9
Ejemplo
La
La siguiente
siguiente regla
regla define
define en
en el
el esquema
esquema la
la
restricción:
“No
se
puede
insertar
en
la
restricción: “No se puede insertar en la relación
relación RR
una
una tupla
tupla si
si existe
existe en
en la
la relación
relación S”
S”
CREATE
CREATE TRIGGER
TRIGGER T3
T3
AFTER
INSERT
AFTER INSERT ON
ON RR
FOR
FOR EACH
EACH ROW
ROW
DECLARE
DECLARE
Aux
Aux NUMBER;
NUMBER;
BEGIN
BEGIN
SELECT
SELECT Count(*)
Count(*) INTO
INTO Aux
Aux
FROM
S
WHERE
:NEW.A=S.A;
FROM S WHERE :NEW.A=S.A;
IF
IF Aux>0
Aux>0 THEN
THEN RAISE_APPLICATION_ERROR(-20000,
RAISE_APPLICATION_ERROR(-20000,
‘No
‘No se
se puede
puede realizar
realizar esta
esta operación’);
operación’);
END
IF;
END IF;
END;
END;
Bases de Datos
DSIC-UPV
10
5
Ejercicios
Diseñar
Diseñar la
la base
base de
de datos
datos de
de una
una pequeña
pequeña
biblioteca:
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)
Bases de Datos
DSIC-UPV
11
Ejercicios
Diseñar
Diseñar la
la base
base de
de datos
datos de
de una
una pequeña
pequeña
biblioteca:
biblioteca:
Restricciones
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
Bases de Datos
DSIC-UPV
12
6
Ejercicios
Tareas:
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 ORACLE9i
c) realizar actualizaciones y consultas sobre la base de
datos creada
Bases de Datos
DSIC-UPV
13
Diferencias entre
Oracle 9i / SQL ANSI
Tipos
Tipos de
de datos
datos proporcionados:
proporcionados:
„ 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
Bases de Datos
DSIC-UPV
14
7
Diferencias entre
Oracle 9i / SQL ANSI
Definición
Definición de
de Relaciones
Relaciones (SQL
(SQL ANSI):
ANSI):
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}
Bases de Datos
DSIC-UPV
15
Definición de reglas de
actividad (Disparadores)
Parametrización
Parametrización de
de eventos:
eventos:
„ Los eventos de las reglas FOR EACH ROW están
parametrizados
„ 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
Bases de Datos
DSIC-UPV
16
8
2.6. SQL: llenguatge de definició de dades (DDL)
Definició
Definició de
de taules/relacions
taules/relacions
definició_taula ::=
CREATE TABLE nom_taula
(element_taula1, element_taula2, element_taula3, ...)
element_taula ::= definició_atribut | restricció_taula
definició_atribut ::=
nom_atribut {tipus_dada | nom_domini}
[DEFAULT ({valor | funció_sistema | NULL} )]
[restricció_atribut1 restricció_atribut2 ...]
Bases de Datos
DSIC-UPV
17
2.6. SQL: llenguatge de definició de dades (DDL)
Restriccions
Restriccions sobre
sobre atributs
atributs
restricció_atribut ::=
[CONSTRAINT nom_restricció]
{NOT NULL
| UNIQUE
| PRIMARY KEY
| REFERENCES nom_taula [(nom_atribut)]
[MATCH {FULL | PARTIAL | SIMPLE}]
[Directriu_esborrat]
[Directriu_modificació]
| CHECK (condició) }
[quan_comprovar]
Bases de Datos
DSIC-UPV
18
9
2.6. SQL: llenguatge de definició de dades (DDL)
Restriccions
Restriccions sobre
sobre relacions
relacions
restricció_taula ::=
[CONSTRAINT nom_restricció]
{ UNIQUE (atribut1, atribut2, ...)
| PRIMARY KEY (atribut1, atribut2, ...)
| FOREIGN KEY (atribut1, atribut2, ...)
REFERENCES nom_taula [(atribut1, atribut2, ...)]
[MATCH {FULL | PARTIAL | SIMPLE}]
[Directriu_esborrat]
[Directriu_modificació]
| CHECK (condició)}
[quan_comprovar]
Bases de Datos
DSIC-UPV
19
2.6. SQL: llenguatge de definició de dades (DDL)
Directriu_esborrat ::= ON DELETE
{CASCADE
| SET NULL
| SET DEFAULT
| NO ACTION}
Directriu_esborrat_modificació::= ON UPDATE
{CASCADE
| SET NULL
| SET DEFAULT
| NO ACTION}
Bases de Datos
DSIC-UPV
20
10
2.6. SQL: llenguatge de definició de dades (DDL)
quan_comprovar:= [NOT] DEFERRABLE
[INITIALLY {INMEDIATE | DEFERRED}]
„ Si no s'utilitza aquesta clàusula la restricció es defineix com no
diferible i amb mode immediat.
„
„
„
NOT DEFERRABLE INITIALLY IMMEDIATE
NOT DEFERRABLE
INITIALLY IMMEDIATE
„ DEFERRABLE INITIALLY IMMEDIATE defineix una restricció
com diferible i amb mode per defecte immediat.
„
DEFERRABLE
„ INITIALLY DEFERRED defineix una restricció com diferible i amb
mode per defecte diferit.
„
DEFERRABLE INITIALLY DEFERRED
„ NOT DEFERRABLE INITIALLY DEFERRED està prohibida.
Bases de Datos
DSIC-UPV
21
11