Post on 03-Aug-2018
Í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
VISTASVentajas
• 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 dedatos
• 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.VIEWSWHERE 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 manteniendo nuestros gestor de datos.
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 haciaotra 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_name/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
EjemploA 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=FEDERATEDDEFAULT CHARSET=latin1CONNECTION='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 sequiposFOR liga.equipos;
Para crear un sinónimo público sobre la base remota liga en la tabla equipos:
CREATE SYNONYM sequiposFOR liga.equipos@remota.sierra.com;