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:

  1. Conocer los diferentes componentes

  2. Conocer las diferentes operaciones que se necesitan

  3. 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

  1. ¿Qué es un dato ? Un valor (que se puede guardar)

  2. ¿Qué es un almacén de datos (datawarehouse)? Donde guardamos los datos (organizados)

  3. Una Base de datos (como almacén de datos). Tiene:

    1. Datos organizados en …

    2. una estructura …

    3. para almacenarlos y consultarlos

  4. BD (DB) vs SGBD (DBMS): no es lo mismo el almacén, que quien lo gestiona

  5. Arquitectura de un sistema software: Arquitectura de tres capas

    1. Presentación. La interfaz con el usuario

    2. Lógica. La programación

    3. Datos. Los datos y el almacenamiento

    https://upload.wikimedia.org/wikipedia/commons/thumb/5/51/Overview_of_a_three-tier_application_vectorVersion.svg/2292px-Overview_of_a_three-tier_application_vectorVersion.svg.png
  6. Organización habitual de los datos (el modelo relacional):

    1. Tablas con un conjunto de datos (valores) organizados en …

    2. Filas (registros) y …

    3. Columnas (campos)

  7. ¿Cómo se almacenan?

    1. Aspectos físicos (donde). Generalmente en memoria y sistema de almacenamiento de apoyo (en disco lo habitual)

    2. y lógicos (cómo). Generalmente en un conjunto de archivos propio del SGBD o en un archivo plano (si no hay SGBD).

  8. Los problemas son siempre los mismos (más o menos y simplificando):

    1. ¿Cómo organizo el almacén ? La estructura

    2. ¿Cómo lo gestiono ? Operaciones CRUD

    3. ¿Cómo garantizo el uso? Conceptos ACID

    4. ¿Cómo disminuyo la velocidad de acceso/uso?

    5. ¿Cómo protego el acceso a los datos?

Conceptos Generales

  1. ¿Cuales son las diferencias entre dato, base de datos y sistema gestor de base de datos?

  2. Dime tres ejemplos de datos (tanto el valor como el tipo)

  3. ¿Una foto podríamos considerarlo un dato o un conjunto de datos?

  4. Cuando compras en Amazon, ¿qué elemento del sistema pertenece a cada una de las capas en las que lo podríamos estructurar?

  5. ¿Sabes distinguir qué es una fila, una columna, un campo, un registro o un valor dentro de una tabla?

  6. Dime un ejemplo de almacén de datos que sea una sola tabla

  7. Si tuvieras diferentes tablas con diferente información, ¿es obligatorio que se relacionen de alguna manera?

  8. Dentro de una tabla (en el valor de un campo para un registro concreto), ¿puedo poner el valor que me de la gana?

  9. ¿Qué ventajas le ves a usar una BD como almacén para tus datos?

  10. ¿Qué operaciones necesitarías tener disponibles para usar tu almacén?

1.2.2. Estrategias de Almacenamiento

  1. Estrategia 0. Estructuras de datos: dentro del programa y almacenadas en memoria

  2. Estrategia 1: Ficheros: en almacenamiento externo (permanente)

    1. Archivos de texto: se almacenan texto (caracteres alfanuméricos)

    2. Archivos binarios: se almacenan números (códigos equivalentes a diferentes tipos de datos)

  3. Estrategia 2: Archivos con organización (lógica): añadir estructura a la estrategia 1:

    1. CSV .

      1. Es una tabla con datos organizados en filas

      2. Cada fila está organizada por campos, separados por comas (o caracter similar)

      ../_images/ejemplo_csv.png
    2. JSON . Texto organizado sintácticamente (con reglas)

      1. Cada dato pertenece a un campo

      2. Los campos están organizados jerárquicamente

      3. Se usan reglas para organizar los datos

      ../_images/ejemplo_json.png
    3. XML . Usar un lenguaje de marcas para gestionar el contenido usando una estructura jerárquica formal

      ../_images/ejemplo_xml.png
    4. Hojas de cálculo :

      1. Gestiona tablas en filas, columnas y celdas (valores)

      2. Muy útil y muy utilizado (pero con grandes limitaciones si es complejo)

      3. Muy fácil la exportación/importación con csv (una tabla a la vez)

      ../_images/ejemplo_hoja_calculo.png
  4. Estrategia 3:

    1. Organizo los datos en una base de datos y …

    2. tengo un sistema que lo gestiona (SGBD).

    3. Tiene una serie de ventajas, a cambio de hacer más complejo el sistema

  5. Para cada estrategia podemos hablar en dos niveles:

    1. Físico. Donde están guardados los datos (en disco o en memoria)

    2. Lógico. Cómo están organizados (en el sistema que lo gestiona)

  6. 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:

  1. Archivo CSV

  2. Archivo JSON (si conoces la tecnología)

  3. Archivo XML (si conoces la tecnología)

  4. 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?

  1. Sólo lo usa una persona y con un software

  2. Lo usan varias personas, unas desde el móvil, otras desde el ordenador de casa

  3. Hay mil profesores en ese instituto, pero el sistema sólo lo usa una persona

  4. Necesitamos un control muy estricto de los datos, es decir, que por ejemplo no acepte caracteres extraños en el nombre y apellidos.

  5. El almacén de datos está en otro ordenador (en la nube del instituto)

1.2.3. El Esquema de una Base de Datos

  1. Descripcion general de una base de datos: esquema (schema). La estructura (y alguna cosa más).

  2. Elementos de la estructura (no formal):

    1. Para una tabla (modelo plano o modelo relacional):

      1. Nombre de la tabla

      2. Nombres de las columnas (campos)

      3. Tipos de Datos (para cada campo)

      4. Restricciones (la principal la clave primaria, pero hay varias)

    2. Varias Tablas: añadimos relaciones entre ellas (claves ajenas / Foreign Keys). Nos basamos en el modelo relacional

  3. Proceso de diseño ( Complete Guide ):

    1. Describes la estructura de tu almacén de datos …

    2. usando un modelo (forma de organizarlo) concreto para …

    3. generar un plano de tu almacén.

    4. Y piensas cómo lo almacenas (nivel físico)

    5. Profundizaremos en esto en Diseñando una BD

  4. Hay diferentes tipos de esquemas ( 6 DB Schema Designs ), o sea, formas de organizar los datos en tu almacén los datos:

    1. Plano (Flat).

      https://cdn.filestackcontent.com/auto_image//compress/cache=expiry:max/xMnk4ZjwRdqrnIJ9euU5
    2. Jerárquico (Hierarquical)

      https://cdn.filestackcontent.com/auto_image//compress/cache=expiry:max/IswYQSvwTcy9J2J5lTe7
    3. En Red (Network)

      https://cdn.filestackcontent.com/auto_image//compress/cache=expiry:max/7MGri0iTF6Ma4GLymE86
    4. Relacional (Relational)

      https://cdn.filestackcontent.com/auto_image//compress/cache=expiry:max/7gaVTEQBOOslYsJ2hzYA
    5. En estrella (Star)

      https://cdn.filestackcontent.com/auto_image//compress/cache=expiry:max/cUoXDqV0QS2ycJeHHofM
    6. Snowlake

      https://cdn.filestackcontent.com/auto_image//compress/cache=expiry:max/54lRNPEdR0mv9D4i887z
  5. Vamos a utilizar, sobre todo:

    1. el modelo plano

    2. el modelo relacional

  6. En resumen ( What is a database ):

    1. describir formalmente la estructura

    2. 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:

  1. Una lista de la compra

  2. Mi árbol genealógico

  3. 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

  1. Diseñar implica que es mejor pensar bien antes de empezar:

    1. Evita problemas a futuro (por las prisas)

    2. Pero no es tan habitual (por las mismas prisas)

  2. Etapas en el diseño:

    1. Diseño Conceptual. En papel (visual). Para entenderse con una persona sin nivel técnico.

    2. 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

    3. Diseño Físico. Ponerlo en práctica en un lenguaje concreto (lenguaje de diseño del SGBD que escojas)

  3. Criterios de diseño generales

    1. Minimizar la redundancia

    2. Prevenir inconsistencias

    3. Asegurar la integridad de los datos

    4. Facilitar, con rapidez, el acceso a los datos

    5. Controlar el acceso (quien y a qué datos)

  4. 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

  1. Sistemas Gestores de bases de datos (el sistema):

    1. Te permiten administrar la BD:

      1. El almacén: la base de datos

      2. El sistema (hardware / software / usuarios) que lo gestiona: El SGBD

    2. Historia:

      1. organización secuencial

      2. navegación archivos

      3. relacionales (y SQL)

      4. OO

      5. NoSQL (Not Only SQL)

      6. XML / JSON

  2. Descripción del SGBD: Arquitectura ANSI/XPARC (no confundir con Arquitectura 3 capas software)

    1. Nivel Externo. Cada usuario tiene una visión de los datos (Vistas)

    2. Nivel Conceptual. Describe cómo están organizados los datos (Diseño Conceptual y Lógico)

    3. Nivel Interno. Describe cómo se almacenan los datos y donde (Diseño Físico)

    https://upload.wikimedia.org/wikipedia/commons/5/5c/ANSI-SPARC_DB_model.jpg
  3. Es un software complejo y con muchos componentes. Por ejemplo:

    1. Interfaz externa de uso: GUI (gráfica) y/o CLI (consola)

    2. Gestor del almacenamiento físico

    3. Intérprete del lenguaje según el modelo de datos utilizado

    4. Compilador y Optimizador de las consultas

    5. Motor de la BD

    6. Gestor de las transacciones

    7. Gestor de los usuarios y seguridad

  4. Hay muchos, pero muchos, SGBD:

    1. Comparativa SGBD Relacionales

    2. Comparativa SGDB No SQL

    3. y muchas más

  5. Un caso especial (pero muy actual): SGBD como servicio ( Cloud Databases ).

    1. Más avanzado pero muy utilizado en servicios complejos

    2. Un tercero (delego mi responsabilidad) gestiona mi base de datos en su infraestructura

    3. Uso la BD como un servicio, es decir DBaaS (o podría instalarla en su infraestructura -> IaaS)

Sistemas SGBD

  1. ¿Cuántos SGBD hay?

  2. ¿Cual fue el primero que se desarrolló?

  3. ¿Cual es la última versión de PostreSQL?

  4. ¿Cual la de mariaBD?

  5. ¿Cuántas versiones de Oracle hay?

  6. ¿Cual es el SGBD más usado en el mundo?

  7. ¿Microsoft Access cuánto cuesta?

  8. Para organizar tu lista de la compra, ¿qué sistema utilizarías?

  9. ¿Cuándo te compensa usar un SGBD?

  10. ¿Prepara una pequeña presentación (máximo 3 minutos) sobre un SGBD?

1.2.6. El lenguaje SQL

  1. El lenguaje SQL

    1. Usa el modelo relacional (datos en tablas)

    2. Es un lenguaje declarativo: le dices qué necesitas, no cómo obtenerlo

    3. Es el más utilizado para la gestión de BD

    4. Simple (fácil de aprender) pero a la vez permite operaciones muy complejas

    5. Es completo (Operaciones CRUD , Transacciones, etc)

  2. Permite utilizar los tres tipos de necesidades para gestionar un almacén de datos:

    1. Definición de datos: Lenguaje DDL (para crear el diseño físico)

    2. Modificación de datos: Lenguaje DML (para usar los datos)

    3. Control de Datos: Lenguaje DCL (para gestionar el acceso)

  3. Fácil de entender:

    ../_images/ejemplo_sql.png

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

  1. Pequeñita (pero matona). Sqlite Home Page

    1. Pequeña

    2. (muy) Rápida

    3. Fiable

  2. Stand-alone: toda la bd en un archivo (autocontenida)

  3. Soporte (casi) completo SQL: Full Featured SQL

  4. Muy fiable

  5. Y fácil de utilizar ( Getting Started ):

Instalación básica de SQLite

Instala sqlite y dile hola.

  1. Prueba >sqlite3 test.sql a ver si ya está instalado (Lo instalas , o lo pruebas en el navegador )

  2. Le dices hola (en SQL) -> sqlite> select 'hola';

  3. O hasta pídele una suma (en SQL) -> sqlite> select 14 * 23/4.56

  4. Y da para mucho más, puedes hasta pedirle ayuda de los comandos -> sqlite> .help

1.2.8. Tutorial Completo ( DBMS Tutorial )

  1. Qué es una base de datos

  2. Tipos de Bases de Datos

  3. Qué es un sistema gestor de base de datos

  4. Archivos vs BD

  5. Arquitectura de una BD

  6. Modelos de Datos

  7. Tipos de lenguajes en las BD

  8. 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.