Sei sulla pagina 1di 8

Unidad 5

Vistas

[MySQL Intermedio]
De Intecap-TICS
[La mayora de administradores de bases de datos no ponen a disposicin la base de datos real, en su lugar muestran vistas o tablas virtuales a los usuarios comunes de una base de datos; los Objetivos de la Unidad son adquirir las competencias de los siguientes contenidos.]

Unidad 5

MySQL Intermedio
MS, ACERCA DE SQL Las unidades anteriores presentaban las sentencias de definicin y manipulacin de datos del lenguaje SQL. Esta unidad presenta otra dimensin de SQL, al mostrar sentencias que facilitan la gestin de sus datos. En particular nos centramos en aquellas tcnicas que le permiten compartir sus datos con otros usuarios del sistema. El concepto de vista (view) La mayora de los sistemas de gestin de base de datos proporcionan alguna utilidad que permite la definicin de una vista local de la base de datos. Vista local es una expresin genrica que se corresponde con algn subconjunto de la base de datos que puede ser manipulado por un usuario en particular o un grupo de usuarios. La vista local, generalmente, viene definida por el administrador de la base de datos, que, desde entonces, pone accesible al usuario. Debido a que, generalmente, se define una vista local para cada usuario, una base de datos dada puede tener definidas muchas vistas locales. Tanto MySQL como SQL, soportan el concepto de vista local mediante el comando CREATE VIEW. La vista local sirve a dos propsitos: 1. Seguridad: El usuario no tiene acceso a ningn dato que no sea parte de su vista local. Adems, el usuario slo estar autorizado a desarrollar ciertas operaciones sobre los datos de su vista local. Esto previene contra la recuperacin o modificacin accidental o intencionada que no est dentro de la vista local definida. 2. Facilidad: El usuario puede prescindir de todos los datos que no estn dentro de su vista local. De hecho, el usuario no debera ni siquiera estar enterado de que existen. Puesto que, generalmente., una vista local es mucho ms pequea que toda la base de datos, la vista del usuario queda simplificada, con lo que eliminamos una de las posibles fuentes de confusin. A continuacin, describiremos una vista SQL y lo relacionaremos con el concepto de vista local. La sentencia CREATE VIEW se utiliza para definir el contenido de una vista SQL, que, a veces, denominamos tabla virtual. Decimos tabla puesto que el usuario percibe y manipula una vista SQL del mismo modo que se ha procesado la tabla CURSO a lo largo de todo este curso. Decimos virtual, porque las filas y columnas de una vista no existen realmente. La vista corresponde a los datos de una tabla que fueron previamente establecidos con una sentencia CREATE TABLE. Para introducir un poco la terminologa SQL utilizaremos la frase tabla base para designar cualquier tabla creada con un comando CREATE TABLE. Todas las tablas referenciadas anteriormente en este curso (CURSO, PERSONAL, DEPARTAMENTO, etc.) son tablas base. El comando CREATE VIEW se utiliza para establecer una vista SQL que est definida en alguna tabla base. Se puede entender una vista SQL como una ventana dentro de un subconjunto de una tabla base. La Figura 5.1 representa la perspectiva de una vista SQL. Posteriormente, veremos que la sentencia CREATE VIEW proporciona ms poder y flexibilidad que la que implica la analoga de una ventana. Una vez que establecemos una vista, podemos ejecutar una sentencia SELECT que referencie esa vista. El sistema asociar la vista SQL con una tabla base, y extraer y visualizar, entonces, los datos de la tabla base. Esto significa que una vista no contiene datos duplicados de una tabla base. No tiene absolutamente ningn dato puesto que no es una tabla real. Todo el proceso se hace con los datos almacenados en la tabla base. Posteriormente, estudiaremos cmo el sistema puede hacer esto. Esta unidad presentar los detalles de la sentencia CREATE VIEW. Veremos que una vista SQL se percibe, exactamente, como una tabla (virtual). Para relacionar una vista SQL con el
2

MySQL es Software Libre

MySQL Intermedio
concepto general de vista local, observe que un usuario debera tener una vista local que consista en varias tablas. Algunas de esas tablas deberan ser tablas base y otras deberan ser vistas SQL. Tambin veremos que la sentencia CREATE VIEW define, nicamente, el contenido de la tabla virtual. No especfica qu usuario puede acceder a una vista, ni tampoco qu operaciones se pueden desarrollar frente a esa vista. El siguiente curso avanzado se presentar la sentencia GRANT que desempea estas funciones. All veremos que el concepto de vista local se implementa, generalmente, con la utilizacin, tanto de la sentencia CREATE VIEW como GRANT. Recuerde especialmente, en esta unidad, que el trmino vista implica vista SQL. Tabla base

Vista= ventana de la tabla base. Figura 5.1. Concepto de vista SENTENCIA CREATE VIEW El primer ejemplo representa la analoga entre ventana y vista, de que hablamos antes, al crear una vista que se corresponde con un subconjunto de columnas y filas de la tabla CURSO. Sentencia modelo 5.1: Crear una vista (tabla virtual), denominada CISC, que contenga slo las filas correspondientes a cursos ofrecidos por el departamento CIS. La vista deber contener todas las columnas de la tabla CURSO, con la excepcin de la columna CDEPT. La secuencia, de izquierda a derecha de las columnas, deber ser CNOMBRE, CNO, CRED, CTARIFA y CDESCP. mysql> -> -> -> CREATE SELECT FROM WHERE VIEW CISC AS CNOMBRE, CNO, CRED, CTARIFA, CDESCP CURSO CDEPT = 'CIS';

MySQL es Software Libre

Respuesta del sistema Al igual que los anteriores comandos CREATE, el sistema visualizara un mensaje confirmando la creacin correcta de la vista. Comentarios 1. El nombre de la vista, CISC, sigue, inmediatamente, a los comandos CREATE VIEW. Los nombres de vista se formulan de acuerdo a las mismas reglas que se aplican a los nombres de tabla. Un nombre de vista, al igual que un nombre de tabla, tiene un prefijo que define el sistema como el id de autorizacin del usuario que ha introducido el comando CREATE VIEW. 2. El comando AS sigue al nombre de vista. La definicin de vista sigue al comando AS. Observe que esta definicin es, simplemente, nuestra querida vieja amiga la sentencia SELECT. En este ejemplo sera:
3

MySQL Intermedio
SELECT CNOMBRE, CNO, CRED, CTARIFA, CDESCP FROM CURSO WHERE CDEPT = 'CIS'; Si furamos a ejecutar directamente esta sentencia SELECT, el resultado correspondera al contenido de la definicin de vista que desebamos. Aqu no se ejecuta la sentencia SELECT. En su lugar, el sistema utiliza su catlogo para salvar el texto de la sentencia SELECT como una definicin de vista. Posteriormente veremos cmo utiliza esta definicin. 3. En este ejemplo, la vista adopta los nombres de sus columnas de la tabla CURSO. La sentencia modelo 5.4 demostrar una versin de la sentencia CREATE VIEW que permite la asignacin de diferentes nombres de columnas. PROCESAMIENTO DE VISTAS Generalmente, podemos manipular vistas, del mismo modo que lo hemos hecho con las tablas base a lo largo de este curso. Sin embargo, hay algunas excepciones importantes que describiremos, poco a poco, a travs de ejemplos. En general, ver que muchas vistas pueden ser tratadas exactamente como tablas base, sobre todo porque, a menudo, nos referiremos a una vista como tabla, en vez de como tabla virtual. Modelo de consulta 5.2: Visualizar toda la tabla CISC. mysql> SELECT * -> FROM CISC; +----------------------+-----+------+---------+-------------------------+ | CNOMBRE | CNO | CRED | CTARIFA | CDESCP | +----------------------+-----+------+---------+-------------------------+ | INTROD. A LOS CC | C11 | 3 | 100.00 | PARA NOVATOS | | ESTRUC. DE DATOS | C22 | 3 | 50.00 | MUY UTIL | | MATEMAT. DISCRETAS | C33 | 3 | 0.00 | ABSOLUTAMENTE NECESARIO | | CIRCUITOS DIGITALES | C44 | 3 | 0.00 | AH HA! | | ARQUIT. COMPUTADORAS | C55 | 3 | 100.00 | MAQ. DE VON NEUMAN | | BASE D. RELACIONALES | C66 | 3 | 500.00 | IMPRESCINDIBLE | +----------------------+-----+------+---------+-------------------------+

MySQL es Software Libre

Comentario La sintaxis de la sentencia SELECT (y de todas las dems sentencias SQL de manipulacin de datos) permanece invariable. En este ejemplo veremos que el nombre de vista se referencia en la clusula FROM. Ejercicio 5A. Crear una vista denominada FNOMINA sobre la tabla PERSONAL, la vista debe contener nombre del personal y su cargo. Modelo de consulta 5.3: Para cualquier fila de la tabla CIS, con una tarifa mayor o igual a $ 100, visualizar su nombre seguido de la tarifa. Clasificar el resultado por nombre de curso en secuencia ascendente. mysql> -> -> -> SELECT FROM WHERE ORDER CNOMBRE, CTARIFA CISC CTARIFA >= 100 BY CNOMBRE;
4

MySQL Intermedio
+----------------------+---------+ | CNOMBRE | CTARIFA | +----------------------+---------+ | ARQUIT. COMPUTADORAS | 100.00 | | BASE D. RELACIONALES | 500.00 | | INTROD. A LOS CC | 100.00 | +----------------------+---------+ Comentarios 1. Observe, de nuevo, que la vista se referencia como una tabla base. En el ejemplo actual se utiliza una clusula WHERE y una ORDER BY para seleccionar filas especficas desde la vista, y para visualizarlas en una determinada secuencia de filas. SELECT FROM WHERE AND ORDER CNOMBRE, CTARIFA CURSO CDEPT = 'CIS' CTARIFA >= 100 BY CNOMBRE;

2. Esta consulta poda haber sido realizada ejecutando la siguiente sentencia que hace referencia a la tabla base. Sin embargo, esta sentencia es ms compleja. Da por supuesto que el usuario conoce la existencia y el contenido de la tabla CURSO. En muchas ocasiones, sin embargo, el Administrador de la BD slo permite al usuario el acceso a las vistas. ESPECIFICACION DE NOMBRES DE COLUMNAS PARA UNA VISTA Los nombres de columna en la vista CISC fueron adoptados de la tabla CURSO. El siguiente ejemplo representa un mtodo para nombrar, explcitamente, las columnas de una vista y, despus, referenciarlas en una sentencia SELECT. Sentencia modelo 5.4: Crear una vista denominada VCURSOSCAROS, correspondiente a las filas de la tabla CURSO, en donde la tarifa exceda de $ 150. Las columnas de la vista corresponden a CNO, CNOMBRE y CTARIFA. Sus nombres respectivos en la vista son CNUMERO, NOMBRE CURSO y TARIFA CARA.

MySQL es Software Libre

mysql> -> -> ->

CREATE VIEW VCURSOSCAROS (CNUMERO, NOMBRE_CURSO, TARIFA_CARA) AS SELECT CNO, CNOMBRE, CTARIFA FROM CURSO WHERE CTARIFA > 150;

Respuesta del sistema Como en los anteriores comandos CREATE, el sistema visualizara un mensaje, confirmando la correcta creacin de la vista. Comentarios 1. En la sentencia CREATE VIEW, los nombres de columnas de la vista se especifican despus del nombre de la vista. Observe que van entre parntesis y separados por comas. 2. Seleccionamos comenzar el nombre de vista con la V para recordar que esta tabla es realmente una vista. Esta tcnica es til, pero no necesaria. Modelo de consulta 5.5: Visualizar la tabla VCURSOSCAROS, ordenada por nombre de curso.
5

MySQL Intermedio
mysql> SELECT * -> FROM VCURSOSCAROS -> ORDER BY NOMBRE_CURSO; +---------+----------------------+-------------+ | CNUMERO | NOMBRE_CURSO | TARIFA_CARA | +---------+----------------------+-------------+ | C66 | BASE D. RELACIONALES | 500.00 | | T44 | COMUNISMO | 200.00 | | P33 | EXISTENCIALISMO | 200.00 | +---------+----------------------+-------------+ Comentario La sentencia SELECT debe referenciar los nombres de columnas como se definieron en la vista. Estos nombres aparecen como cabeceras de columna en la visualizacin del resultado. Si intentsemos referenciar los nombres de columna como en la tabla base, nos dara error. REGLAS PARA CREATE VIEW La Figura 5.2 mostraba el formato general de la palabra clave CREATE VIEW. Aadimos los detalles de especificacin de nombres de columna y la formulacin de una sentencia SELECT vlida. Como indicaba el Ejemplo 5.1, la designacin de nombres de columna puede ser opcional. Si no especifica los nombres de columna, la vista adoptar los nombres de columna de la tabla base. El Ejemplo 5.4 representaba una situacin en donde asignbamos a las columnas de VCURSOSCAROS diferentes nombres que a su correspondiente tabla base. Observe que podamos permitir que las columnas de VCURSOSCAROS adoptasen los nombres de columna de la tabla CURSO. A veces, se requiere que el creador de una vista especifique los nombres de columna. El una situacin en donde la vista contiene una columna de valores derivados. En este tipo de casos es necesario especificar, explcitamente, los nombres de columnas, puesto que los valores de una columna no corresponden directamente a ninguna (tabla base) columna predefinida y, por lo tanto, no pueden adoptar su nombre. No se permite casi ninguna sentencia SELECT como definicin de vista. Hay dos limitaciones que se aplican al SQL interactivo:

MySQL es Software Libre

1. La clusula ORDER BY no puede estar incluida en la sentencia SELECT. Esto es lgico, si consideramos que el modelo relacional expone que una tabla (tablas base y vista) no deberan tener ninguna secuencia predefinida. Podemos adjuntar la clusula ORDER BY a la sentencia SELECT que recupera datos de una vista. 2. La clusula UNION (que no se trata en este curso) no puede estar incluida en la sentencia SELECT. Esta restriccin no es tan comprensible. Sin embargo, se aplica a las actuales versiones de MySQL. Al margen de estas restricciones, cualquier sentencia SELECT vlida puede servir como definicin de vista. En concreto, incluye sentencias que implicaran funciones constructoras dentro de columnas, expresiones, la operacin join, y subconsultas. Adems, la clusula FROM puede, incluso, especificar una vista, lo que significa que es posible definir una vista de otra vista.
CREATE VIEW nombre-de-vista (col1, col2,...) AS SELECT ______________________ FROM ______________________ WHERE ______________________ casi ninguna sentencia SELECT

Figura 5.2. Sentencia CREATE VIEW.


6

MySQL Intermedio
Esta posibilidad de utilizar una sentencia SELECT para definir una vista es sencilla, potente y, en general, elegante. En todos los ejemplos anteriores, la ejecucin directa de una sentencia SELECT era interpretada por el sistema como la definicin de un subconjunto de la base de datos a recuperar o visualizar (esta perspectiva se concuerda con la teora de una base de datos relacional que define la estructura de una base de datos como una coleccin de conjuntos, y el lenguaje de consulta como una flotacin que define un subconjunto a recuperar). En el contexto de CREATE VIEW, la sentencia SELECT constituye la definicin de un subconjunto (por ejemplo, una ventana), que es una ventana dentro de una tabla base. Restricciones de actualizacin en las ventanas Las ventanas pueden actualizarse utilizando los comandos INSERT (INSERTAR), UPDATE (ACTUALIZAR) y DELETE (BORRAR) presentadas en el curso bsico de MySQL. Estas actualizaciones de vistas se aplican a la correspondiente tabla base. Sin embargo, hay unas cuantas restricciones referentes a las actualizaciones de vistas que resumiremos al final de esta unidad. Por el momento, simplemente haremos la observacin de que una vista, que tambin podramos definir como imagen espejo de algn subconjunto de filas y columnas de una tabla base, puede ser actualizada. Por lo tanto, las vistas CISC y VCURSOSCAROS pueden ser referenciadas dentro de comandos INSERT (INSERTAR), DELETE (BORRAR), UPDATE (ACTUALIZAR). Las modificaciones se aplicarn a sus valores correspondientes en su respectiva tabla CURSO. Muchas vistas, como CISC y VCURSOSCAROS, se definen de modo que no puedan aplicarse a ellas las restricciones de que hablbamos antes. El administrador de la base de datos poda crear esas vistas y hacerlas accesibles a los usuarios sin ni siquiera decirles a stos que esas tablas son vista. Estos usuarios puede que ni siquiera estn familiarizados con el concepto o sintaxis del comando CREATE VIEW. Ellos, simplemente, llaman a estas tablas utilizando las sentencias SELECT, INSERT, UPDATE y DELETE. No podemos actualizar otras vistas que no son imagen espejo de alguna parte de una tabla. Los usuarios de una vista con restricciones de actualizacin deben estar al tanto de que estn trabajando con una vista. Por este motivo, recomendamos utilizar V como c arcter inicial del nombre de una vista (pero es una connotacin arbitraria). Resumen de restricciones de vista

MySQL es Software Libre

1. La sentencia CREATE VIEW no puede contener ORDER BY o UNION. 2. Una vista es denominada vista slo de lectura, lo que significa que las sentencias INSERT, UPDATE y DELETE no pueden aplicarse a la vista, si su definicin contiene alguna de estas caractersticas: a. b. c. d. e. Una columna de funciones constructoras (por ejemplo, SUM, MAX, etc.). DISTINCT. GROUPBY. HAVING. Varias tablas referenciadas en la clusula FROM. La mayora de las veces, no tiene sentido actualizar una vista definida utilizando las anteriores caractersticas de SQL. Con lo cual, las restricciones no son realmente un problema. Sin embargo, existe la posibilidad de crear una vista que incluya las caractersticas anteriores y en donde sea lgico realizar una operacin de actualizacin. En este caso, las restricciones son un problema menor. La solucin es, simplemente, actualizar la tabla base.

MySQL Intermedio
3. Cuando una vista contiene una columna de valores derivados de una columna de funciones constructoras, una consulta no puede referenciar la columna derivada en una clusula WHERE o HAVING. Ejercicios 5B. Crear una vista, denominada VTHEO PERSONAL, basada en la tabla PERSONAL. Reflejar la informacin ENOMBRE, ESALARIO y ECARGO para todos los miembros del personal asignados al departamento de TEOLOGIA (THEO). Crear una vista que presente el salario medio de todos los miembros del personal asignados a cada departamento. La vista se denominar VPERSONAL_MED y tendr los nombres de columna de DEPT y SALARIO MEDIO. Crear una vista, basada en la vista VTHEO_PERSONAL, que presente el total de salarios de todos los miembros del personal en el departamento THEO.

5C.

5D.

BIBLIOGRAFIAS 1. FUNDAMENTOS DE BASES DE DATOS. Abraham S. Henry F. Cuarta edicin. McGrawHill. Mxico. 2008. 2. Beginning Oracle SQL. Oracle Lex de Haan Et.Al Apress. USA. 2009. 3. http://dev.mysql.com/doc/refman/5.6/en/ MySQL 5.6 Reference Manual

MySQL es Software Libre

Potrebbero piacerti anche

  • Guía Matemática 2016-7 PDF
    Guía Matemática 2016-7 PDF
    Documento5 pagine
    Guía Matemática 2016-7 PDF
    Kev Oliva
    0% (1)
  • Reglas de Plurales en Inglés
    Reglas de Plurales en Inglés
    Documento2 pagine
    Reglas de Plurales en Inglés
    wvaliente2011
    100% (1)
  • Presente Simple Continuo
    Presente Simple Continuo
    Documento2 pagine
    Presente Simple Continuo
    wvaliente2011
    Nessuna valutazione finora
  • Laboratorio 14
    Laboratorio 14
    Documento7 pagine
    Laboratorio 14
    wvaliente2011
    Nessuna valutazione finora
  • Laboratorio 13
    Laboratorio 13
    Documento9 pagine
    Laboratorio 13
    wvaliente2011
    Nessuna valutazione finora
  • Laboratorio 11
    Laboratorio 11
    Documento20 pagine
    Laboratorio 11
    wvaliente2011
    Nessuna valutazione finora
  • Capitulo 16
    Capitulo 16
    Documento18 pagine
    Capitulo 16
    wvaliente2011
    Nessuna valutazione finora
  • Capitulo 13
    Capitulo 13
    Documento17 pagine
    Capitulo 13
    wvaliente2011
    Nessuna valutazione finora
  • Capitulo 14
    Capitulo 14
    Documento23 pagine
    Capitulo 14
    wvaliente2011
    Nessuna valutazione finora
  • Capitulo 15
    Capitulo 15
    Documento18 pagine
    Capitulo 15
    wvaliente2011
    Nessuna valutazione finora
  • Capitulo 6
    Capitulo 6
    Documento25 pagine
    Capitulo 6
    wvaliente2011
    Nessuna valutazione finora
  • Capitulo 10
    Capitulo 10
    Documento13 pagine
    Capitulo 10
    wvaliente2011
    Nessuna valutazione finora
  • Capitulo 8
    Capitulo 8
    Documento34 pagine
    Capitulo 8
    wvaliente2011
    Nessuna valutazione finora