Upload
tais-giomar-ramos-prado
View
7
Download
1
Embed Size (px)
Citation preview
BASES DE DATOS IBASES DE DATOS I
VISTAS
curso 2008
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..
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]];]];
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’;
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 ;;
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;
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.
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
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
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
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
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.