Download Clase teórica 13 (Introducción a las bases de datos relacionales)
Document related concepts
Transcript
Introducción a la Computación Bases de Datos Relacionales I Esteban E. Mocskos ([email protected]) Facultad de Ciencias Exactas y Naturales, UBA CONICET 4/06/2013 E. Mocskos (UBA–CONICET) Clase 13: Introducción a las Bases de Datos I 4/06/2013 1 / 16 ¿Por qué? Vamos a perder un poco el tiempo suponiendo que, con lo que saben hasta ahora, tenemos que hacer un programa que implemente una agenda de contactos y un calendario con citas a esos contactos... ¿cómo harı́amos? Espero que hayamos llegado a empezar a ver la necesidad de que exista una herramienta que nos ayude: Un RDBMS (por relational database management system) es un sistema de administración de bases de datos (conocido como DBMS) que se basa en el modelo relacional. Introducido por E. F. Codd (IBM) en los 70’s. el muchacho se ganó el premio Turing por esto. Hoy en dı́a la mayor parte de los sistemas de bases de datos que se utilizan, se basan en el modelo relacional. E. Mocskos (UBA–CONICET) Clase 13: Introducción a las Bases de Datos I 4/06/2013 2 / 16 Modelo relacional Un modelo relacional estructura los datos en forma de tabla. Una base de datos relacional es un conjunto de tablas con nombre único. Un esquema relacional define Nombres de las tablas en la base de datos. Las columnas de cada tabla: nombre, tipo de datos y tamaño. Condiciones de integridad: los datos ingresados las deben satisfacer en cada una de las tablas. E. Mocskos (UBA–CONICET) Clase 13: Introducción a las Bases de Datos I 4/06/2013 3 / 16 Ejemplo sencillo Ejemplo clásico de la literatura: se tiene una empresa con empleados en distintos departamentos ubicados en regiones geográficamente distribuidas. Se quiere modelar esta situación usando el modelo relacional... ¿Cómo harı́amos? Empecemos con la tabla DEPT que contendrá la información básica de cada departamento. Se busca capturar la información que nos resulta relevante: Tabla DEPT DEPTNO 10 20 30 40 E. Mocskos (UBA–CONICET) DEPT DNAME ACCOUNTING RESEARCH SALES OPERATIONS LOC NEW YORK DALLAS CHICAGO BOSTON Clase 13: Introducción a las Bases de Datos I 4/06/2013 4 / 16 Entiendo el ejemplo sencillo Las tres columnas de la tabla DEPT tiene asociados los siguientes tipos de datos: 1 DEPTNO: es de tipo NUMERIC(2), es decir, el atributo puede tener los valores enteros en el rango −99 . . . 99. Se podrı́a plantear una condición de integridad para asegurarse de excluir números negativos, pero ¿Cómo funcionarı́a esto? 2 DNAME: es de tipo VARCHAR(14). Las entradas corresponden a cadenas de carácteres de longitud variable, pero con un máximo de 14 caracteres. 3 LOC: es similar al anterior, pero tiene 13 caracteres como máxima, es de tipo VARCHAR(13). E. Mocskos (UBA–CONICET) Clase 13: Introducción a las Bases de Datos I 4/06/2013 5 / 16 Más sobre el modelo relacional El estado de una base de datos relacional (o instancia de un esquema relacional) define para cada tabla un conjunto de filas. Dicho de otra manera, el estado esta definido por las filas de cada una de las tablas que constituyen la base de datos. En el ejemplo que pusimos, la tabla DEPT tiene cuatro (4) filas o registros. El modelo relacional no predefine un orden dado para almacenar los registros. Es decir, no dice nada acerca de cuál tiene que ser la primer fila, cuál la segunda, etc. Sin embargo, las filas sı́ pueden ordenarse cuando se necesiten para algo (ya vamos a ver cómo). Cada fila o registro contiene valores para cada una de las columnas de la tabla. E. Mocskos (UBA–CONICET) Clase 13: Introducción a las Bases de Datos I 4/06/2013 6 / 16 Terminologı́a Esto lo van a encontrar cada vez que miren sobre este tema: Relación: tabla Tupla: una fila (también se lo conoce como registro) Cardinalidad: la cantidad de filas Atributo: una columna (también se lo conoce como campo) Grado: Número de columnas Clave primaria: identificador único Dominio: el conjunto de valores que puede tomar un atributo E. Mocskos (UBA–CONICET) Clase 13: Introducción a las Bases de Datos I 4/06/2013 7 / 16 Claves En el ejemplo que vimos, el campo (o atributo) DEPTNO se lo marca o denomina como la clave de la tabla DEPT. Claves relacionales Una clave identifica unı́vocamente una fila de una tabla. Por ejemplo, en la tabla DEPT del ejemplo, hay una fila con clave DEPTNO=10. ¿Qué pasarı́a si se trata de agregar otro registro con el valor 10 para DEPTNO? ¡¡¡No se puede!!! ¿Quién reporta el error? El DBMS es el encargado de impedirte romper con esta condición (es parte del modelo relacional). E. Mocskos (UBA–CONICET) Clase 13: Introducción a las Bases de Datos I 4/06/2013 8 / 16 Claves II Las claves son un ejemplo de restricciones (constraints): son condiciones que deben satisfacer los contenidos de una tabla adicionalmente a las impuestas naturalmente por los tipos asociados a cada columna. Las constraints se declaran como parte del esquema relacional. Se puede definir más de una clave para cada tabla. ¿Más claves? Por ejemplo, se podrı́a pensar en que el campo DNAME podrı́a servir como clave. ¿Qué se lograrı́a con esto? En este caso, que no haya más de un departamento con el mismo nombre. E. Mocskos (UBA–CONICET) Clase 13: Introducción a las Bases de Datos I 4/06/2013 9 / 16 Haciendo algo SQLite es una biblioteca que implementa un motor de SQL que: 1 Soporta transacciones. 2 Es auto-contenido (un solo archivo). 3 No necesita un servidor, corre directamente en la misma máquina usamos. 4 No necesita configuración. 5 Se usa mucho. 6 El código fuente es de dominio público. Funciona en las siguientes plataformas: Linux Mac OS X Windows Windows Phone 8 E. Mocskos (UBA–CONICET) Clase 13: Introducción a las Bases de Datos I 4/06/2013 10 / 16 SQLite - Detalles I Autocontenido: requiere un soporte mı́nimo de bibliotecas externas y del sistema operativo. Es multi-plataforma, por lo que está bueno para ser usado en aplicaciones que necesitan correr en diferentes ambientes y condiciones. Una base de datos se puede copiar y usar directamente entre múltiples máquinas (Linux y Windows, 32 bits y 64 bits), simplemente se copia el archivo y listo. No necesita un servidor: normalmente, los motores de base de datos se implementan como un servidor independiente. Cuando se quiere acceder a la base de datos, hay que establecer algún tipo de comunicación (muchas veces usando una red). Con SQLite, cuando se quiere acceder a la base de datos, directamente se lee o se escribe en un archivo (mediado por una biblioteca, no lo hace uno directamente). E. Mocskos (UBA–CONICET) Clase 13: Introducción a las Bases de Datos I 4/06/2013 11 / 16 SQLite - Detalles II Acceso múltiple: a pesar de estar basado en un archivo, SQLite es el único (o uno de los pocos) que permite que múltiples aplicaciones accedan simultáneamente a la misma base de datos. No necesita configuración (Zero-Configuration): SQLite no necesita ser instalado, no hay procedimiento de setup, no hay servidor para iniciar, parar o configurar. No se necesitan privilegios de administrador para crear una nueva instancia de base de datos. No usa archivos de configuración, no hay nada para indicar o configurar en el sistema para decirle que SQLite está ejecutando. No hay que hacer nada para recobrar de una colgada fulera de la máquina o de un corte de luz (salvo que se rompa el disco, pero ahı́ va a haber muchas cosas por las que preocuparse). Soporta transacciones: significa que todos los cambios y consultas se suponen Atómicos, Consistentes, Aislados y Durables (ACID). SQLite implementa transacciones serializables que cumplen con ACID aún en el caso de ser interrumpidas por error de programa, caı́da de sistema operativo o corte de luz (al menos en todos los casos de test que hicieron los desarrolladores). E. Mocskos (UBA–CONICET) Clase 13: Introducción a las Bases de Datos I 4/06/2013 12 / 16 Creando una base de datos - Live demo Vamos a usar una herramienta para administrar la base de datos SQLite. Se podrı́a hacer a mano desde la consola, pero para empezar, está bien usar algo que nos ayude y simplifique el proceso, SQLite Studio, http://sqlitestudio.pl/?act=download: E. Mocskos (UBA–CONICET) Clase 13: Introducción a las Bases de Datos I 4/06/2013 13 / 16 Accediendo a los datos desde Python Lo primero que tenemos que saber es si la versión de Python que tenemos instalado tiene soporte para SQLite (podrı́a no tenerlo). Eso lo hacemos con el siguiente programita: import s q l i t e 3 p r i n t ( ” V e r s i o n de B i b l i o t e c a : ” + s t r ( s q l i t e 3 . v e r s i o n ) ) p r i n t ( ” V e r s i o n de motor : ” + s t r ( s q l i t e 3 . s q l i t e v e r s i o n ) ) En mi compu (la de casa) me tiró esto: Version de Biblioteca: 2.6.0 Version de motor: 3.7.16.2 E. Mocskos (UBA–CONICET) Clase 13: Introducción a las Bases de Datos I 4/06/2013 14 / 16 Veamos cómo traer datos, supongamos que existe una tabla que se llama personas: #Abro l a c o n e x i o n a l a t a b l a #E l p a r a m e t r o debe s e r un a r c h i v o que s e pueda l e e r . con = s q l i t e 3 . c o n n e c t ( ” p r u e b a i n t r o . db ” ) #No m u e s t r a mucho , s o l o que e x i s t e . p r i n t ( con ) c u r = con . c u r s o r ( ) c u r . e x e c u t e ( ’ SELECT ∗ FROM p e r s o n a s ’ ) data = cur . fetchone () p r i n t ( data ) con . c l o s e ( ) Si esto anda bien, deberı́a mostrar un registro de los que hay en la tabla. E. Mocskos (UBA–CONICET) Clase 13: Introducción a las Bases de Datos I 4/06/2013 15 / 16 Tarea Lo que hay que hacer es: Definir una base de datos usando SQLite Studio (deberı́a estar ya bajado en su home). Definir una tabla que contenga los campos necesarios para una agenda de contactos (al menos Apellido, Nombre, Calle, Número, Piso, Teléfono, email, Celular, Cumpleaños). Elegir el tipo de datos de cada uno de los atributos. Determinar qué campo o campos conformarán la clave primaria. Llenar con registros de prueba la/s tabla/s de modo tal que haya una cantidad de información sufiente para probar (más de 15 registros). Hacer un programa en Python que levante los datos de la tabla de prueba recientemente creada (para traer todos los datos, pueden usar cur.fetchall() y luego mostrarlos. Mejorar el código anterior protegiéndolo contra distintas excepciones (las que crean interesantes), asegurarse que en cualquier caso, antes de terminar, la conexión con la base de datos quede cerrada (con.close()). E. Mocskos (UBA–CONICET) Clase 13: Introducción a las Bases de Datos I 4/06/2013 16 / 16