Capítulo 6 Otros objetos de la base de datos ÍNDICE CAPÍTULO 6 Vistas • Ventajas • Vistas en MySQL Enlaces a otras bases de datos • Enlaces entre tablas de distintos gestores • Vínculos a bases de datos remotas Sinónimos • Públicos • Privados VISTAS Son consultas almacenadas Representan una sección o parte de la base de datos Pertenecen al nivel externo VISTAS Ventajas • Representan un subconjunto de los datos de una o varias tablas • Simplifican la realización de combinaciones (JOIN) de tablas al poder definirlas como una única vista • Pueden actuar como tablas agregadas pudiendo resumir en una tabla el resultado de funciones de agregación aplicadas sobre varias tablas • Ocultan la complejidad de los datos evitando que el cliente deba conocer todo el diseño relacional subyacente a una base de datos • Ocupan poco espacio ya que solo se almacena su definición • Proporcionan una capa adicional de seguridad ya que evitan el acceso directo a los datos de las tablas subyacentes Vistas en MySQL I Las vistas se crean con el comando CREATE VIEW Pueden contener casi cualquier tipo de consulta Restricciones: • Que no se usen tablas temporales • No usar cláusulas GROUP BY ni HAVING • No usar uniones ni reuniones externas • No usar consultas correlacionadas • Para el caso de reuniones INNER podemos actualizar o insertar siempre y cuando los campos afectados sean únicamente los de una de las tablas implicadas en la reunión Vistas en MySQL II Hay vistas actualizables • Admiten comandos UPDATE, INSERT, DELETE • Se requiere relación uno a uno entre los registros de la vista y la tabla subyacente • En el caso de comandos INSERT se requiere además -No debe haber nombres duplicados -Debe incluir todas las columnas de las tablas que no tengan indicado un valor por defecto. -Las columnas de la vista deben ser referencias a columnas simples y no columnas derivadas Vistas en MySQL: comandos I Creación de vistas CREATE [OR REPLACE] [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}] [DEFINER = { user | CURRENT_USER }] [SQL SECURITY { DEFINER | INVOKER }] VIEW view_name [(column_list)] AS select_statement [WITH [CASCADED | LOCAL] CHECK OPTION] Vistas en MySQL: comandos II Creación de vistas Ejemplo Para poder dar acceso a sus datos a un jugador de la base de datos liga podemos crear la siguiente vista con el algoritmo MERGE: CREATE ALGORITHM=MERGE VIEW vdatos_jugador as SELECT * FROM jugador WHERE id_jugador=identificador_jugador$$ Así, mediante esta vista cada jugador solo tendrá acceso a sus datos. Vistas en MySQL: comandos III Modificación de vistas ALTER [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}] VIEW nombre_vista [(columnas)] AS sentencia_select [WITH [CASCADED | LOCAL] CHECK OPTION] Eliminación, DROP VIEW DROP VIEW [IF EXISTS] nombre_vista [, nombre_vista] ... [RESTRICT | CASCADE] Vistas en MySQL: comandos IV Consulta de vistas Para la obtención de información de definición de una vista usamos SHOW CREATE VIEW. También podemos acceder directamente a la tabla VIEWS de INFORMATION_SCHEMA. Por ejemplo, para ver información de una vista en la base de datos test usamos lo siguiente: SELECT VIEW_DEFINITION FROM INFORMATION_SCHEMA.VIEWS WHERE TABLE_SCHEMA ='test'; Enlaces a otras bases de datos I Enlaces entre tablas de distintos gestores • Permiten que otros usuarios puedan acceder a nuestros datos sin conocer nuestro gestor • Permiten usa herramientas de otros gestores nuestros gestor de datos. manteniendo Enlaces a otras bases de datos II Enlaces entre tablas de distintos gestores Ejemplo En el siguiente ejemplo explicamos cómo acceder a tablas MySQL desde un gestor como base del paquete ofimático LibreOffice. 1. Una vez descargado e instalado el paquete de la página oficial (http://www.libreoffice.org/) lo iniciamos desde Inicio→Programas→LibreOffice→Base. 2. A continuación veremos un cuadro de diálogo similar a lo siguiente: Enlaces a otras bases de datos III Enlaces entre tablas de distintos gestores 3. Ahora se nos pregunta por si queremos usar JDBC u ODBC como medio de conexión. Elegimos JDBC por ser más óptimo. 4. En este momento debemos indicar los parámetros de nuestro servidor: base de datos, nombre o IP del equipo servidor y puerto en el que escucha el servidor MySQL. 5. Finalmente se nos pide el nombre de usuario, así como si la base de datos requiere contraseña o no y después de finalizar podremos guardar la base de datos con el nombre que queramos en nuestro equipo. 6. Cuando abramos el fichero guardado podremos trabajar con la base de datos tal como haríamos desde MySQL. Enlaces a otras bases de datos IV Vínculos a bases remotas: Oracle (Database link) Databaselink es un puntero desde una base de datos hacia otra base de datos remota Ejemplo Si tengo la tabla t1 en mi base de datos oracle1 y quiero hacer un SELECT sobre la t2 de la base de datos oracle2. Si creamos en oracle1 un database link llamado por ejemplo oracle2dblink esta consulta sería tan simple como ejecutar: SELECT * FROM t2@oracle2dblink Desde nuestra base de datos oracle1, podríamos estar consultando los datos de la tabla t2 de la base de datos remota oracle2. Enlaces a otras bases de datos V Vínculos a bases remotas: Oracle (Database link) Comando creación database links CREATE [ SHARED ] [ PUBLIC ] DATABASE LINK dblink [ CONNECT TO { CURRENT_USER | user IDENTIFIED BY password [ dblink_authentication ] } | dblink_authentication ] [ USING 'connect_string' ] ; Enlaces a otras bases de datos VI Vínculos a bases remotas: Oracle (Database link) Ejemplo creación database links Database link para enlazar con la base de datos liga de un servidor remoto. CREATE DATABASE LINK liga_DBLINK CONNECT TO root IDENTIFIED BY root USING '(DESCRIPTION = (ADDRESS = (PROTOCOL = TCP) (HOST = Hostname)(PORT = 1521)) (CONNECT_DATA = (SID = liga)))‘ Crearíamos entonces un dblink llamado “liga_dblink” que nos permite conectar desde la base de datos actual a la base remota liga, situada en el host=”Hostname” y con el SID=”liga″ Ahora si quisiéramos usar el enlace, por ejemplo para una consulta, ejecutamos la SELECT concatenando al identificador de la tabla “@liga_dblink”: SELECT id,name FROM Usuarios@liga_dblink; Enlaces a otras bases de datos VII Vínculos a bases remotas: Oracle (Database link) Tipos de enlaces en Oracle • Private: el propietario es el usuario que crea el enlace. En este caso se crea el enlace dentro de un esquema específico del servidor. Solo el propietario puede acceder al enlace. • Public: el propietario es el usuario especial PUBLIC. Es un enlace visible por todos los usuarios de las bases de datos en el servidor permitiéndoles acceso a los objetos de la base de datos remota correspondiente. • Global: el propietario es PUBLIC. Se da cuando Oracle usa un servidor de directorio (Directory Server) en cuyo caso el enlace es accesible desde cualquier servidor dentro del directorio mediante los servicios de nombres de red (net service name). Enlaces a otras bases de datos VIII Vínculos a bases remotas: Oracle (Database link) Tipos de usuarios de enlaces en Oracle • Usuarios conectados: son los que se usan cuando no se especifica ninguno en la creación del link (no tiene que ser el que creó el enlace, sino el que lo usa en ese momento). • Usuario actual: es un usuario global especial especificado mediante CURRENT_USR en la creación del enlace. • Usuario fijo: es aquel cuyas credenciales están incluidas en la definición del enlace. Éstas se usarán para la autenticación en el equipo servidor remoto. Enlaces a otras bases de datos IX Vínculos a bases remotas: Motor FEDERATED de MySQL Una forma alternativa de crear enlaces en MySQL Las tablas federadas se crean con el comando DDL CREATE TABLE incluyendo la opción CONNECTION con la siguiente sintaxis: scheme://user_name[:password]@host_name[:port_num]/db_na me/tbl_name Enlaces a otras bases de datos X Vínculos a bases remotas: Motor FEDERATED de MySQL Ejemplo Supongamos que disponemos de dos servidores en ejecución, en la misma máquina o en distintas Queremos acceder a una tabla remota en uno de los servidores (dentro de la base de datos test) que se define así: CREATE TABLE remote_table( id int(20) NOT NULL auto_increment, name varchar(32) NOT NULL default '', other int(20) NOT NULL default '0', PRIMARY KEY (id), KEY name (name), KEY other_key (other)) La opción de tabla (ENGINE) puede ser cualquiera Enlaces a otras bases de datos XI Vínculos a bases remotas: Motor FEDERATED de MySQL Ejemplo A continuación, creamos una tabla de tipo FEDERATED en el servidor local para acceder a la tabla remota: CREATE TABLE federated_table ( id int(20) NOT NULL auto_increment, name varchar(32) NOT NULL default '', other int(20) NOT NULL default '0', PRIMARY KEY (id), KEY name (name), KEY other_key (other) ) ENGINE=FEDERATED DEFAULT CHARSET=latin1 CONNECTION='mysql://root@equipo_remoto:9306/test/remote_table; La estructura de esta tabla debe ser exactamente la misma que la de la tabla remota, excepto que la opción de tabla ENGINE debe ser FEDERATED . Sinónimos I Nombre alternativo para una tabla, vista, rutina, secuencia o base de datos Facilitan a los usuarios acceder a objetos de las bases de datos que son propiedad de otros usuarios Simplifican la nomenclatura de los objetos Comando creación/eliminación CREATE [ OR REPLACE ] [ PUBLIC ] SYNONYM [ schema. ]synonym FOR [ schema. ]object [ @ dblink ] ; DROP [PUBLIC] synonym La clausula PUBLIC especifica que el sinónimo es público, es decir visible para todos los usuarios. En otro caso es privado Sinónimos II Ejemplo sinónimos público y privado Para crear un sinónimo privado llamado sequipos sobre la tabla equipos de la base (schema) liga CREATE SYNONYM sequipos FOR liga.equipos; Para crear un sinónimo público sobre la base remota liga en la tabla equipos: CREATE SYNONYM sequipos FOR liga.equipos@remota.sierra.com; FIN CAPITULO 6