12
BASES DE DATOS I BASES DE DATOS I VISTAS curso 2008

VistasOracle.pdf

Embed Size (px)

Citation preview

Page 1: VistasOracle.pdf

BASES DE DATOS IBASES DE DATOS I

VISTAS

curso 2008

Page 2: VistasOracle.pdf

Una VISTA es una Una VISTA es una tabla virtual tabla virtual derivada de otras derivada de otras tablas (que pueden ser tablas base o también otras tablas (que pueden ser tablas base o también otras vistas).vistas).

Sus tuplas no se almacenan sino que se generan a Sus tuplas no se almacenan sino que se generan a partir de las tablas de las que depende (no partir de las tablas de las que depende (no necesariamente existen en forma física, por ello se las necesariamente existen en forma física, por ello se las

Vistas: conceptosVistas: conceptos

necesariamente existen en forma física, por ello se las necesariamente existen en forma física, por ello se las considera considera tablas virtuales)tablas virtuales)

Son útiles para usar, como si fueran tablas, consultas Son útiles para usar, como si fueran tablas, consultas que se efectúan frecuentemente, y también para que se efectúan frecuentemente, y también para cuestiones de cuestiones de seguridadseguridad..

Page 3: VistasOracle.pdf

CREATE VIEW CREATE VIEW <<namename>> [ ( [ ( <<columncolumn>> [, ...] ) ] [, ...] ) ]

AS AS <<queryquery >>

[ WITH [ CASCADE | LOCAL ] CHECK OPTION ][ WITH [ CASCADE | LOCAL ] CHECK OPTION ] ;;

Vistas: SintaxisVistas: Sintaxis

SQL3:SQL3:

En Oracle:En Oracle:

CREATE [OR CREATE [OR REPLACEREPLACE] VIEW ] VIEW

[[FORCE | NOFORCEFORCE | NOFORCE ] ] <<namename> [> [( ( <<columncolumn>> [, ...] )[, ...] )] ]

AS AS <<queryquery>>

[WITH CHECK OPTION [CONSTRAINT [WITH CHECK OPTION [CONSTRAINT constraintconstraint]]]]

[[WITH READ ONLY [CONSTRAINT WITH READ ONLY [CONSTRAINT constraintconstraint]];]];

Page 4: VistasOracle.pdf

PROVEEDORPROVEEDOR ((id_provid_prov, , nombreApnombreAp, situación, ciudad), situación, ciudad)

PRODUCTO PRODUCTO ((id_prodid_prod,, nombre, color, peso, ciudad) nombre, color, peso, ciudad)

ENVIOENVIO ((id_provid_prov, , id_prodid_prod, , cantcant))

Crear una vista de los proveedores cuya situación sea superior a 15.Crear una vista de los proveedores cuya situación sea superior a 15.

CREATE VIEWCREATE VIEW Buenos_proveedoresBuenos_proveedores ((provprov, , sitsit, ciudad ) , ciudad ) ASASSELECT SELECT id_provid_prov, situación, ciudad , situación, ciudad

Definición Definición -- ejemplosejemplos

SELECT SELECT id_provid_prov, situación, ciudad , situación, ciudad FROM PROVEEDORES FROM PROVEEDORES WHERE situación > 15; WHERE situación > 15;

Crear una vista que corresponda a los proveedores cuya situación sea Crear una vista que corresponda a los proveedores cuya situación sea superior a 15 pero que no sean de Capital Federal.superior a 15 pero que no sean de Capital Federal.

CREATE VIEWCREATE VIEW Buenos_proveedores_noCapitalBuenos_proveedores_noCapital ASASSELECT *SELECT *FROM FROM Buenos_proveedoresBuenos_proveedoresWHERE ciudad <> ‘Capital Federal’;WHERE ciudad <> ‘Capital Federal’;

Page 5: VistasOracle.pdf

Los nombres de columna deberán especificarse explícitamente si:Los nombres de columna deberán especificarse explícitamente si: Cualquier columna se deriva de una función, una expresión operacional Cualquier columna se deriva de una función, una expresión operacional

o un literal.o un literal. Dos o mas columnas de la vista reciben el mismo nombreDos o mas columnas de la vista reciben el mismo nombre

CREATE VIEW CREATE VIEW EnvioProveedor (id_prov, cantTotal ) EnvioProveedor (id_prov, cantTotal ) ASASSELECT SELECT id_prov, SUM (cant)id_prov, SUM (cant)FROMFROM ENVIO ENVIO

Definición Definición -- ejemplosejemplos

FROMFROM ENVIO ENVIO GROUP BYGROUP BY id_prov;id_prov;

CREATE VIEWCREATE VIEW Pareja_de_ciudades (ciudadProv, ciudadProd) Pareja_de_ciudades (ciudadProv, ciudadProd) ASASSELECT DISTINCT SELECT DISTINCT PROVEEDORES.ciudad, PRODUCTO.ciudad PROVEEDORES.ciudad, PRODUCTO.ciudad

FROM FROM PROVEEDORES, PRODUCTO, ENVIO PROVEEDORES, PRODUCTO, ENVIO WHERE WHERE PROVEEDORES.id_prov = ENVIO.id_prov AND PROVEEDORES.id_prov = ENVIO.id_prov AND

ENVIO.id_prod = PRODUCTO.id_prod ENVIO.id_prod = PRODUCTO.id_prod ;;

Page 6: VistasOracle.pdf

Consulta y eliminaciónConsulta y eliminación

Consulta: como si fuera una tabla base, por ejemplo Consulta: como si fuera una tabla base, por ejemplo

SELECT *SELECT *

FROM Buenos_proveedoresFROM Buenos_proveedores

WHERE prov < 30WHERE prov < 30

ORDER BY ciudad;ORDER BY ciudad;

DROP VIEW <Nombre-vista > [CASCADE | RESTRICT ];

Ejemplo: DROP VIEW Buenos_proveedores;

Page 7: VistasOracle.pdf

WITH CHECK OPTIONWITH CHECK OPTION: todos los INSERT y UPDATE sobre : todos los INSERT y UPDATE sobre la vista son chequeados para asegurar que los datos la vista son chequeados para asegurar que los datos satisfacen la condición de definición de la Vista.satisfacen la condición de definición de la Vista.

Actualización de VistasActualización de Vistas

Si la vista es actualizable y está definida con:

WITH LOCAL CHECK OPTIONWITH LOCAL CHECK OPTION: chequea la integridad sobre : chequea la integridad sobre la vista.la vista.

WITH CASCADE CHECK OPTIONWITH CASCADE CHECK OPTION : chequea la integridad : chequea la integridad sobre la vista y cualquier vista dependiente.sobre la vista y cualquier vista dependiente.

Page 8: VistasOracle.pdf

CREATE VIEW CREATE VIEW Buenos_proveedoresBuenos_proveedores ((provprov, , sitsit, ciudad ) , ciudad ) ASASSELECT SELECT id_provid_prov, situación, ciudad , situación, ciudad FROMFROM PROVEEDORES PROVEEDORES WHERE WHERE situación > 15situación > 15

WITH CHECK OPTION ; WITH CHECK OPTION ;

InsertInsert intointo Buenos_proveedoresBuenos_proveedores ((provprov, , sitsit, ciudad ) , ciudad ) valuesvalues (10, 20, ’Paris’);(10, 20, ’Paris’);

EjemplosEjemplos

nInsertInsert intointo Buenos_proveedoresBuenos_proveedores ((provprov, , sitsit, ciudad ) , ciudad ) valuesvalues (10, 20, ’Paris’);(10, 20, ’Paris’);

UpdateUpdate Buenos_proveedoresBuenos_proveedores set set situacionsituacion = 5 = 5 wherewhere provprov = 20;= 20;

InsertInsert intointo Buenos_proveedoresBuenos_proveedores ((provprov, , sitsit, ciudad ) , ciudad ) valuesvalues (8, 5, ’Roma’);(8, 5, ’Roma’);

n

X

X

Page 9: VistasOracle.pdf

No toda vista es actualizable.No toda vista es actualizable.

Es SQLEs SQL--actualizable si:actualizable si:

Está definida a partir de una única tabla Está definida a partir de una única tabla Conserva la clave (primaria o alternativa)Conserva la clave (primaria o alternativa) No está definida mediante agrupación o funciones de agregaciónNo está definida mediante agrupación o funciones de agregación

Vistas actualizablesVistas actualizables

No está definida mediante agrupación o funciones de agregaciónNo está definida mediante agrupación o funciones de agregación No incluye la cláusula No incluye la cláusula DistinctDistinct No incluye No incluye subconsultassubconsultas No se define mediante unión, intersección, diferenciaNo se define mediante unión, intersección, diferencia

Page 10: VistasOracle.pdf

No todas las vistas son actualizables:No todas las vistas son actualizables:

CREATE VIEW CREATE VIEW Proveedor_ciudadProveedor_ciudad ((id_provid_prov, ciudad ), ciudad )ASASSELECT SELECT id_provid_prov, ciudad , ciudad FROMFROM PROVEEDORES;PROVEEDORES;

CREATE VIEW CREATE VIEW Situación_ciudadSituación_ciudad (situación, ciudad )(situación, ciudad )ASASSELECT SELECT situación, ciudad situación, ciudad FROMFROM PROVEEDORES;PROVEEDORES;

Ejemplos Ejemplos -- VistasVistas actualizablesactualizables

ACTUALIZABLE

NO ACTUALIZABLE

FROMFROM PROVEEDORES;PROVEEDORES;

InsertInsert intointo Proveedor_ciudadProveedor_ciudad valuesvalues (1,’Roma’);(1,’Roma’);

InsertInsert intointo Situación_ciudadSituación_ciudad valuesvalues (40,’Roma’);(40,’Roma’);

ACTUALIZABLE

n

X

Page 11: VistasOracle.pdf

CREATE VIEW CREATE VIEW Proveedor_LondresProveedor_Londres ASASSELECT SELECT id_provid_prov, , nombreApnombreAp, , situacionsituacion, ciudad , ciudad FROMFROM PROVEEDORESPROVEEDORESWHERE ciudad = ‘Londres’;WHERE ciudad = ‘Londres’;

InsertInsert intointo Proveedor_LondresProveedor_Londres valuesvalues (15,’Martin (15,’Martin LopezLopez’, 5, ‘Tandil’);’, 5, ‘Tandil’);

CREATE VIEW CREATE VIEW EnvioProveedorEnvioProveedor ((id_provid_prov, , cantTotalcantTotal ) ) ASASSELECT SELECT id_provid_prov, SUM (, SUM (cantcant))

Ejemplos Ejemplos -- VistasVistas actualizablesactualizables

ACTUALIZABLE

n

SELECT SELECT id_provid_prov, SUM (, SUM (cantcant))FROMFROM ENVIO ENVIO GROUP BYGROUP BY id_provid_prov;;

InsertInsert intointo EnvioProveedorEnvioProveedor (1,100);(1,100);

NO ACTUALIZABLE

X

Page 12: VistasOracle.pdf

MotivosMotivos porpor loslos queque unauna vistavista nono eses actualizableactualizable enen OracleOracle::

ContieneContiene operadoresoperadores dede conjuntosconjuntos (UNION,(UNION, INTERSECT,INTERSECT,……)) ContieneContiene elel operadoroperador DISTINCTDISTINCT.. ContieneContiene funcionesfunciones agregadasagregadas (SUM,(SUM, AVG,AVG, ....)).. ContieneContiene unauna cláusulacláusula GROUPGROUP BYBY

SeSe definedefine mediantemediante unauna subconsultasubconsulta enen unauna listalista SELECTSELECT

Actualización de Vistas en OracleActualización de Vistas en Oracle

SeSe definedefine mediantemediante unauna subconsultasubconsulta enen unauna listalista SELECTSELECT SeSe definedefine mediantemediante JOINJOIN (con(con excepciónexcepción dede keykey--preservedpreserved tabletable **))

* Una tabla base o una vista es considerada una key-preserved table si cada valor clave (primary-key o unique-key) en cada tabla base es también clave en el resultado de la Join View.