Práctica 3 - users.dsic.upv.esusers.dsic.upv.es/~jllabres/doc/prac3-6.pdf · 2 El lenguaje SQL....

16
1 Práctica 3: El lenguaje SQL (2ª parte). (6ª sesión). 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. (ORACLE) Práctica 4. Estudio del SGBD ORACLE. Programa de prácticas:

Transcript of Práctica 3 - users.dsic.upv.esusers.dsic.upv.es/~jllabres/doc/prac3-6.pdf · 2 El lenguaje SQL....

1

Práctica 3:

El lenguaje SQL (2ª parte).

(6ª sesión).

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. (ORACLE)

Práctica 4. Estudio del SGBD ORACLE.

Programa de prácticas:

2

El lenguaje SQL.

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

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

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

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

3

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.

4

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

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.

5

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.

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

6

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.

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.

7

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.

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.

8

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.

9

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_atributo {RESTRICT | CASCADE} }

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

El lenguaje SQL.

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.

10

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.

Objeto es una relación o una vista del esquema.

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.

11

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

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.

12

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.

13

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.

14

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.

15

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.

cod_proo nombredirecciónteléfono

o categoríacod_dep

Profesor

Relación básica

cod_proo nombredirecciónteléfono

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

16

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.