práctica 3: el lenguaje sql (2ª parte). definición de...

13
Práctica 3: El lenguaje SQL (2ª parte). Definici ón de datos Práctica 1. Introducci ón al uso de una BD relacional (ACCESS). Práctica 2. Representaci ón de la realidad en el modelo relacional de datos. Práctica 3. El lenguaje SQL. (ORACLE9) Práctica 4. Estudio del SGBD ORACLE9. Programa de prácticas: El lenguaje SQL. estudio del lenguaje de definici ón de datos del SQL. definir una base de datos relacional en el sistema ORACLE9. estudio del mecanismo de disparadores (triggers) en el sistema ORACLE9. Objetivos (2ª parte): El lenguaje SQL. Lenguaje SQL: ü manipulación de datos SELECT (consulta) INSERT (inserción de tuplas) DELETE (borrado de tuplas) UPDATE (modificación de tuplas) ü definición de datos cod_pro nombre teléfono categor í a cod_dep Profesor cod_dep nombre director teléfono Departamento cod_asg nombre semestre teo prac cod_dep Asignatura cod_pro cod_asg gteo gprac Docencia Clave primaria Clave Ajena El lenguaje SQL. Departamento (cod_dep: tira(5), nombre: tira(100), director tira(50), teléfono : tira(11)) CP={cod_dep}, VNN={nombre} Asignatura (cod_asg: tira(5), nombre: tira(100), semestre: tira(2), teo: real, prac: real, cod_dep: tira(5)) CP={cod_asg}, VNN={nombre, teo, prac, semestre} CAj={cod_dep} Departamento f(cod_dep)=cod_dep Profesor (cod_pro : tira(5), nombre: tira(50), teléfono: tira(11), categoría: tira(3), cod_dep: tira(5) ) CP={cod_pro}, VNN={nombre, categoría} CAj={cod_dep} Departamento f(cod_dep)=cod_dep Docencia ( cod_asg: tira(3), cod_pro: tira(3), gteo: entero, gprac: entero) CP={cod_pro, cod_asg}, VNN={gteo, gprac} CAj={cod_asg} Asignatura f(cod_asg)=cod_asg CAj={cod_pro} Profesor f(cod_pro)=cod_pro El lenguaje SQL.

Upload: lymien

Post on 19-Sep-2018

228 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Práctica 3: El lenguaje SQL (2ª parte). Definición de ...users.dsic.upv.es/~jdonoso/BDA/prac3_segunda_x6.pdf · • estudio del mecanismo de disparadores ( triggers) en el sistema

1

Práctica 3:

El lenguaje SQL (2ª parte).Definición de datos

Práctica 1. Introducci ón al uso de una BD relacional (ACCESS).

Práctica 2. Representaci ón de la realidad en el modelo relacional de datos.

Práctica 3. El lenguaje SQL. (ORACLE9)

Práctica 4. Estudio del SGBD ORACLE9.

Programa de prácticas:

El lenguaje SQL.

• estudio del lenguaje de definici ón de datos del SQL.

• definir una base de datos relacional en el sistema ORACLE9.

• estudio del mecanismo de disparadores (triggers) en el sistema ORACLE9.

Objetivos (2ª parte):

El lenguaje SQL.

Lenguaje SQL:

ü manipulación de datos

• SELECT (consulta)

• INSERT (inserción de tuplas)

• DELETE (borrado de tuplas)

• UPDATE (modificación de tuplas)

ü definición de datos

cod_pro

nombre

teléfono

categoría

cod_dep

Profesor

cod_dep

nombre

director

teléfono

Departamento

cod_asg

nombre

semestre

teo

prac

cod_dep

Asignatura

cod_pro

cod_asg

gteo

gprac

Docencia

Clave primaria Clave Ajena

El lenguaje SQL.

Departamento (cod_dep: tira(5), nombre: tira(100), director tira(50),teléfono : tira(11))

CP={cod_dep}, VNN={nombre}

Asignatura (cod_asg: tira(5), nombre: tira(100), semestre: tira(2), teo: real, prac: real, cod_dep: tira(5))

CP={cod_asg}, VNN={nombre, teo, prac, semestre}CAj={cod_dep} →Departamento f(cod_dep)=cod_dep

Profesor (cod_pro : tira(5), nombre: tira(50), teléfono: tira(11),categoría: tira(3), cod_dep: tira(5) )

CP={cod_pro}, VNN={nombre, categoría}CAj={cod_dep} → Departamento f(cod_dep)=cod_dep

Docencia ( cod_asg: tira(3), cod_pro: tira(3), gteo: entero, gprac: entero)CP={cod_pro, cod_asg}, VNN={gteo, gprac}CAj={cod_asg} → Asignatura f(cod_asg)=cod_asgCAj={cod_pro} → Profesor f(cod_pro)=cod_pro

El lenguaje SQL.

Page 2: Práctica 3: El lenguaje SQL (2ª parte). Definición de ...users.dsic.upv.es/~jdonoso/BDA/prac3_segunda_x6.pdf · • estudio del mecanismo de disparadores ( triggers) en el sistema

2

El lenguaje SQL.

Definición de un esquema relacional en SQL.üdefiniciones de dominios

CREATE DOMAIN ...

üdefiniciones de relaciones: esquema y restricciones.

CREATE TABLE ...

üdefiniciones de restricciones de integridad generales

CREATE ASSERTION ...

üdefiniciones de vistas

CREATE VIEW ...

üdefiniciones de autorizaciones de acceso

GRANT ...

esquema lógico

esquema externo

seguridad

ORACLE

ORACLE

ORACLE

esquema ::= CREATE SCHEMA

AUTHORIZATION usuario

lista_elemento_esquema

elemento_esquema ::= definición_dominio

| definición-relación-básica

| definición-restricción

| definición-vista

| definición-operación-grant

Lenguaje de definición de datos en SQL

El lenguaje SQL.

NO ORACLE

NO ORACLE

Definición de dominios

definición_dominio ::= CREATE DOMAIN nom_dominio [AS] tipo_dato[DEFAULT {NULL | valor}]

[lista_restricción_dominio]

restricción_dominio : := [CONSTRAINT nombre_restricción] CHECK (condición_búsqueda)[cuando_comprobar]

cuando_comprobar::= [NOT] DEFERRABLE

El lenguaje SQL.

NO ORACLEDefinición de relación básica

definición_relaci ón_básica ::= CREATE TABLE nom_relación

(lista_elemento_relación_básica )

elemento-relaci ón-básica ::= definición-atributo

| restricción_relación

definición_atributo ::= nom_atributo { tipo _datos | nom_dominio }

[DEFAULT {valor | NULL}]

[lista_restricción_atributo]

El lenguaje SQL.

NO ORACLE

El lenguaje SQL en ORACLE: Definición de relación básica

Definición_relación_básica ::= CREATE TABLE nom_relación(elemento_relación1,elemento_relación2)

elemento_relación ::= definición_atributo| restricción_relación

definición_atributo ::= nom_atributo tipo_datos[DEFAULT (expresión)][restricción_atributo1, restricción_atributo2, …]

tipo_datos ::= CHAR (longitud)| VARCHAR2 (longitud)| NUMBER [(precisión[, escala])]| DATE

Restricciones sobre 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-búsqueda)}

[cuando-comprobar]

El lenguaje SQL.

NO ORACLE

SÓLO DÉBIL

Page 3: Práctica 3: El lenguaje SQL (2ª parte). Definición de ...users.dsic.upv.es/~jdonoso/BDA/prac3_segunda_x6.pdf · • estudio del mecanismo de disparadores ( triggers) en el sistema

3

Restricciones sobre atributos

restricción_atributo ::=

[CONSTRAINT nombre_restricción]

{NOT NULL

| UNIQUE

| PRIMARY KEY

| REFERENCES nom_relación [(nom_atributo)]

[tipo_integridad_referencial]

[directriz_borrado]

[directriz_actualizaci ón]

| CHECK (condici ón_búsqueda) }

[cuándo_comprobar]

El lenguaje SQL.

NO ORACLE

SÓLO DÉBIL

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}

El lenguaje SQL.

NO ORACLE

NO ORACLE

El lenguaje SQL en ORACLE: Restricciones sobre atributos

restricción_atributo ::= [CONSTRAINT nom_restricción]{[NOT] NULL| UNIQUE| PRIMARY KEY| REFERENCES nom_relación* [(nom_atributo*)]

[ON DELETE {CASCADE|SET NULL}]| CHECK (condici ón)}

[cuándo_comprobar]restricción_relación ::=[CONSTRAINT nom_restricción]

{ UNIQUE (nom_atributo1, nom_atributo2, …)| PRIMARY KEY (nom_atributo1, nom_atributo2, …)| FOREIGN KEY (nom_atributo1, nom_atributo2, …)

REFERENCES nom_relación [(nom_atributo1, nom_atributo2, …)][ON DELETE {CASCADE|SET NULL}]

| CHECK (condici ón)} [cuándo_comprobar]

cuándo_comprobar ::=[NOT] DEFERRABLE [INITIALLY {IMMEDIATE | DEFERRED}]

Restricciones sobre la base de datos

definición_restricción ::=

CREATE ASSERTION nombre-restricción

CHECK (condición-búsqueda)

[cuando-comprobar]

El lenguaje SQL.

NO ORACLE

Nota:La sem ántica de cada una de las versiones de la cl áusula cuando_comprobar es la siguiente: - si no se utiliza esta cláusula la restricci ón se define como no diferible y con modo inmediato. - la versión DEFERRABLE INITIALLY IMMEDIATE (resp. DEFERRED) define una restricci ón como diferible y con modo por defecto inmediato (resp. diferido). - la versi ón NOT DEFERRABLE INITIALLY IMMEDIATE coincide con los valores por defecto.- la versi ón NOT DEFERRABLE INITIALLY DEFERRED está prohibida. - la versi ón DEFERRABLE (resp. NOT DEFERABLE) define una restricci ón como diferible (resp. no diferible) y con modo por defecto inmediato.- la versión INITIALLY IMMEDIATE define una restricción como no diferible y con modo inmediato.- la versi ón INITIALLY DEFERRED define una restricci ón como diferible y con modo por defecto diferido.

cuando_comprobar:=

[[NOT] DEFERRABLE] [INITIALLY {IMMEDIATE | DEFERRED}]

El lenguaje SQL.

•La instrucción SQL que permite cambiar, localmente en una transacción, el modo de una restricción definida como diferible, es:

SET CONSTRAINT {comalista_nombre_restricción | ALL}{IMMEDIATE | DEFERRED}.

•Cada restricción especificada en la lista debe ser diferible y la opción ALL hace referencia a todas las restricciones diferibles del esquema de la base de datos.•El alcance del cambio producido por la instrucción SET CONSTRAINT es la transacción en la que se incluye o el fragmento de transacción hasta la siguiente aparición de la misma instrucción.•Si se incluye la instrucción en medio de la transacción con la opción IMMEDIATE, las restricciones afectadas por la instrucción son comprobadas cuando se ejecuta ésta, si alguna de estas restricciones falla, la instrucción SET falla y el modo de las restricciones permanece sin modificar.

El lenguaje SQL.

Page 4: Práctica 3: El lenguaje SQL (2ª parte). Definición de ...users.dsic.upv.es/~jdonoso/BDA/prac3_segunda_x6.pdf · • estudio del mecanismo de disparadores ( triggers) en el sistema

4

Modificación de relaciones

modificación_relación::= ALTER TABLE nombre_relación

{ADD (definición_atributo)|ALTER [COLUMN ] (nombre_atributo)

{DROP DEFAULT| SET DEFAULT {literal

| funcion_sistema| NULL} }

| DROP [COLUMN ] nombre_at ributo {RESTRICT | CASCADE} }

borrado_relaci ón::= DROP TABLE nombre_relación {RESTRICT | CASCADE}

El lenguaje SQL.

DIFERENTE EN ORACLE

El lenguaje SQL en ORACLE: Modificación de relaciones

modificaci ón_relaci ón ::= ALTER TABLE nom_relaci ón{ADD (elemento_relación1, elemento_relaci ón2, …)| MODIFY (definición_atributo1, definici ón_atributo2, …)| DROP COLUMN ( nom_atributo1 , nom_atributo2, …)

[CASCADE]| {DROP| [VALIDATE | NOVALIDATE] ENABLE| DISABLE } (restricción) }

restricci ón ::= {PRIMARY [CASCADE]| UNIQUE (nom_atributo1, nom_atributo2, …) [CASCADE]| CONSTRAINT nom_restricción }

4 ADD permite añadir nuevos atributos o restricciones a una relaci ón.4 MODIFY permite modificar la definición de los atributos.4 ENABLE (resp. DISABLE) permite activar (resp. desactivar) una restricci ón de

integridad. Con la opci ón VALIDATE (opción por defecto), el sistema se asegura que al activar una restricción los datos almacenados en la base de datos en el momento de la activación satisfacen la restricción.

4 DROP permite borrar atributos o restricciones de integridad. 4 CASCADE borra en cascada cualquier restricción de integridad definida en el

esquema que dependa del elemento que se acaba de borrar.

Definición de vistasdefinición_vista::=

CREATE VIEW nombre_vista [(comalista_nombre_atributo)] AS sentencia_SELECT[WITH CHECK OPTION]

borrado_vista::= DROP VIEW nombre_vista {RESTRICT | CASCADE}

El lenguaje SQL.

Definición de un esquema externo en SQL.

El lenguaje SQL en ORACLE: Definición de vistas

definición_vista ::= CREATE [OR REPLACE] VIEW nom_vista

[(nom_atributo1, nom_atributo2, …)] AS sentencia_SELECT[WITH CHECK OPTION]

El lenguaje SQL en ORACLE: Definición de vistas

4 Restricciones de las actualizaciones sobre vistas en Oracle 9:– Una vista definida por una SELECT que

contiene operadores conjuntistas (UNION, INTERSECT,…), el operador DISTINCT, funciones agregadas (SUM, AVG, …) o la cláusula GROUP BY no es actualizable.

– Si la vista está definida sobre una única relaci ón 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.

El lenguaje SQL en ORACLE: Definición de vistas

4 Restricciones de las actualizaciones sobre vistas en Oracle 9:– Si la vista está definida sobre una concatenación

de relaciones, la actualizaci ón está sometida a las siguientes restricciones adicionales:

• La actualización sólo puede modificar una de las relaciones básicas.

• La actualización modificará la relación básica que cumpla la propiedad de conservación de la clave, es decir aquella relación tal que su clave primaria podr ía ser también clave de la vista si sus atributos fuesen seleccionados por la SELECT que define 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.

Page 5: Práctica 3: El lenguaje SQL (2ª parte). Definición de ...users.dsic.upv.es/~jdonoso/BDA/prac3_segunda_x6.pdf · • estudio del mecanismo de disparadores ( triggers) en el sistema

5

definición_privilegio::=GRANT {ALL | SELECT | INSERT [comalista_columna ]

| DELETE | UPDATE [comalista_columna ]}ON objeto TO {PUBLIC | comalista_usuario}[WITH GRANT OPTION]

eliminación_privilegio::=REVOKE [GRANT OPTION FOR ]

{ALL | SELECT | INSERT [comalista_columna ]| DELETE | UPDATE [comalista_columna ]}

ON objeto TO {PUBLIC | comalista_usuario}{RESTRICT | CASCADE}

Definición de privilegios de acceso en SQL

El lenguaje SQL.

Objetoes una relación o una vista del esquema.

El lenguaje SQL en ORACLE: Definición de privilegios

definición_operación_grant ::= GRANT privilegio_sistema1, privilegio_sistema2,…

ON objetoTO {PUBLIC | usuario1, usuario2, …}[WITH ADMIN OPTION]

4 usuario es el identificador de un usuario.4 Con la cláusula PUBLIC se transmiten los privilegios

a todos los usuarios.4 La cl áusula WITH ADMIN OPTION concede permiso

para ceder a terceros los privilegios obtenidos.

cod_pro

nombre

teléfono

categoría

cod_dep

Profesor

cod_dep

nombre

director

teléfono

Departamento

cod_asg

nombre

semestre

teo

prac

cod_dep

Asignatura

cod_pro

cod_asg

gteo

gprac

Docencia

clave primaria Clave ajena

El lenguaje SQL. El lenguaje SQL.

Restricciones de integridad (adicionales):• los créditos deben ser valores reales positivos

•los grupos de clase deben ser enteros positivos

• las categor ías de un profesor son: TEU, TU, CEU y CU

• un profesor con categor ía TEU no puede dar mas de 33 créditos y un profesor con categor ía TU no puede dar mas de 22 créditos.

• todo profesor debe estar adscrito a un departamento

• toda asignatura debe estar adscrita a un departamento

• el director de un departamento debe ser un profesor y sólo se puede ser director de un departamento

•las directrices de mantenimiento de la integridad referencial son:

–clave ajena director en Departamento: borrado a nulos, actualización en cascada

–clave ajena cod_dep en Profesor : borrado restrictivo, actualización en cascada

–clave ajena cod_dep en Asignatura: borrado restrictivo, actualización en cascada

–clave ajena cod_pro en Docencia: borrado en cascada, actualización en cascada

–clave ajena cod_asg en Docencia: borrado restrictivo, actualización en cascada

El lenguaje SQL. CREATE SCHEMA Docencia-UPV

CREATE TABLE Departamento( cod_dep CHAR(5),

nombre VARCHAR(100) NOT NULL,director VARCHAR(50),teléfono CHAR(11),CONSTRAINT CP_dpto PRIMARY KEY (cod_dep) )

CREATE TABLE Profesor( cod_pro CHAR(5),

nombre VARCHAR(50) NOT NULL,teléfono CHAR(11),categoría CHAR(3) NOT NULLcod_dep CHAR(5),CONSTRAINT CP_prof PRIMARY KEY (cod_pro),CONSTRAINT CAj_prof_dpto FOREIGN KEY (cod_dep)

REFERENCES Departamento (cod_dep) )

El lenguaje SQL.

VERSIÓN 1

Page 6: Práctica 3: El lenguaje SQL (2ª parte). Definición de ...users.dsic.upv.es/~jdonoso/BDA/prac3_segunda_x6.pdf · • estudio del mecanismo de disparadores ( triggers) en el sistema

6

CREATE TABLE Asignatura( cod_asg CHAR(5),

nombre VARCHAR(100) NOT NULL,semestre CHAR(2) NOT NULL,teo NUMBER(3,1) NOT NULL, prac NUMBER(3,1) NOT NULL,cod_dep CHAR(5) ,CONSTRAINT CP_asg PRIMARY KEY (cod_asg),CONSTRAINT CAj_asg_dpto FOREIGN KEY (cod_dep)

REFERENCES Departamento (cod_dep) )CREATE TABLE Docencia( cod_pro CHAR(5),

cod_asg CHAR(5),gteo INTEGER NOT NULL, gprac INTEGER NOT NULL,

CONSTRAINT CP_doc PRIMARY KEY (cod_pro, cod_asg),CONSTRAINT CAj_doc_prof FOREIGN KEY (cod_pro )

REFERENCES Profesor (cod_pro),CONSTRAINT CAj_doc_asg FOREIGN KEY (cod_asg)

REFERENCES Asignatura (cod_asg) );

El lenguaje SQL.

CREATE SCHEMA Docencia-UPV

CREATE DOMAIN créditos AS NUMBER(1,1) CHECK (value>=0)CREATE DOMAIN grupos AS INTEGER CHECK (value>=0)

CREATE TABLE Departamento( cod_dep CHAR(5),

nombre VARCHAR(100) NOT NULL,director CHAR(5) UNIQUE

REFERENCES Profesor (cod_pro) ON UPDATE CASCADEON DELETE SET NULL,

teléfono CHAR(11),CONSTRAINT CP_dpto PRIMARY KEY (cod_dep) )

El lenguaje SQL.

VERSIÓN 2

CREATE TABLE Profesor( cod_pro CHAR(5),

nombre VARCHAR(50) NOT NULL,teléfono CHAR(11),categoría CHAR(3) NOT NULL

CHECK categoría IN (‘TEU’, ‘TU’, ‘CEU’, ‘CU’) cod_dep CHAR(5) NOT NULL,CONSTRAINT CP_prof PRIMARY KEY (cod_pro),CONSTRAINT CAj_prof_dpto FOREIGN KEY (cod_dep)

REFERENCES Departamento (cod_dep)ON UPDATE CASCADE )

El lenguaje SQL.

CREATE TABLE Asignatura( cod_asg CHAR(5),

nombre VARCHAR(100) NOT NULL,semestre CHAR(2) NOT NULL,teo créditos NOT NULL,prac créditos NOT NULL,cod_dep CHAR(5) NOT NULL,CONSTRAINT CP_asg PRIMARY KEY (cod_asg),CONSTRAINT CAj_asg_dpto FOREIGN KEY (cod_dep)

REFERENCES Departamento (cod_dep)ON UPDATE CASCADE )

El lenguaje SQL.

CREATE TABLE Docencia( cod_pro CHAR(5),

cod_asg CHAR(5),gteo grupos NOT NULL,gprac grupos NOT NULL,

CONSTRAINT CP_doc PRIMARY KEY (cod_pro, cod_asg),CONSTRAINT CAj_doc_prof FOREIGN KEY (cod_pro )

REFERENCES Profesor (cod_pro)ON DELETE CASCADEON UPDATE CASCADE,

CONSTRAINT CAj_doc_asg FOREIGN KEY (cod_asg) REFERENCES Asignatura (cod_asg)

ON UPDATE CASCADE)

El lenguaje SQL. CREATE ASSERTION RI_docencia

CHECK

(NOT EXISTS ( SELECT * FROM PROFESOR P

WHERE (P.categoría=“TEU”

AND

(SELECT SUM (gteo*teo + gprac*prac)

FROM Docencia NATURAL JOIN Asignatura

WHERE cod_pro = P.cod_pro) >33 )

OR

(P.categoría=“TU”

AND

(SELECT SUM (gteo*teo + gprac*prac)

FROM Docencia NATURAL JOIN Asignatura

WHERE cod_pro=P.cod_pro) >22 ) ) )

El lenguaje SQL.

Page 7: Práctica 3: El lenguaje SQL (2ª parte). Definición de ...users.dsic.upv.es/~jdonoso/BDA/prac3_segunda_x6.pdf · • estudio del mecanismo de disparadores ( triggers) en el sistema

7

cod_pro

o nombredirecciónteléfono

o categoríacod_dep

Profesor

Relación básica

cod_proo nombredirección

teléfonoo categoría

Prof_DSIC

Relación derivada (vista)

CREATE VIEW Prof_DSIC AS

SELECT cod_pro, nombre, dirección, teléfono, categoría

FROM Profesor

WHERE cod_dep=‘DSIC’

El lenguaje SQL. Definición de un esquema externo en SQL (vistas).

El lenguaje SQL.

El lenguaje de definición de datos de ORACLE:Las principales diferencias respecto al estándar SQL son:

üno contempla el concepto de esquema de base de datos

üno permite la definición de dominios

üsólo contempla el tipo de integridad referencial débil

üsólo admite directrices de restauración de la integridad referencial frente a la operación de borrado (ON DELETE)

ülas restricciones de integridad generales que se pueden definir con la cláusula CHECK son muy limitadas (no se pueden usar subconsultas, ni funciones agregadas, ....)

üno admite la sentencia CREATE ASSERTION.

Práctica 3:

El lenguaje SQL (2ª parte).

Disparadores

Práctica 1. Introducci ón al uso de una BD relacional (ACCESS).

Práctica 2. Representaci ón de la realidad en el modelo relacional de datos.

Práctica 3. El lenguaje SQL. (ORACLE9)

Práctica 4. Estudio del SGBD ORACLE9.

Programa de prácticas:

El lenguaje SQL.

• estudio del lenguaje de definici ón de datos del SQL.

• definir una base de datos relacional en el sistema ORACLE8.

• estudio del mecanismo de disparadores (triggers) en el sistema ORACLE9.

Objetivos (2ª parte):

cod_pro

nombre

teléfono

cod_dep

Profesor

cod_dep

nombre

director

teléfono

Departamento

cod_asg

nombre

semestre

teo

prac

cod_dep

Asignatura

cod_pro

cod_asg

gteo

gprac

Docencia

Clave primaria Clave Ajena

El lenguaje SQL.

Page 8: Práctica 3: El lenguaje SQL (2ª parte). Definición de ...users.dsic.upv.es/~jdonoso/BDA/prac3_segunda_x6.pdf · • estudio del mecanismo de disparadores ( triggers) en el sistema

8

Mecanismo de disparadores en ORACLE

evento - condición - acci ón

evento: especifica el suceso a cuya ocurrencia debe responder el sistema .

condición: especifica el contexto en el cual la regla cuyo evento se haproducido debe ser ejecutada.

acción: especifica las acciones que deben ser ejecutadas por el sistema como respuesta a la ocurrencia del evento cuando la condición es cierta .

Los disparadores permiten modelar un comportamiento activo (autónomo) del sistema como respuesta a la ocurrencia de sucesos.

regla de actividaddisparador ≡

Mecanismo de disparadores en ORACLE

Ejemplo1: “cuando un profesor se da de baja (es borrado) sus datos deben registrarse en un histórico de profesores”.

cod_pro

nombre

teléfono

cod_dep

Profesor

cod_pro

nombre

teléfono

cod_dep

fecha

Histórico-Profesores

Borrado Inserción

SGBD

Mecanismo de disparadores en ORACLE

cod_pro nombre teléfono cod_dep

JCC Juan C. Casamayor Ródenas 7796 DSIC

RFC Robert Fuster i Capilla 6789 MAT

JBD José V. Benlloch Dualde 5760 DISCA

MAF María Alpuente Frasnedo 3560 DSIC

CPG Cristina Pérez Guillot 7439 IDM

JTM José M. Torralba Martínez 4590 OEM

IGP Ignacio Gil Pechuán 3423 OEM

DGT Daniel Gil Tomás 5679 DISCA

MCG Matilde Celma Giménez 7756 DSIC

Profesor

DELETE FROM Profesor WHERE cod_pro=“RFC”

INSERT INTO Histórico-Profesores

VALUES ( “RFC”, “Robert Fuster Capilla”, 6789, MAT, SYSDATE)

SGBD

Hist órico-Profesor

PPP Pedro Pérez Puerta 7795 DISCA 12/12/97

RFC RobertFusterCapilla 6789 MAT 12/12/99

acci ón

evento

Mecanismo de disparadores en ORACLE

CREATE OR REPLACE TRIGGER borrado_profesor

AFTER DELETE ON Profesor

FOR EACH ROW

BEGIN

INSERT INTO Histór ico-Profesores

VALUES (:OLD.cod_pro, :OLD.nombre, :OLD.tel éfono, :OLD.cod_dep, SYSDATE);

END;

Después (AFTER) de un borrado en Profesor (evento) por cada tuplaborrada (FOR EACH ROW ) se insertará una tupla en Histórico-Profesores (acción) construida con los valores viejos (OLD) de la tuplaborrada.

cod_pro nombre teléfono cod_dep

JCC Juan C. Casamayor Ródenas 7796 DSIC

RFC Robert Fuster i Capilla 6789 MAT

JBD José V. Benlloch Dualde 5760 DISCA

MAF María Alpuente Frasnedo 3560 DSIC

CPG Cristina Pérez Guillot 7439 IDM

JTM José M. Torralba Martínez 4590 OEM

IGP Ignacio Gil Pechuán 3423 OEM

DGT Daniel Gil Tomás 5679 DISCA

MCG Matilde Celma Giménez 7756 DSIC

Profesor

DELETE FROM Profesor WHERE cod_pro=“RFC”

evento

OLD.cod_pro OLD.nombre OLD.teléfono OLD.cod_dep

Mecanismo de disparadores en ORACLE Mecanismo de disparadores en ORACLE

Parámetros del evento: campos de la tupla actualizada.

OLD.nombre_campo: valor antes de la actualización

NEW.nombre_campo: valor después de la actualización

INSERT: NEW.nombre_campo

DELETE: OLD .nombre_campo

UPDATE: OLD .nombre_campo, NEW.nombre_campo

Dependiendo del tipo de evento sólo tienen sentido un tipo de parámetros (NEW o OLD)

Page 9: Práctica 3: El lenguaje SQL (2ª parte). Definición de ...users.dsic.upv.es/~jdonoso/BDA/prac3_segunda_x6.pdf · • estudio del mecanismo de disparadores ( triggers) en el sistema

9

Mecanismo de disparadores en ORACLE

cod_pro nombre teléfono cod_dep

JCC Juan C. Casamayor Ródenas 7796 DSIC

RFC Robert Fuster i Capilla 6789 MAT

JBD José V. Benlloch Dualde 5760 DISCA

MAF María Alpuente Frasnedo 3560 DSIC

CPG Cristina Pérez Guillot 7439 IDM

JTM José M. Torralba Martínez 4590 OEM

IGP Ignacio Gil Pechuán 3423 OEM

DGT Daniel Gil Tomás 5679 DISCA

MCG Matilde Celma Giménez 7756 DSIC

Profesor

DELETE FROM Profesor WHERE cod_dep=“DSIC”

Hist órico-Profesor

JCC Juan C. Casamayor Ródenas 7796 DSIC 12/12/99

MAF María Alpuente Frasnedo 3560 DSIC 12/12/99

MCG Matilde Celma Giménez 7756 DSIC 12/12/99

INSERT INTO Histórico-Profesores

VALUES ( )

SGBD

Mecanismo de disparadores en ORACLE

Ejemplo2: “cuando se realiza una actualización en Profesor se debe hacer un registro de seguridad en la tabla Accesos”.

cod_pro

nombre

teléfono

cod_dep

Profesor

nro

usuario

fecha

Accesos

DELETE- UPDATE-INSERTINSERT

SGBD

acci ón

evento

Mecanismo de disparadores en ORACLE

CREATE OR REPLACE TRIGGER borrado_profesor

AFTER INSERT OR UPDATE OR DELETE ON Profesor

BEGIN

INSERT INTO Accesos

VALUES ( nro, USER, SYSDATE);

END;

Después (AFTER) de una operación (inserción, borrado o actualización) en Profesor (evento) se insertará una tupla en Accesos (acción) independientemente del numero de tuplas actualizadas.

Nota: USER y SYSDATE son funciones predefinidas que devuelven elidentificador del usuario conectado y la fecha del sistema.

FOR EACH ROW

Ejemplo 3:

Restricción de integridad: “Los profesores que imparten la asignatura “EST1” deben ser del departamento de Estadística (EST)”.

Mecanismo de disparadores en ORACLE

SQL

Restricción de integridad: Los profesores que imparten la asignatura “EST1” deben ser del departamento de Estadística (EST).

CREATE ASSERTION CHECK

( NOT EXISTS

(SELECT *

FROM Docencia NATURAL JOIN Profesor

WHERE Docencia.cod_asg = “EST1”

AND

Profesor.cod_dep <> ”EST” )

Mecanismo de disparadores en ORACLE

El lenguaje de definición de datos de ORACLE:Las principales diferencias respecto al estándar SQL son:

üno contempla el concepto de esquema de base de datos

üno permite la definición de dominios

üsólo contempla el tipo de integridad referencial débil

üsólo admite directrices de restauración de la integridad referencial frente a la operación de borrado (ON DELETE)

ülas restricciones de integridad generales que se pueden definir con la cláusula CHECK son muy limitadas (no se pueden usar subconsultas, ni funciones agregadas, ....)

üno admite la sentencia CREATE ASSERTION.

Mecanismo de disparadores en ORACLE

Page 10: Práctica 3: El lenguaje SQL (2ª parte). Definición de ...users.dsic.upv.es/~jdonoso/BDA/prac3_segunda_x6.pdf · • estudio del mecanismo de disparadores ( triggers) en el sistema

10

Restricción de integridad: Los profesores que imparten la asignatura “EST1” deben ser del departamento de Estadística (EST).

CREATE ASSERTION CHECK

( NOT EXISTS

(SELECT *

FROM Docencia NATURAL JOIN Profesor

WHERE Docencia.cod_asg = “EST1”

AND

Profesor.cod_dep <> ”EST” )

ORACLE

Mecanismo de disparadores en ORACLE

La restricción de integridad que no se puede definir en ORACLE puede ser comprobada por medio de disparadores.

Restricción de integridad: Los profesores que imparten la asignatura “EST1” deben ser del departamento de Estadística (EST).

Mecanismo de disparadores en ORACLE

Se deben analizar los eventos relevantes para la restricción, es decir que pueden violarla, y definir los disparadores necesarios.

Operaciones sobre la relación Docencia

Operaciones sobre la relación Profesor

DocenciaINSERT

si cod_dep de NEW.cod_pro <>”EST”

entonces RECHAZAR

UPDATE (cod_asg)

UPDATE (cod_pro)

Evento Condición Acción

REGLA DE ACTIVIDAD

Mecanismo de disparadores en ORACLE

NEW.cod_asg=EST1

Disparadores sobre Docencia:

Mecanismo de disparadores en ORACLE

CREATE OR REPLACE TRIGGER control_docencia1

AFTER INSERT OR UPDATE OF cod_asg, cod_pro ON Docencia

FOR EACH ROW

WHEN NEW.cod_asg = ‘EST1’

DECLARE X CHAR(4);

BEGIN

SELECT P.cod_dep INTO X FROM Profesor P WHERE P.cod-prof = : NEW.cod-prof;

IF X <> “EST” THEN RAISE-APPLICATION-ERROR ( ---, ‘actualización no válida’)

END IF;END

evento

condición acción

ORACLE

Profesor

si NEW.cod_profimparte EST1 entonces RECHAZAR

UPDATE (cod_dep)

Evento Condición Acción

REGLA DE ACTIVIDAD

Mecanismo de disparadores en ORACLE

OLD.cod_dep=EST

AND

NEW.cod_dep<>EST

Disparadores sobre Profesor:

Mecanismo de disparadores en ORACLE

CREATE OR REPLACE TRIGGER control_docencia2

AFTER UPDATE OF cod_dep ON Profesor

FOR EACH ROW

WHEN OLD.cod_dep = ‘EST’ AND NEW.cod_dep<>”EST”

DECLARE X INTEGER;

BEGIN

SELECT COUNT(*) INTO X FROM Docencia D WHERE D.cod-prof = :NEW.cod-prof AND D.cod_asg=“EST1”

IF X <> 0 THEN RAISE-APPLICATION-ERROR ( ---, ‘actualización no válida’)

END IF;END

evento

condición acción

ORACLE

Page 11: Práctica 3: El lenguaje SQL (2ª parte). Definición de ...users.dsic.upv.es/~jdonoso/BDA/prac3_segunda_x6.pdf · • estudio del mecanismo de disparadores ( triggers) en el sistema

11

Mecanismo de disparadores en ORACLE

Ejemplo4:”en la relación Profesor existe un atributo derivado créditos que debe ser mantenido automáticamente por el sistema”.

Ley de derivación del atributo créditos: “el valor del atributo créditos de Profesor es la suma de todos los créditos que en la relación Docencia aparecen impartidos por el profesor”

cod_pro

nombre

teléfono

cod_dep

créditos*

Profesor

cod_dep

nombre

director

teléfono

Departamento

cod_asg

nombre

semestre

teo

prac

cod_dep

Asignatura

cod_pro

cod_asg

créditos

Docencia

Clave primaria Clave Ajena

Mecanismo de disparadores en ORACLE

* atributo derivado

CREATE TABLE Profesor

(cod_pro CHAR(5),

nombre VARCHAR(50) NOT NULL,

teléfono CHAR(11),

cod_dep CHAR(5),

créditos NUMBER (4,1) DEFAULT 0,

CONSTRAINT CP_prof PRIMARY KEY (cod_pro),

CONSTRAINT CAj_prof_dpto FOREIGN KEY (cod_dep)

REFERENCES Departamento(cod_dep))

Mecanismo de disparadores en ORACLE

El atributo derivado créditos debe ser mantenido automáticamente por el sistema.

DocenciaINSERT

aplicar la ley de derivación del atributo créditos en Profesor y actualizar dicho atributo:

UPDATE (creditos)

DELETE

UPDATE (cod_pro)

Evento Condición Acción

REGLA DE ACTIVIDAD

UPDATE (creditos) Profesor

Mecanismo de disparadores en ORACLE

CREATE TRIGGER total_creditosAFTER INSERT OR DELETE OR UPDATE OF creditos, cod_pro ON DocenciaFOR EACH ROWBEGINIF INSERTING THEN

UPDATE Profesor SET créditos=cr éditos+:NEW.creditosWHERE cod_pro=:NEW.cod_pro;

ELSEIF UPDATING THENIF :NEW.cod_pro != :OLD.cod_prof THEN

UPDATE Profesor SET créditos=cr éditos+:NEW.creditosWHERE cod_pro=:NEW.cod_pro;

UPDATE Profesor SET créditos=cr éditos -:OLD.creditosWHERE cod_pro=:OLD.cod_pro;

ELSEUPDATE Profesor

SET créditos + :NEW.creditos - :OLD.creditos;WHERE cod_pro=:NEW.cod_pro;

END IF;ELSE

UPDATE Profesor SET creditos=creditos - :OLD.creditosWHERE cod_pro=:OLD.cod_pro;

END IF;END;

evento

acci ón

Mecanismo de disparadores en ORACLE

definición_regla :=

CREATE [OR REPLACE ] TRIGGER nombre_regla

{BEFORE | AFTER | INSTEAD OF}

evento [OR evento [OR evento [...] ]] ON {nombre_tabla | nombre_vista}

[[REFERENCING OLD AS nombre_ref [NEW AS nombre_ref] ]

[FOR EACH ROW [WHEN ( condición ) ] ]

bloque PL/SQL

Mecanismo de disparadores en ORACLE

evento := {INSERT | DELETE | UPDATE [OF nom_atributo1, nom_atributo2...]}

Sólo los disparadores de tipo FOR EACH ROW pueden llevar condición.

Los disparadores de tipo INSTEAD OF sólo actúan sobre vistas.

Page 12: Práctica 3: El lenguaje SQL (2ª parte). Definición de ...users.dsic.upv.es/~jdonoso/BDA/prac3_segunda_x6.pdf · • estudio del mecanismo de disparadores ( triggers) en el sistema

12

Creación: CREATE TRIGGER nombre_regla ……..

Borrado: DROP TRIGGER nombre_regla

Modificaci ón: REPLACE TRIGGER nombre_regla

Recompilación: ALTER TRIGGER nombre_regla COMPILE

Consulta: consultas a las tablas del diccionario del sistema: USER_TRIGGERS, ALL_TRIGGERS, DBA_TRIGGERS

Prioridad entre reglas: no existe

Habilitar y deshabilitar reglas:

ALTER TRIGGER nombre_regla [ENABLE | DISABLE]

ALTER TABLE nombre_relación [{ENABLE | DISABLE} ALL TRIGGERS]

Mecanismo de disparadores en ORACLE

Tipos de reglas: 4 tipos de reglas

[FOR EACH STATEMENT] FOR EACH ROW

BEFORE

AFTER

se ejecuta la regla una vez antes de la ejecuci ón del evento

se ejecuta la regla una vez después de la ejecución del evento

se ejecuta la regla una vez antes de la actualizaci ón de cada tupla afectada por el evento

se ejecuta la regla una vez después de la actualización de cada tupla afectada por el evento

Mecanismo de disparadores en ORACLE

Mecanismo de disparadores en ORACLE

Anexo: Lenguaje PL/SQL de ORACLEEstructura de un bloque PL/SQL:

DECLARE

Sección de declaraci ón

de variables

BEGIN

Sentencias del bloque

END

Sección de declaraci ón de variables:

- Variables locales al bloque:

nombre_variable tipo_dato

tipo_dato::= {NUMBER | CHAR ( ) | DATE }

(las declaraciones de esta sección deben ir separadas por punto y coma)

Mecanismo de disparadores en ORACLE

Sentencias del cuerpo del bloque PL/SQL:- Secuencia_de_sentencias::= sentencia; [sentencia;] ...

- Sentencia de selección:

IF condición THEN secuencia_de_sentencias

[ELSE secuencia_de_sentencias] END IF;

- Sentencias de repetición:

WHILE condición LOOP

secuencia_de sentencias ;

END LOOP;

FOR contador IN mínimo .. máximo LOOP

secuencia_de_sentencias ;

END LOOP;

Mecanismo de disparadores en ORACLE

Sentencias del cuerpo del bloque PL/SQL:- Sentencia de asignaci ón :

nombre_variable := expresión

-Sentencias SQL:

INSERT, DELETE, UPDATE, SELECT... INTO.......

- Sentencias de entrada-salida: dbms_output.put_line ('mensaje'). Para usar esta función el paquete dbms_output debe estar activado, esto se hace con la sentencia SQL SET SERVEROUTPUT ON .

Mecanismo de disparadores en ORACLE

Page 13: Práctica 3: El lenguaje SQL (2ª parte). Definición de ...users.dsic.upv.es/~jdonoso/BDA/prac3_segunda_x6.pdf · • estudio del mecanismo de disparadores ( triggers) en el sistema

13

Manejo de errores:Si durante la ejecución de una regla (trigger) se produce un error predefinido en el sistema o definido por el usuario, entonces se anulan todas las actualizaciones realizadas por la acción de la regla así como el evento que la activó.

La sentencia RAISE_APPLICATION_ERROR (nro_error, ' mensaje' ) provoca la ocurrencia del error de número interno nro_error y envía al usuario el mensaje 'mensaje'. (nro_error debe ser un número negativo entre -20000 y -20999).

Mecanismo de disparadores en ORACLE

Se desea diseñar una base de datos para la gestión de una pequeña biblioteca de un departamento. Después de realizar el análisis del sistema, se han identificado los requerimientos que van a realizarse con más frecuencia; éstos son:

-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 del 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.

Ejercicio de prácticas.

Algunas restricciones de integridad que se han detectado son:

-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.

Realizar las siguientes tareas:

•definir el esquema relacional de la base datos anterior (usando los conceptos del modelo relacional).

•definir la base de datos en el sistema ORACLE9.

•realizar actualizaciones y consultas sobre la base de datos creada.

Ejercicio de prácticas.