Download Transparencias RA-MA tema 6

Document related concepts
no text concepts found
Transcript
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 [email protected];
FIN CAPITULO 6