1. Almacenar (y usar) Datos#

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.

Esfuerzo Necesario

El curso está organizado en 8 sesiones de clase. Cada clase (sesión) implica una dedicación de entre 2 y 4 horas.

La dedicación depende del conocimiento previo, motivación y capacidad de aprendizaje del estudiante para esa sesión en concreto.

1.1. Almacenar Datos#

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

  2. ¿Qué es un almacén de datos (datawarehouse)? Una parte importante del sistema

  3. BD (DB) vs SGBD (DBMS)

  4. Arquitectura de un sistema: 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
  5. Organización habitual de los datos: una tabla

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

    2. Columnas (campos)

  6. ¿Cómo se almacenan los datos?

    1. Aspectos físicos (donde)

    2. y lógicos (cómo).

  7. Los problemas son siempre (más o menos) los mismos

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

    2. ¿Cómo lo gestiono ? Operaciones CRUD

    3. ¿Cómo garantizo la integridad (transacción)? 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. Cuando compras en Amazon, ¿qué elemento del sistema pertenece a cada una de las capas en las que lo podríamos estructurar?

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

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

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

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

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

1.2. Estrategias de Almacenamiento#

  1. Estrategia 1: ficheros.

    1. Archivos de texto

    2. Archivos binarios

  2. Estrategia 2: archivos con organización (lógica):

    1. CSV .

      1. 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)

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

    1. Organizo los datos en una base de datos y

    2. tengo un sistema que lo gestiona (SGBD)

  4. Cada estrategia tiene sus ventajas e inconvenientes

  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)

Concretando un almacén de datos

Supón que quiero almacenar los datos de profesores del insituto en un almacén que esté en un archivo. Haz un ejercicio en papel (o si ya te vienes muy arriba en real) para:

  1. Usar un archivo CSV

  2. Usar un archivo JSON (si conoces la tecnología)

  3. Usar un archivo XML (si conoces la tecnología)

  4. Usar una hoja de cálculo

  5. ¿Qué ventajas e inconvenientes le ves a cada uno?

1.3. El Esquema de una Base de Datos#

  1. Descripcion general de una base de datos: esquema (schema)

  2. Elementos de la estructura (no formal):

    1. Para una tabla:

      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: relaciones entre ellas (claves ajenas / Foreign Keys)

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

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

    2. A nivel físico y lógico …

    3. Y usas un modelo concreto para …

    4. generar un plano de tu almacén.

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

    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, el modelo plano y el modelo relacional

  6. En resumen ( What is a database ): describir formalmente la estructura y tipo de contenido de tu almacén.

Escogiendo un modelo de datos

Qué tipo de modelo de datos escogerías para resolver los siguientes almacenes:

  1. La lista de la compra

  2. Mi árbol genealógico

  3. Los pedidos de una bocatería (p.ej. de Marilyne )

Lo ideal es usar papel para aprender mejor (ya luego lo pasarás a digital si te interesa).

1.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 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)

Esbozo de diseño de una BD

Intenta hacer un diseño (esbozo) de los pedidos de una bocatería (p.ej. de Marilyne )

1.5. Sistemas Gestores de bases de datos#

  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

  3. Descripción del SGBD: Arquitectura ANSI/XPARC :

    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
  4. Muchos componentes según la complejidad del sistema:

    1. Interfaz externa: GUI (gráfica) y 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

  5. Hay muchos (pero muchos) SGBD. Algunos ejemplos:

    1. Comparativa SGBD Relacionales

    2. Comparativa SGDB No SQL

    3. y muchas más

  6. SGBD como servicio ( Cloud Databases ). Más avanzado pero muy utilizado en servicios complejos

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

    2. 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. ¿Podrías preparar una pequeña presentación (máximo 3 minutos) sobre un SGBD?

1.6. El lenguaje SQL#

  1. Características:

    1. Usa el modelo relacional

    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 también 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

    2. Modificación de datos: Lenguaje DML

    3. Control de Datos: Lenguaje DCL

  3. Fácil de entender:

    ../_images/ejemplo_sql.png

Repasar Material

Lee, de forma superficial (profundizaremos sobre SQL más adelante) los artículos citados en la clase.

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

Puedes repasar el tutorial de JavaTpoint (DBMS Tutorial ) para afianzar los conceptos generales del tema