Introducción a las bases de datos Juan Ignacio Rodrı́guez de León Abstract Aplicaciones de los sistemas de bases de datos. Sistemas de bases de datos frente a sistemas de archivos. Visión de los datos. Modelos de datos. Lenguajes de bases de datos. Usuarios y administradores de la base de datos. Gestión de transacciones. Estructura de un sistema de bases de datos. Arquitecturas de aplicaciones. Historia de los sistemas de bases de datos. También se presenta un ejemplo de una aplicación de bases de datos: una empresa bancaria que cuenta con varias sucursales. Este ejemplo se usa como ejemplo de trabajo a lo largo de toda la asignatura. 1 Sistemas de bases de datos frente a sistemas de ficheros. Mantener la información en un sistema de ficheros presenta una serie de inconvenientes importantes, precisamente los que se intentan evitar con las sistemas de bases de datos: • Redundancia e inconsistencia de datos. La información puede estar duplicada en diferentes sitios, y codificada de diferentes maneras. Esta redundancia tiene como primera consecuencia mayores costes de almacenamiento y de acceso. Además, puede conducir a inconsistencias de datos. • LDificultad en el acceso a los datos. No existe otro método de acceso a los datos que los programas que se hayan implementado. • Aislamiento de los datos. Debido a que los datos están dispersos en varios ficheros, e incluso representados en distinto formatos, es difı́cil interrelacionarlos. • Problemas de integridad. Las restricciones que se deseen imponer a los datos deben hacerse por programa. Si existen varios programas (quizá incluso en varios lenguajes) hay que añadir el código de restricción a todos. En caso de tener que modificar o ampliar estas restricciones, el trabajo puede ser considerable. 1 1 SISTEMAS DE BASES DE DATOS FRENTE A SISTEMAS DE FICHEROS.2 • Problemas de atomicidad. En un sistema de archivos es difı́cil garantizar la atomicidad de las operaciones. • Anomalı́as en el acceso concurrente. Es complicado controlar el acceso concurrentes de diferentes usuarios y/o máquinas. • Problemas de seguridad. Seguridad no centralizada. Un sistema de base de datos es una colección de archivos interrelacionados y un conjunto de programas que permiten a los usuarios acceder y modificar esos archivos, intentando resolver los problemas descritos anteriormente. 1.1 Visión de los datos Uno de los principales objetivos de este sistema es proporcionar a los usuarios una visión abstracta de los datos, de forma que no deba de preocuparse por los detalles del almacenamiento de los datos. Esta simplificación de los detalles de almacenamiento y gestión de los datos se realizan en diversos niveles. Nivel Fı́sico En este nivel se describen en detalle las estructuras de datos que definen como se almacenan realmente los datos. Nivel lógico En este siguiente nivel, lo que se define es que datos se almacenan, ası́ como las relaciones entre los mismos. Este nivel permite describir la base de datos completa en base a un subconjunto de estructuras relativamente simples. Los usuarios a nivel lógico (Diseñadores y administradores de bases de datos) no necesitan preocuparse del nivel fı́sico. Nivel de vistas Este nivel completa, mediante la definición de vistas, las necesidades finales de acceso a los datos. La vista puede reorganizar la información del nivel lógico, ampliando, transformando o incluso reduciendo la información que se desea mostrar al usuario (Programadores y administradores de bases de datos) . Además de esconder los detalles del nivel lógico, las vistas proporcionan también un mecanismo de seguridad que evita los accesos a determinadas partes de la base de datos. Las bases de datos normalmente se ven modificadas a lo largo del tiempo. Se denomina ejemplar de la base de datos a la colección de información almacenada en la misma en un momento determinado. El diseño completo de la base de datos se llama esquema de la base de datos. Existen diferentes esquemas, de acuerdo con los niveles explicados anteriormente. Ası́, el esquema fı́sico describe el diseño final en el nivel fı́sico, mientras que el 2 MODELO DE DATOS 3 esquema lógico lo describe en el nivel lógico. Normalmente, es el esquema lógico el más importante, ya que afecta de manera importante a los programas de aplicación. El nivel fı́sico, aunque importante, puede ser alterado sin que las aplicaciones se vean afectadas. 2 Modelo de datos El modelo de datos es una colección de herramientas conceptuales que se utilizan para describir datos, incluyendo relaciones, semántica y restricciones de consistencia. Se estudiarán dos modelos de datos, el modelo entidad-relación y el relacional. Los diferentes modelos de datos que se han propuesto se clasifican en tres grupos: modelos lógicos basados en objetos, modelos lógicos basados en registros y modelos fı́sicos. 2.1 Modelo Entidad-Relación (E-R) Este modelo representa el mundo real mediante una colección de objetos básicos, que denomina entidades, y las relaciones entre estos objetos. Una entidad es cualquier cosa o parte del mundo que es distinguible del resto. Por ejemplo, en un sistema bancario, las personas y las cuentas bancarias se podrı́an interpretar como entidades. Las entidades se describen mediante una serie de atributos (por ejemplo, número de cuenta, saldo y fecha de alta pueden ser atributos de la entidad cuenta). Una relación es una asociación entre varias entidades (Por ejemplo, una relación impositor relaciona cada cliente con las cuentas que tenga abiertas). El conjunto de todas las entidades del mismo tipo se denomina conjunto de entidades, y el conjunto de todas las relaciones del mismo tipo se denominan conjunto de relaciones. La estructura lógica se representa mediante el diagrama Entidad-Relación o diagrama E-R, que consta de los siguientes componentes. sı́mbolos Rectángulos Elipses Rombos Lı́neas Representan Conjuntos de entidades Atributos Relaciones entre conjuntos de entidades Unen a los atributos con los conjuntos de entidades, y los conjuntos de entidades con las relaciones Además de representar entidades y relaciones, el modelo permite representar ciertas restricciones que los datos almacenados deben cumplir. Una restricción importante es la correspondencia de cardinalidad, que expresa el número de entidades con las que otra entidad se puede asociar a través de un conjunto de relaciones. El modelo E-R se estudiará con más detalles en el tema 2. 3 1.4 LENGUAJES DE BASE DE DATOS 2.2 4 Modelo relacional En el modelo relacional se utiliza un grupo de tablas para representar los datos y las relaciones entre ellos. Cada tabla está compuesta por varias columnas, y cada columna tiene su propio nombre, que debe ser único. Este modelo es un ejemplo de modelo basado en registros. Estos modelos se denominan ası́ porque la base de datos se estructura en registros de formato fijo, de diferentes tipos. Cada tabla contiene registros de un tipo particular. Cada tipo de registro define un número fijo de campos, donde cada campo representa un atributo. El modelo de datos relacional es el modelo más ampliamente usado, y la mayorı́a de los sistemas actuales se basan, parcial o totalmente, en el modelo relacional. Este modelo se estudiará con más detalle en los temas 3 al 7. Es habitual realizar primero un esquema E-R, situado en un nivel superior de abstracción, que luego es traducido al modelo relacional. En el Tema 2 se verá con más detalle este mecanismo de traducción. Por último, se ha de destacar que en el modelo relacional es posible crear esquemas que tengan, por ejemplo, información duplicada innecesariamente. El tema 7 se dedicará ı́ntegramente a evitar estos malos diseños. 3 1.4 Lenguajes de base de datos Un sistema de base de datos proporciona un lenguaje de definición de datos para especificar el esquema de la base de datos y un lenguaje de manipulación de datos para expresar las consultas y las modificaciones a la base de datos. En la práctica, los dos lenguajes no suelen ir por separado, sino que forman un único lenguaje, como por ejemplo en el lenguaje SQL, ampliamente utilizado. Lenguaje de definición de datos (LDD) sirve para especificar el esquema de la BD. El resultado de la compilación es un conjunto de tablas que se almacenan en un archivo especial llamado diccionario de datos o directorio de datos. El diccionario de datos almacena metadatos, es decir, datos acerca de los datos. La estructura de almacenamiento y los métodos usados se especifican mediante un conjunto de definiciones del lenguaje de almacenamiento y definición de datos. Lenguaje de manipulación de datos (LMD) permite acceder o manipular los datos organizados. Hay dos tipos: LMD procedimentales, que requieren que el usuario especifique que datos se necesitan y como obtenerlos, y LMD no procedimentales, que requiere que el usuario especifique que datos se necesitan, sin especificar como obtenerlos. La manipulación de la información almacenada en una base de datos contempla: 4 USUARIOS Y ADMINISTRADORES DE LA BASE DE DATOS 5 • La recuperación de la información almacenada • La inserción de información nueva • El borrado de información • La modificación de la información Una consulta es una instrucción para recuperar información, y la parte del LMD que implica recuperación de información se llama lenguaje de consultas. Existen varios lenguajes de consultas. En el tema 4 se estudiará SQL, el más extendido de todos. En el tema 5 se estudiarán otros. 3.1 Acceso a la base de datos desde programas de aplicación Los programas de aplicación se escriben normalmente en un lenguaje de programación de alto nivel (Cobol, C, C++, Java, Python, etc...), que denominaremos lenguaje anfitrión. Para acceder a la base de datos, las instrucciones LMD necesitan ser ejecutadas desde el lenguaje anfitrión. Hay dos maneras de hacerlo: • Mediante una API (Librerı́a de procedimientos) que se puede usar para enviar las instrucciones LMD y LDD a la base de datos, ası́ como recuperar los resultados. ODBC (Open Data Base Connectivity) es un ejemplo de API definida para permitir el acceso a la base de datos desde C. JDBC (Java Data Base Connectivity) es similar, pero utilizando Java como lenguaje anfitrión. • Extendiendo la sintaxis del lenguaje anfitrión para incorporar llamadas LMD dentro del programa del lenguaje anfitrión. Normalmente se realiza mediante un preprocesador. Si se utiliza esta técnica se dice que el lenguaje de consulta está embebido en el lenguaje anfitrión. 4 Usuarios y administradores de la base de datos Las personas que hacen uso de una base de datos pueden clasificarse en diferentes roles: 4.1 Usuarios • Usuarios normales: Usuarios no sofisticados, que interactúan con el sistema mediante la ejecución de programas especı́ficos escritos previamente. Normalmente la interfaz para este tipo de usuarios es del tipo de formularios e informes generados. 5 GESTIÓN DE TRANSACCIONES 6 • Programadores de aplicaciones: Profesionales informáticos que escriben los programas de aplicación que utilizan los usuarios. Para ello se suelen usar lenguajes convencionales, entornos de herramientas de desarrollo rápido de aplicaciones (RAD -Rapid Application Development-) o lenguajes de cuarta generación. • Usuarios sofisticados: Interactúan con el sistema sin usar aplicaciones especı́ficas, usando directamente el lenguaje de consultas. Los analistas que utilizan consultas para explotar los datos en la base de datos entran en esta categorı́a. • Usuarios especializados: son usuarios sofisticados que escriben aplicaciones de BD especializadas que no son adecuadas en el marco de procesamiento de datos tradicional. 4.2 Administrador de la base de datos Una de las ventajas de usar un un sistema gestor de base de datos es tener un control centralizado tanto de datos como de los programas que acceden a los datos. La persona que se encarga de manejar este control se denomina administrador de la base de datos. Sus funciones incluyen: • Definición de esquemas. • Definición de estructuras y métodos de accesos • Realizar las modificaciones de los esquemas y de la organización fı́sica, cuando sea necesario. • Conceder o revocar autorización a los usuarios para poder consultar, insertar, modificar o borrar los datos. • Mantenimientos rutinarios: copias de respaldo, comprobación de espacio ocupado en los discos, comprobaciones de rendimiento. 5 Gestión de transacciones Una de las grandes ventajas que proporciona el uso de un sistema gestor de base de datos es el de garantizar la atomicidad. La atomicidad es la garantı́a que nos da el sistema de que, ante la ejecución de una serie de operaciones, englobadas en una transacción, o bien se ejecutan todas las operaciones, o bien no se efectúa ninguna. En otras palabras, el conjunto de operaciones se hace entero o no se hace, no dejando ningún efecto sobre el sistema. La atomicidad nos permite realizar cambios en la base de datos garantizando la consistencia de los datos. la consistencia es la garantı́a de que determinadas reglas declaradas sean siempre verificadas después de la transacción, 6 ESTRUCTURA DE UN SISTEMA DE BASE DE DATOS 7 independientemente del resultado de la misma. Por ejemplo, en una transacción de fondos desde la cuenta A a la cuenta B, la regla de que A+B debe ser constante debe cumplirse tanto antes como después de la transacción (aunque durante la transacción si es posible que se produzcan inconsistencias). Otra caracterı́stica importante es la durabilidad. La durabilidad de una transacción garantiza que, en el instante en el que se finaliza la transacción, esta perdura a pesar de otras consecuencias. Por ejemplo, incluso en el caso de fallo en el disco duro, el sistema aún será capaz de recordar todas la transacciones que han sido realizadas en el sistema. La responsabilidad de asegurar la atomicidad y durabilidad recaen en una parte del sistema gestor de base de datos, concretamente en el componente de gestión de transacciones. En ausencia de fallos, toda transacción concluida es definitiva. En caso de fallo, el sistema debe realiza la recuperación de fallos, es decir, restaurar la base de datos al estado en que estaba antes de que ocurriera el fallo. Finalmente, otra caracterı́stica importante del sistema de transacciones es el aislamiento entre operaciones. El aislamiento es la garantı́a de que todas las transacciones que se estén realizando simultáneamente en el sistema son invisibles al resto los usuarios hasta que estas hayan concluido. Este aislamiento garantiza que los usuarios del sistema no observen los cambios intermedios. Es responsabilidad del gestor de control de concurrencia controlar la interacción entre las transacciones concurrentes. Estas cuatros caracterı́sticas de los sistemas gestores de bases de datos se suelen resumir con el acrónimo ACID, que corresponde con las iniciales en ingles (Atomicity, Consistency, Isolation, Durability). 6 Estructura de un sistema de base de datos Un SGBD se divide en módulos que se encargan de cada una de las responsabilidades del sistema completo. A grandes rasgos, estos módulos pueden agruparse en dos categorı́as, el gestor de almacenamiento y el procesador de consultas. El gestor de almacenamiento es importante porque las bases de datos requieren normalmente una gran cantidad de espacio, siendo ya relativamente normales bases de datos de varios Giga bytes, e incluso Terabytes. Debido a estos tamaños y a la diferencia de velocidades entre la memoria principal y la de disco, la estructuración correcta de los datos puede minimizar la necesidad de movimientos entre niveles de memoria y, consecuentemente, optimizar el rendimiento. El procesador de consultas es importante porque ayuda al SGBD a simplificar y facilitar el acceso a los datos. Las vistas de alto nivel ayudan a conseguir este objetivo. Es necesario traducir las actualizaciones y las consultas realizadas en lenguaje no procedimental (nivel lógico) en una se- 6 ESTRUCTURA DE UN SISTEMA DE BASE DE DATOS 8 cuencia de operaciones (en el nivel fı́sico). 6.1 Gestor de almacenamiento El gestor de almacenamiento es el módulo que proporciona la interfaz entre los datos de bajo nivel en la base de datos y los programas de aplicación y las consultas emitidas al sistema; por tanto, es n interprete de las instrucciones LMD a secuencias de órdenes de nivel inferior. También es responsable de la interacción con el sistema de ficheros. Ası́, el gestor de almacenamiento es responsable del almacenamiento, actualización y recuperación de los datos en la base de datos. Los componentes de gestor de almacenamiento incluyen: Gestor de autorización e integridad Comprueba que se satisfacen las restricciones de integridad y la autorización de los usuarios para acceder a los datos. Gestor de transacciones Asegura la consistencia de la base de datos, a pesar de los fallos en el sistema. También es responsable de que la ejecución de transacciones concurrentes ocurra sin conflictos. Gestor de archivos Gestiona la reserva de espacio de almacenamiento en disco, y las estructuras de datos usadas para almacenar la información. Gestor de memoria intermedia o caché Es responsable de traer los datos de disco hacia memoria principal, y de decidir que datos tratar en memoria caché. Este módulo es crı́tico para el rendimiento del sistema. El gestor de almacenamiento implementa varias estructuras de datos como parte de la implementación fı́sica del sistema: • Archivo de datos, que almacena la base de datos en si. • Diccionario de datos, que almacenan metadatos acerca de la estructura de la base de datos, en particular, el esquema. • Índices, que proporcionan acceso rápido a determinados datos. 6.2 Procesador de consultas Los componentes de este módulo son: Intérprete del LDD Interpreta las instrucciones del LLD y registra las definiciones en el diccionario de datos. 7 ARQUITECTURA DE APLICACIONES 9 Compilador del LMD Traduce las instrucciones del LMD en un lenguaje de consultas a un plan de evaluación, que consiste en instrucciones de bajo nivel que entiende el motor de evaluación de consultas. El compilador también puede producir y evaluar el coste de distintos planes alternativos, realizando ası́ una fase de optimización de la consulta. Motor de evaluación de consultas Ejecuta las instrucciones de bajo nivel generadas por el compilador de LMD. La figura 1 pretende mostrar estos componentes y sus conexiones. 7 Arquitectura de aplicaciones Las aplicaciones de Base de datos se dividen normalmente en dos o tres capas. En una arquitectura de dos capas, la aplicación se divide en un componente que reside en el cliente, que llama directamente a la funcionalidad del sistema de base de datos en el servidor mediante instrucciones de consultas, usando normalmente estándares como ODBC o JDBC. En una arquitectura de tres capas, existe un cliente muy ligero, que actúa simplemente como frontal, y que no llama directamente a la base de datos, sino que se comunica con un servidor de aplicaciones. Es este servidor de aplicaciones el que interactúa con la base de datos. La ventaja de este último esquema es que la implementación de la lógica de negocio se realiza en un único sitio, en la capa intermedia o servidor de aplicaciones, lo que facilita enormemente su mantenimiento. 7 ARQUITECTURA DE APLICACIONES 10 Figure 1: Componentes de un SGBD Programas de aplicación Interfaz de aplicaciones Compilador y enlazador Herramientas de consulta Herramientas de administración Consultas LMD Intérprete del LDD Código objeto de los programas de aplicación Compilador del LMD y organizador Motor de evaluación de Consultas Procesador de consultas Gestor de Memoria Intermedia (Caché) Gestor de archivos Gestor de autorización e integridad Gestor de transacciones Gestor de almacenamiento Diccionario de datos Índices Datos Datos estadísticos Almacenamiento en disco 8 8 PREGUNTAS HABITUALES 11 Preguntas habituales 1. ¿Cual de estos componentes no forma parte del Gestor de almacenamiento en un sistema gestor de base de datos. (a) Gestor de consultas (b) Gestor de autorización e integridad (c) Gestor de transacciones (d) Gestor de memoria intermedia 2. ¿A qué se refiere el término “Esquema de la base de datos” en un sistema de base de datos? (a) Al diseño completo de una base de datos (b) Al nivel fı́sico (c) Al nivel lógico (d) Al nivel vista 3. ¿Qué parte del lenguaje de base de datos se utiliza para especificar el esquema de la base de datos? (a) DML (b) DLL (c) DDL (d) EBD 4. ¿Cuál de estas afirmaciones es verdadera? (a) Un DML procedimental necesita que el usuario especifique que datos necesita pero no como obtenerlos. (b) Un DML procedimental necesita que el usuario especifique que datos necesita y como obtenerlos. (c) Un DML procedimental necesita que el usuario especifique que datos necesita mediante procedimientos. (d) Ninguna de ellas.