Está en la página 1de 24

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 instruccin. Permiten dividir una consulta en partes y reconstruirla. Permite realizar algunas consultas que de otro modo no se podran 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 clusulas WHERE (o HAVING). Una subconsulta slo puede dar lugar a una columna de datos como resultado:
En la subconsulta SELECT slo puede haber un campo.

No permite ORDER BY; no tendra sentido. Tampoco admite UNION; slo 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 definicin de las vistas. Los datos se actualizan cuando se actualizan las tablas subyacentes. Ventajas:
vistas diseadas para ellos.

Diseadas para cubrir necesidades especficas de los usuarios. Las consultas son mucho ms simples para los usuarios en Seguridad: slo 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 estndar)
Pedidos
NumPedido Clien Prod Cant Importe

88 99

211 ABAC 522 CDE

7 31.000$ 2 4.000$
PedidosClientes
NumClien Empresa Nombre NumPedido Prod Cant Importe

Clientes NumClien Empresa RepClien LimitCredit 211 QGG Co 89 50.000$ 322 DBO Co 89 40.000$

211 QGC Co 322 DBO Co

Jen Smith Jen Smith

88 ABAC 99 CDE

7 31.000$ 2 4.000$

RepVentas
NumRep Nombre OfiRep Cupo Ventas 22 100.000$ 0$ 53 Bill Smith 89 Jen Smith 44 50.000$ 130.000$

Detalles de las vistas


Posibilidad de modificar las vistas e invalidarlas:
P. ej.: vista de libros de menos de 5 dlares. Qu sucede si actualizamos el precio de un libro a 5,99 dlares a travs de la vista? Desaparece! Esto se evita aadiendo: WITH CHECK OPTION

No se pueden actualizar todas las vistas. Una vista es de slo lectura si:
DISTINCT forma parte de la instruccin SELECT. Contiene expresiones (medias, totales, etc.). Hace referencia a vistas que no son actualizables. Contiene clasulas GROUP BY o HAVING. En ocasiones: hace referencia a ms de una tabla (fracaso del objetivo).

Vistas en MS Access
Las vistas se construyen y almacenan como consultas: Construir la instruccin SELECT, incluyendo las
relaciones (JOINS) entre las tablas en caso necesario.

Guardar la consulta, dndole un nombre. A continuacin, se puede realizar una consulta sobre
la consulta anterior (vista), as como utilizarla como fuente de datos de pginas 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 lmites de crdito > 50.000 dlares.
Es posible listar al cliente una sola vez?

Eliminar a los representantes de las oficinas de ventas de Nueva York (NY) con cupos de ms de 40.000 dlares.
Consejo: recuerde que debe eliminarlos a partir de (FROM) una sola tabla. Utilice una subconsulta.

Soluciones
Mostrar todos los clientes con pedidos o lmites de crdito > 50.000 dlares:
Es posible listar al cliente una sola vez, con los lmites de crdito y los importes de los pedidos? S, pero no es fcil. 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 ms 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 rpida:
Cada ndice de cada tabla es un objeto independiente. Las claves primarias y secundarias se indexan automticamente.

Acceso rpido 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 modificacin, insercin y eliminacin. En la prctica, se deben utilizar un mximo de 3 4 ndices por tabla. En caso de necesitar ms, se deben aadir y eliminar segn sea necesario. Si la base de datos se usa, en su mayora, para consulta (lectura), es recomendable utilizar muchos ndices, pues se agiliza el rendimiento. Si la base de datos se actualiza con frecuencia, conviene aadir el menor nmero de ndices posible.

ndices agrupados (clustered):


Ordenan las filas fsicamente segn 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. Tambin queremos realizar bsquedas por:


Nombre del cliente (ltimo, primero). Ciudad/Estado. Cdigo postal. Direccin.

Indexar los campos nombre, ciudad/estado, CP y direccin:


Cuatro ndices: ralentiza la insercin, actualizacin y eliminacin
de datos, pero agiliza la consulta de la base de datos. Si la base de datos de clientes es bastante estable, est bien.

Los motores de bsqueda de Internet utilizan "motores de recuperacin de texto":


las coincidencias y filas iguales. Los ltimos avances (frecuencia de los enlaces, uso) posibilitan esto.

Seguir la misma lgica para el catlogo de piezas, la facturacin de materiales, etc.

Indexan todas las palabras de la base de datos; cuentan

Seguridad
Opciones de seguridad:
Utilizar el login/contrasea del sistema operativo para identificar al usuario (menor seguridad):
Se restringe el acceso a otras bases de datos y tablas, pero permite
utilizar todas las aplicaciones.

Utilizar un login/contrasea para la base de datos (mayor seguridad): Seguridad a nivel de aplicacin (an ms seguro, pero difcil de administrar):
usuario est o no autorizado; es ms centralizado que de BD a BD.

El usuario puede acceder a todas las bases de datos y a todas las tablas.

Las aplicaciones deben consultar una base de datos comn para ver si el Utiliza una infraestructura de clave pblica (PKI) y de directorios, que

Seguridad a nivel de red (lo ms seguro, apenas viable hoy en da):


consiste en la encriptacin. Es un elemento de vanguardia: caro y complicado.

Clases de usuarios: superusuario (DBA), propietario y usuario. Asignacin 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 atmica:
Iniciar la transaccin:
Insertar CabeceraPedido. Mientras hay otros DetallesPedido (elementos de la lnea):
Seleccionar la pieza. Actualizar el inventario de las piezas. Insertar la fila DetallesPedido.

Completar la transaccin.

Propiedades de la transaccin (ACID):


A atmica- todo o nada (recuperacin). C coherencia de un estado de coherencia a otro (integridad). I aislamiento no permite que otra transaccin 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 simultneamente 7 como la cantidad actual. La transaccin 1 acaba primero, aade 3 piezas y escribe 10 en la cantidad. La transaccin 2 acaba despus, elimina 5 piezas y escribe 2 en la cantidad.

Cambios no realizados:

La transaccin 1 aade 3 piezas y escribe 10 en la cantidad. La transaccin 2 lee 10 como cantidad. La transaccin 1 se cancela (vuelve atrs) y deja a la transaccin 2 con datos errneos.

Transacciones
Las bases de datos utilizan protecciones para las concurrencias. Un esquema sencillo es el siguiente:
Las escrituras obtienen proteccin 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 proteccin exclusiva.

Las bases de datos utilizan archivos log para la recuperacin:


Adems 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 modificacin, se lee el log para deshacer las transacciones. Si falla el sistema o el disco, se ejecuta el log desde el ltimo punto de comprobacin para restaurar la base de datos. Desactivar los log durante la carga y la recuperacin de datos.

Rendimiento
Programas para analizar el rendimiento (desde TPC-A hasta H):
www.tpc.org

Cachs: los discos son lentos!


Almacenar pginas (a menudo 8KB de datos) en la memoria de acceso rpido.

Optimizadores de consultas:
Hay muchas formas de establecer relaciones; depende del
tamao de las tablas, las caractersticas de las claves (longitud, "unicidad"), etc.

Estadsticas de los ndices:


UPDATE STATISTICS (actualizar estadsticas).

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 dcada de los 90).
Compilado en aplicaciones de servidor, no puede ser modificado por el usuario final. No funciona bien con mltiples bases de datos.

Segunda etapa: aparecen las aplicaciones cliente-servidor (a finales de los 90):


Cada distribuidor de bases de datos ofreca una interfaz de programacin
de aplicaciones (API) que permita 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 comn de Windows es capaz de acceder a la mayora de las bases de datos:
Oracle, SQL Server, Sybase, DB2 o Informix.

JDBC es el equivalente para el entorno Java.

API ODBC
La librera de las llamadas a la funcin ODBC para conectar una aplicacin (Web, Windows u otra) a un SGBD, ejecuta sentencias SQL y recupera los resultados. Sintaxis SQL basada en el estndar SQL-92. Conjunto de cdigos de errores estndar. Modo estndar de conectar y acceder a un SGBD. Representacin estndar de los tipos de datos. Mtodos estndar para la conversin de tipos de datos. ODBC tiene una funcionalidad de ncleo, de capa 1 y de capa 2 para entenderse con interfaces sencillas y sofisticadas.

Estas caractersticas ayudan a superar muchos de los problemas del SQL no estndar mencionados en el tema anterior.

Arquitectura ODBC

Arquitectura ODBC
Aplicacin (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 aplicacin. Procesa algunas llamadas a las funciones ODBC (supervisor).

Controlador ODBC:
Procesa la mayora de las llamadas a las funciones ODBC. Enva las peticiones SQL a fuentes de datos especficas:
Modifica la peticin de la aplicacin para adecuarla a la sintaxis SQL de la fuente de datos.

Devuelve los resultados a la aplicacin.

Fuente de datos.

Aplicacin
Solicita la conexin o establecimiento de sesin con la fuente de datos. Enva la peticin 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 aplicacin requiere un proceso de transaccin, solicita una confirmacin o cancelacin para aceptar o rechazar los resultados de la transaccin. Una vez completado, finaliza la conexin a la fuente de datos.

Administrador de controladores
El administrador de controladores es una librera de enlaces dinmicos (DLL) ofrecida por Microsoft. Carga y descarga los controladores ODBC. Cuando la aplicacin solicita una lista con los nombres de las fuentes de datos instaladas, el administrador de controladores recupera la informacin del registro y devuelve la lista. Procesa las llamadas de inicializacin y las validaciones de parmetros y secuencia para las llamadas a la funcin ODBC.

Controlador
El controlador es una DLL (librera), escrita por Microsoft

o por el distribuidor de la base de datos, que implementa las llamadas a la funcin ODBC. Conversin de datos a los estndares ODBC. Conversin del cdigo de errores a los estndares ODBC. Manejo de la transaccin. Acceso a archivos externos al SGBD como son los archivos de Excel o los de texto:
Soporte limitado para SQL: slo 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.

También podría gustarte