1. Almacenar (y usar) Datos¶
1.1. ¿De qué va este tema?¶
Este es un curso genérico para comenzar a entender cómo resolvemos el problema de almacenar datos. Aprenderás a:
Conocer los diferentes componentes
Conocer las diferentes operaciones que se necesitan
Conocer la problemática de cómo los organizamos
Se trata de entender porqué necesitamos almacenar los datos, cómo hacemos para usarlos y qué sistemas necesitamos para gestionarlos.
1.2. Clases¶
Está organizado en 8 talleres de unas 3 sesiones de clase. En total unas 24 sesiones de clase más tu trabajo en casa.
La dedicación depende del conocimiento previo, motivación y capacidad de aprendizaje del estudiante para esa sesión en concreto.
1.2.1. Almacenar Datos¶
¿Qué es un dato ? Un valor (que se puede guardar)
¿Qué es un almacén de datos (datawarehouse)? Donde guardamos los datos (organizados)
Una Base de datos (como almacén de datos). Tiene:
Datos organizados en …
una estructura …
para almacenarlos y consultarlos
BD (DB) vs SGBD (DBMS): no es lo mismo el almacén, que quien lo gestiona
Arquitectura de un sistema software: Arquitectura de tres capas
Presentación. La interfaz con el usuario
Lógica. La programación
Datos. Los datos y el almacenamiento
Organización habitual de los datos (el modelo relacional):
Tablas con un conjunto de datos (valores) organizados en …
Filas (registros) y …
Columnas (campos)
¿Cómo se almacenan?
Aspectos físicos (donde). Generalmente en memoria y sistema de almacenamiento de apoyo (en disco lo habitual)
y lógicos (cómo). Generalmente en un conjunto de archivos propio del SGBD o en un archivo plano (si no hay SGBD).
Los problemas son siempre los mismos (más o menos y simplificando):
¿Cómo organizo el almacén ? La estructura
¿Cómo lo gestiono ? Operaciones CRUD
¿Cómo garantizo el uso? Conceptos ACID
¿Cómo disminuyo la velocidad de acceso/uso?
¿Cómo protego el acceso a los datos?
Conceptos Generales
¿Cuales son las diferencias entre dato, base de datos y sistema gestor de base de datos?
Dime tres ejemplos de datos (tanto el valor como el tipo)
¿Una foto podríamos considerarlo un dato o un conjunto de datos?
Cuando compras en Amazon, ¿qué elemento del sistema pertenece a cada una de las capas en las que lo podríamos estructurar?
¿Sabes distinguir qué es una fila, una columna, un campo, un registro o un valor dentro de una tabla?
Dime un ejemplo de almacén de datos que sea una sola tabla
Si tuvieras diferentes tablas con diferente información, ¿es obligatorio que se relacionen de alguna manera?
Dentro de una tabla (en el valor de un campo para un registro concreto), ¿puedo poner el valor que me de la gana?
¿Qué ventajas le ves a usar una BD como almacén para tus datos?
¿Qué operaciones necesitarías tener disponibles para usar tu almacén?
1.2.2. Estrategias de Almacenamiento¶
Estrategia 0. Estructuras de datos: dentro del programa y almacenadas en memoria
Estrategia 1: Ficheros: en almacenamiento externo (permanente)
Archivos de texto: se almacenan texto (caracteres alfanuméricos)
Archivos binarios: se almacenan números (códigos equivalentes a diferentes tipos de datos)
Estrategia 2: Archivos con organización (lógica): añadir estructura a la estrategia 1:
CSV .
Es una tabla con datos organizados en filas
Cada fila está organizada por campos, separados por comas (o caracter similar)
JSON . Texto organizado sintácticamente (con reglas)
Cada dato pertenece a un campo
Los campos están organizados jerárquicamente
Se usan reglas para organizar los datos
XML . Usar un lenguaje de marcas para gestionar el contenido usando una estructura jerárquica formal
-
Gestiona tablas en filas, columnas y celdas (valores)
Muy útil y muy utilizado (pero con grandes limitaciones si es complejo)
Muy fácil la exportación/importación con csv (una tabla a la vez)
Estrategia 3:
Organizo los datos en una base de datos y …
tengo un sistema que lo gestiona (SGBD).
Tiene una serie de ventajas, a cambio de hacer más complejo el sistema
Para cada estrategia podemos hablar en dos niveles:
Físico. Donde están guardados los datos (en disco o en memoria)
Lógico. Cómo están organizados (en el sistema que lo gestiona)
Cada estrategia tiene sus ventajas e inconvenientes
Concretando un almacén de datos
Supón que quiero almacenar los datos de los profesores del instituto en un almacén que esté en un archivo. Primero haz en papel un diagrama visual (el que quieras) con un posible diseño.
Después, escoge un tipo de archivo para tu almacén:
Archivo CSV
Archivo JSON (si conoces la tecnología)
Archivo XML (si conoces la tecnología)
Una hoja de cálculo
Guárdalo y justifica qué criterio has utilizado.
Revisando las 4 alteranativas de almacenamiento en archivos que tienes, ¿qué ventajas e inconvenientes le ves a cada uno? ¿Cual escogerías en estos escenarios?
Sólo lo usa una persona y con un software
Lo usan varias personas, unas desde el móvil, otras desde el ordenador de casa
Hay mil profesores en ese instituto, pero el sistema sólo lo usa una persona
Necesitamos un control muy estricto de los datos, es decir, que por ejemplo no acepte caracteres extraños en el nombre y apellidos.
El almacén de datos está en otro ordenador (en la nube del instituto)
1.2.3. El Esquema de una Base de Datos¶
Descripcion general de una base de datos: esquema (schema). La estructura (y alguna cosa más).
Elementos de la estructura (no formal):
Para una tabla (modelo plano o modelo relacional):
Nombre de la tabla
Nombres de las columnas (campos)
Tipos de Datos (para cada campo)
Restricciones (la principal la clave primaria, pero hay varias)
Varias Tablas: añadimos relaciones entre ellas (claves ajenas / Foreign Keys). Nos basamos en el modelo relacional
Proceso de diseño ( Complete Guide ):
Describes la estructura de tu almacén de datos …
usando un modelo (forma de organizarlo) concreto para …
generar un plano de tu almacén.
Y piensas cómo lo almacenas (nivel físico)
Profundizaremos en esto en Diseñando una BD
Hay diferentes tipos de esquemas ( 6 DB Schema Designs ), o sea, formas de organizar los datos en tu almacén los datos:
Vamos a utilizar, sobre todo:
el modelo plano
el modelo relacional
En resumen ( What is a database ):
describir formalmente la estructura
y tipo de contenido (datos) de tu almacén.
Escogiendo un modelo de datos
Qué tipo de modelo de datos escogerías para resolver cada uno de los siguientes almacenes:
Una lista de la compra
Mi árbol genealógico
Los pedidos de una bocatería (p.ej. de Marilyne )
Haz el diseño en papel para aprender mejor. Ya luego lo pasarás a digital si te interesa.
1.2.4. Diseñar una base de datos¶
Diseñar implica que es mejor pensar bien antes de empezar:
Evita problemas a futuro (por las prisas)
Pero no es tan habitual (por las mismas prisas)
Etapas en el diseño:
Diseño Conceptual. En papel (visual). Para entenderse con una persona sin nivel técnico.
Diseño Lógico. Depende del modelo de datos (esquema) que escojas. Para aterrizar las necesidades del diseño en una forma concreta de organizarlo
Diseño Físico. Ponerlo en práctica en un lenguaje concreto (lenguaje de diseño del SGBD que escojas)
Criterios de diseño generales
Minimizar la redundancia
Prevenir inconsistencias
Asegurar la integridad de los datos
Facilitar, con rapidez, el acceso a los datos
Controlar el acceso (quien y a qué datos)
Muy útil en la práctica: definir qué preguntas (ejemplos) debe resolver tu sistema. Piensa bien los casos de uso.
Esbozo de diseño de una BD
Recupera el diseño (esbozo) de los pedidos de una bocatería (p.ej. de Marilyne ) que vimos en el apartado anterior. Dime qué 10 preguntas (por ejemplo) debe resolver tu sistema.
Y comprueba que tus preguntas las podrás responder, a partir de la información que tendrás en tu almacén de datos.
1.2.5. Sistemas Gestores de bases de datos¶
Sistemas Gestores de bases de datos (el sistema):
Te permiten administrar la BD:
El almacén: la base de datos
El sistema (hardware / software / usuarios) que lo gestiona: El SGBD
Historia:
organización secuencial
navegación archivos
relacionales (y SQL)
OO
NoSQL (Not Only SQL)
XML / JSON
Descripción del SGBD: Arquitectura ANSI/XPARC (no confundir con Arquitectura 3 capas software)
Nivel Externo. Cada usuario tiene una visión de los datos (Vistas)
Nivel Conceptual. Describe cómo están organizados los datos (Diseño Conceptual y Lógico)
Nivel Interno. Describe cómo se almacenan los datos y donde (Diseño Físico)
Es un software complejo y con muchos componentes. Por ejemplo:
Interfaz externa de uso: GUI (gráfica) y/o CLI (consola)
Gestor del almacenamiento físico
Intérprete del lenguaje según el modelo de datos utilizado
Compilador y Optimizador de las consultas
Motor de la BD
Gestor de las transacciones
Gestor de los usuarios y seguridad
Hay muchos, pero muchos, SGBD:
Comparativa SGBD Relacionales
Comparativa SGDB No SQL
Un caso especial (pero muy actual): SGBD como servicio ( Cloud Databases ).
Más avanzado pero muy utilizado en servicios complejos
Un tercero (delego mi responsabilidad) gestiona mi base de datos en su infraestructura
Uso la BD como un servicio, es decir DBaaS (o podría instalarla en su infraestructura -> IaaS)
Sistemas SGBD
¿Cuántos SGBD hay?
¿Cual fue el primero que se desarrolló?
¿Cual es la última versión de PostreSQL?
¿Cual la de mariaBD?
¿Cuántas versiones de Oracle hay?
¿Cual es el SGBD más usado en el mundo?
¿Microsoft Access cuánto cuesta?
Para organizar tu lista de la compra, ¿qué sistema utilizarías?
¿Cuándo te compensa usar un SGBD?
¿Prepara una pequeña presentación (máximo 3 minutos) sobre un SGBD?
1.2.6. El lenguaje SQL¶
-
Usa el modelo relacional (datos en tablas)
Es un lenguaje declarativo: le dices qué necesitas, no cómo obtenerlo
Es el más utilizado para la gestión de BD
Simple (fácil de aprender) pero a la vez permite operaciones muy complejas
Es completo (Operaciones CRUD , Transacciones, etc)
Permite utilizar los tres tipos de necesidades para gestionar un almacén de datos:
Definición de datos: Lenguaje DDL (para crear el diseño físico)
Modificación de datos: Lenguaje DML (para usar los datos)
Control de Datos: Lenguaje DCL (para gestionar el acceso)
Fácil de entender:
Repasar Material
Lee, de los artículos citados en la clase. Ahora lo que te interesa es que te vayas familizarizando, después trabajaremos con SQL (Consultando con SQL)
1.2.7. El SGBD Sqlite¶
Pequeñita (pero matona). Sqlite Home Page
Pequeña
(muy) Rápida
Fiable
Stand-alone: toda la bd en un archivo (autocontenida)
Soporte (casi) completo SQL: Full Featured SQL
Muy fiable
Y fácil de utilizar ( Getting Started ):
Instalación básica de SQLite
Instala sqlite y dile hola.
Prueba
>sqlite3 test.sql
a ver si ya está instalado (Lo instalas , o lo pruebas en el navegador )Le dices hola (en SQL) ->
sqlite> select 'hola';
O hasta pídele una suma (en SQL) ->
sqlite> select 14 * 23/4.56
Y da para mucho más, puedes hasta pedirle ayuda de los comandos ->
sqlite> .help
1.2.8. Tutorial Completo ( DBMS Tutorial )¶
Qué es una base de datos
Tipos de Bases de Datos
Qué es un sistema gestor de base de datos
Archivos vs BD
Arquitectura de una BD
Modelos de Datos
Tipos de lenguajes en las BD
Propiedades ACID
Estudiar Tutorial
Aunque en inglés, está muy bien estructurado y fácil de seguir. Repasa el tutorial de JavaTpoint (DBMS Tutorial ) para afianzar los conceptos generales de este tema.