de bases de datos

Anuncio
1.264 Tema 8
SQL (cont.)
ODBC
Subconsultas
• Las subconsultas de SQL nos permiten
utilizar los resultados de una consulta
como parte de otra. Subconsultas:
– A menudo, constituyen un modo natural
de escribir una instrucción.
– Permiten dividir una consulta en partes y
reconstruirla.
– Permite realizar algunas consultas que de
otro modo no se podrían llevar a cabo.
Subconsultas
• Obtener un listado de las oficinas cuyo cupo
de ventas excede la suma de los cupos
individuales de los vendedores:
– SELECT Ciudad FROM Oficinas WHERE Objetivo >
???
– ??? es “la suma de los cupos de los vendedores"
o:
• SELECT SUM(Cupo) FROM RepVentas WHERE
OfiRep = NumOfi
• Al combnarlas se obtiene lo siguiente:
– SELECT Ciudad FROM Oficinas WHERE Objetivo >
(SELECT SUM(Cupo) FROM RepVentas WHERE
OfiRep = NumOfi);
Subconsultas
• Las subconsultas siempre figuran como parte de
las cláusulas WHERE (o HAVING).
• Una subconsulta sólo puede dar lugar a una columna
de datos como resultado:
– En la subconsulta SELECT sólo puede haber un campo.
• No permite ORDER BY; no tendría sentido.
• Tampoco admite UNION; sólo se permite un SELECT.
• A menudo, hace referencia al nombre de una columna
de una tabla principal de la subconsulta:
– Esto determina la fila de la tabla principal para la que se está
ejecutando la subconsulta. Se conoce como referencia exterior.
– En nuestro ejemplo, es OfiRep= NumOfi de la tabla Oficinas.
Vistas
• Tablas virtuales que muestran los datos a los
usuarios de forma no normalizada.
• NO hay distintas copias de los datos; hacen
referencia a los datos de las tablas subyacentes.
• La base de datos almacena la definición de las
vistas. Los datos se actualizan cuando se
actualizan las tablas subyacentes.
• Ventajas:
– Diseñadas para cubrir necesidades específicas de los usuarios.
– Las consultas son mucho más simples para los usuarios en
vistas diseñadas para ellos.
– Seguridad: sólo permite acceder a los datos de las vistas.
– Independencia: evita que el usuario o el programa modifiquen
las tablas subyacentes.
Vistas
• CREATE VIEW PedidosClientes AS SELECT
NumClien, Empresa, Nombre, NumPedido, Prod,
Cant, Im porte FROM Clientes, RepVentas,
Pedidos WHERE RepClien = NumRep AND
NumClien = Clien
(SQL estándar)
Pedidos
NumPedido
88
99
Clien
Prod
211 ABAC
522 CDE
Cant
Importe
7 31.000$
2 4.000$
Clientes
NumClien Empresa RepClien LimitCredit
211 QGG Co
89 50.000$
322 DBO Co
89 40.000$
PedidosClientes
NumClien Empresa
RepVentas
NumRep
Nombre OfiRep
Cupo
Ventas
22 100.000$
0$
53 Bill Smith
89 Jen Smith
44 50.000$ 130.000$
211 QGC Co
322 DBO Co
Nombre
Jen Smith
Jen Smith
NumPedido Prod Cant Importe
88 ABAC
99 CDE
7 31.000$
2 4.000$
Detalles de las vistas
• Posibilidad de modificar las vistas e invalidarlas:
– P. ej.: vista de libros de menos de 5 dólares.
– ¿Qué sucede si actualizamos el precio de un libro
a 5,99 dólares a través de la vista? ¡Desaparece!
– Esto se evita añadiendo: WITH CHECK OPTION
• No se pueden actualizar todas las vistas. Una
vista es de sólo lectura si:
–
–
–
–
–
DISTINCT forma parte de la instrucción SELECT.
Contiene expresiones (medias, totales, etc.).
Hace referencia a vistas que no son actualizables.
Contiene claúsulas GROUP BY o HAVING.
En ocasiones: hace referencia a más de una tabla
(fracaso del objetivo).
Vistas en MS Access
• Las vistas se construyen y almacenan como
consultas:
– Construir la instrucción SELECT, incluyendo las
relaciones (JOINS) entre las tablas en caso necesario.
– Guardar la consulta, dándole un nombre.
– A continuación, se puede realizar una consulta sobre
la consulta anterior (vista), así como utilizarla como
fuente de datos de páginas Web, a modo de tabla.
– Utilizaremos las vistas (consultas) en FrontPage,
dado que presenta algunos errores con respecto a
las relaciones (JOINS).
Ejercicios de repaso
• Mostrar todos los clientes con pedidos o
límites de crédito > 50.000 dólares.
– ¿Es posible listar al cliente una sola vez?
• Eliminar a los representantes de las oficinas
de ventas de Nueva York (NY) con cupos de
más de 40.000 dólares.
– Consejo: recuerde que debe eliminarlos a partir de
(FROM) una sola tabla. Utilice una subconsulta.
Soluciones
• Mostrar todos los clientes con pedidos o límites de
crédito > 50.000 dólares:
– ¿Es posible listar al cliente una sola vez, con los límites de
crédito y los importes de los pedidos? Sí, pero no es fácil.
– SELECT DISTINCT NumClien FROM Clientes, Pedidos
WHERE NumClien = Clien AND (LimitCredit>50000 OR
Importe>50000);
• Eliminar a los representantes de las oficinas de ventas
de Nueva York (NY) con cupos de más de 40.000$:
– Consejo: recuerde que debe eliminarlos a partir de (FROM)
una sola tabla. Utilice una subconsulta.
– DELETE * FROM RepVentas WHERE NumRep IN
(SELECT NumRep FROM RepVentas, Oficinas WHERE
NumOfi = OfiRep AND Cupo>40000 AND
Estado="NY“);
Índices
• Un índice es un objeto de datos independiente presente
en la base de datos que ordena las filas de la tabla para
facilitar una vista rápida:
– Cada índice de cada tabla es un objeto independiente.
– Las claves primarias y secundarias se indexan automáticamente.
• Acceso rápido a columnas indexadas:
– Cada vez que se actualiza una fila, se actualiza el índice, por lo que el uso
de índices ralentiza las operaciones de modificación, inserción y eliminación.
– En la práctica, se deben utilizar un máximo de 3 ó 4 índices por tabla. En
caso de necesitar más, se deben añadir y eliminar según sea necesario.
– Si la base de datos se usa, en su mayoría, para consulta (lectura), es
recomendable utilizar muchos índices, pues se agiliza el rendimiento.
– Si la base de datos se actualiza con frecuencia, conviene añadir el menor
número de índices posible.
• Índices agrupados (clustered):
– Ordenan las filas físicamente según un solo índice con el fin de
maximizar la velocidad de acceso al disco.
Ejemplo de índices
• Base de datos de clientes:
– El ID de cliente es clave primaria.
– También queremos realizar búsquedas por:
•
•
•
•
Nombre del cliente (último, primero).
Ciudad/Estado.
Código postal.
Dirección.
– Indexar los campos nombre, ciudad/estado, CP
y dirección:
• Cuatro índices: ralentiza la inserción, actualización y eliminación
de datos, pero agiliza la consulta de la base de datos.
• Si la base de datos de clientes es bastante estable, está bien.
– Seguir la misma lógica para el catálogo de piezas,
la facturación de materiales, etc.
• Los motores de búsqueda de Internet utilizan
"motores de recuperación de texto":
– Indexan todas las palabras de la base de datos; cuentan
las coincidencias y filas iguales. Los últimos avances
(frecuencia de los enlaces, uso…) posibilitan esto.
Seguridad
• Opciones de seguridad:
– Utilizar el login/contraseña del sistema operativo para identificar
al usuario (menor seguridad):
• El usuario puede acceder a todas las bases de datos y a todas las tablas.
– Utilizar un login/contraseña para la base de datos (mayor seguridad):
• Se restringe el acceso a otras bases de datos y tablas, pero permite
utilizar todas las aplicaciones.
– Seguridad a nivel de aplicación (aún más seguro, pero difícil de
administrar):
• Las aplicaciones deben consultar una base de datos común para ver si el
usuario está o no autorizado; es más centralizado que de BD a BD.
– Seguridad a nivel de red (lo más seguro, apenas viable hoy en día):
• Utiliza una infraestructura de clave pública (PKI) y de directorios, que
consiste en la encriptación.
• Es un elemento de vanguardia: caro y complicado.
• Clases de usuarios: superusuario (DBA), propietario
y usuario.
• Asignación de privilegios sobre la base de datos (permisos):
– GRANT y REVOKE. P. ej.:
• GRANT ALL ON NombreTabla TO PUBLIC WITH GRANT OPTION
• En las instrucciones GRANT y REVOKE es importante el orden.
El último es el que domina.
– MS Access no soporta esto.
Transacciones
• Un grupo de operaciones se debe tratar a
menudo como una unidad atómica:
– Iniciar la transacción:
• Insertar CabeceraPedido.
• Mientras hay otros DetallesPedido (elementos de la línea):
– Seleccionar la pieza.
– Actualizar el inventario de las piezas.
– Insertar la fila DetallesPedido.
– Completar la transacción.
• Propiedades de la transacción (ACID):
– A – atómica- todo o nada (recuperación).
– C – coherencia – de un estado de coherencia a otro
(integridad).
– I – aislamiento – no permite que otra transacción
visualice los cambios no realizados (concurrencia).
– D – perdurable – una vez realizados, los cambios son
permanentes.
Transacciones
• Las bases de datos multiusuario tienen otros
problemas relacionados con las transacciones.
• Dos acciones de la base de datos entran en
conflicto si una o ambas son operaciones escritas.
– Actualizaciones perdidas:
• Hay 7 piezas en el inventario.
• Las transacciones 1 y 2 leen simultáneamente 7 como la
cantidad actual.
• La transacción 1 acaba primero, añade 3 piezas y escribe
10 en la cantidad.
• La transacción 2 acaba después, elimina 5 piezas y escribe
2 en la cantidad.
– Cambios no realizados:
• La transacción 1 añade 3 piezas y escribe 10 en la cantidad.
• La transacción 2 lee 10 como cantidad.
• La transacción 1 se cancela (vuelve atrás) y deja a la
transacción 2 con datos erróneos.
Transacciones
• Las bases de datos utilizan protecciones para las
concurrencias. Un esquema sencillo es el siguiente:
– Las escrituras obtienen protección exclusiva sobre un registro,
evitando otras lecturas o escrituras.
– Las lecturas obtienen protecciones no exclusivas, que permiten otras
lecturas, pero evitan que una escritura obtenga protección exclusiva.
• Las bases de datos utilizan archivos log para la
recuperación:
– Además de realizarse todos los cambios en la base de datos,
éstos se escriben en un archivo log (esto es un cuello de
botella clave en su arquitectura).
– Los cambios no se realizan hasta que se ha escrito el log
para lograr un almacenamiento estable:
• Por lo general, los cambios se realizan antes de que las tablas
se actualicen realmente en el disco.
– Si se cancela una modificación, se lee el log para deshacer
las transacciones.
– Si falla el sistema o el disco, se ejecuta el log desde el último
punto de comprobación para restaurar la base de datos.
– Desactivar los log durante la carga y la recuperación de datos.
Rendimiento
• Programas para analizar el rendimiento
(desde TPC-A hasta H):
– www.tpc.org
• Cachés: ¡los discos son lentos!
– Almacenar páginas (a menudo 8KB de datos) en la
memoria de acceso rápido.
• Optimizadores de consultas:
– Hay muchas formas de establecer relaciones; depende del
tamaño de las tablas, las características de las claves
(longitud, "unicidad"), etc.
• Estadísticas de los índices:
– UPDATE STATISTICS (actualizar estadísticas).
API de la conectividad abierta
de bases de datos (ODBC)
•
Etapa inicial: SQL incrustado (ESQL) en cada servidor de bases
de datos (a principios de la década de los 90).
– Compilado en aplicaciones de servidor, no puede ser modificado
por el usuario final.
– No funciona bien con múltiples bases de datos.
•
Segunda etapa: aparecen las aplicaciones cliente-servidor (a
finales de los 90):
– Cada distribuidor de bases de datos ofrecía una interfaz de programación
de aplicaciones (API) que permitía que los programas cliente realizaran
consultas a las bases de datos.
– La API de cada distribuidor era diferente, por supuesto.
•
Etapa actual: ODBC (desde finales de los 90 hasta ahora):
– La API común de Windows es capaz de acceder a la mayoría de
las bases de datos:
• Oracle, SQL Server, Sybase, DB2 o Informix.
– JDBC es el equivalente para el entorno Java.
API ODBC
•
•
•
•
•
•
•
La librería de las llamadas a la función ODBC para conectar una
aplicación (Web, Windows u otra) a un SGBD, ejecuta sentencias
SQL y recupera los resultados.
Sintaxis SQL basada en el estándar SQL-92.
Conjunto de códigos de errores estándar.
Modo estándar de conectar y acceder a un SGBD.
Representación estándar de los tipos de datos.
Métodos estándar para la conversión de tipos de datos.
ODBC tiene una funcionalidad de núcleo, de capa 1 y de capa 2
para entenderse con interfaces sencillas y sofisticadas.
Estas características ayudan a superar muchos de los problemas
del SQL no estándar mencionados en el tema anterior.
Arquitectura ODBC
Arquitectura ODBC
• Aplicación (Windows o Web):
– Lleva a cabo el procesamiento.
– Llama a las funciones ODBC para transmitir las sentencias
SQL y recupera los resultados.
• Administrador de controladores:
– Carga y descarga los controladores solicitados por la aplicación.
– Procesa algunas llamadas a las funciones ODBC (supervisor).
• Controlador ODBC:
– Procesa la mayoría de las llamadas a las funciones ODBC.
– Envía las peticiones SQL a fuentes de datos específicas:
• Modifica la petición de la aplicación para adecuarla a la sintaxis
SQL de la fuente de datos.
– Devuelve los resultados a la aplicación.
• Fuente de datos.
Aplicación
• Solicita la conexión o establecimiento de sesión con
la fuente de datos.
• Envía la petición SQL a la fuente de datos.
• Ubica las zonas de almacenamiento y define los
formatos de los resultados de las peticiones SQL.
• Solicita los resultados.
• Procesa los datos y los errores.
• Si la aplicación requiere un proceso de transacción,
solicita una confirmación o cancelación para aceptar
o rechazar los resultados de la transacción.
• Una vez completado, finaliza la conexión a la fuente
de datos.
Administrador de controladores
• El administrador de controladores es una librería de
enlaces dinámicos (DLL) ofrecida por Microsoft.
• Carga y descarga los controladores ODBC.
• Cuando la aplicación solicita una lista con los nombres
de las fuentes de datos instaladas, el administrador
de controladores recupera la información del registro
y devuelve la lista.
• Procesa las llamadas de inicialización y las validaciones
de parámetros y secuencia para las llamadas a la función
ODBC.
Controlador
• El controlador es una DLL (librería), escrita por Microsoft
•
•
•
•
o por el distribuidor de la base de datos, que implementa
las llamadas a la función ODBC.
Conversión de datos a los estándares ODBC.
Conversión del código de errores a los estándares ODBC.
Manejo de la transacción.
Acceso a archivos externos al SGBD como son los
archivos de Excel o los de texto:
– Soporte limitado para SQL: sólo SELECT, INSERT, CREATE y
DROP.
• Amplia gama de funcionalidad en diferentes
controladores:
– Compueban los niveles de conformidad: ODBC y SQL (¡no es
igual!).
– La API de ODBC proporciona funciones para determinar las
capacidades.
Descargar