Está en la página 1de 102

INTRODUCCIÓN A

BASE DE DATOS

Dra. D.ª Liliana Gavidia Ceballos

GRADO EN INGENIERTÍA INFORMÁTICA


Modulo de Formación Obligatoria
Este material es de uso exclusivo para los alumnos
de la Universidad Internacional de Valencia. No
Internacional está permitida la reproducción total o parcial de su
contenido ni su tratamiento por cualquier método
de Valencia por aquellas personas que no acrediten su relación
con la Universidad Internacional de Valencia, sin
autorización expresa de la misma.

Edita
Universidad Internacional de Valencia
Grado en
Ingeniería Informática

Base de datos
Modulo de Formación Obligatoria
6 ECTS

Dra. D.ª Liliana Gavidia Ceballos


Leyendas

Enlace de interés Ejemplo Importante

Los términos resaltados a lo largo del contenido en color naranja se recogen en el apartado GLOSARIO.
Índice

UNIDAD DE APRENDIZAJE 1. INTRODUCCIÓN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9


1.1. Definición de un Sistema de Gestión de Base de Datos (SGBD) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9

1.2. Características de una base de datos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10

1.3. Modelo Entidad-Relación. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10

1.3.1. Entidad. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11

1.3.2. Atributos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11

1.3.3. Relación. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12

1.4. Diseño de una Base de Datos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14

1.5. Tipos de datos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15

1.6. Creación de una Base de Datos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16

1.7. Creación de una tabla. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16

2.1. Primera Forma de Normalización (1NF). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22

2.2. Segunda Forma de Normalización (2NF). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23

2.3. Tercera Forma de Normalización (3NF) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24

2.4. Creación de un modelo de datos relacional usando los conceptos aprendidos anteriormente. . . . . . . 25

2.4.1. De Alto Nivel, Conceptuales o Semánticos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25

2.4.2. De Implementación, Lógicos o Tradicionales. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25

2.4.3. De Bajo Nivel o Físicos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25

2.5. Jupyter Notebook como herramienta de familiarización con el Lenguaje SQL. . . . . . . . . . . . . . . . . . . . . . . . 27

UNIDAD DE APRENDIZAJE 2. CÓMO MANIPULAR DATOS CON EL LENGUAJE SQL . . . . . . . . . . . . . . . . . . . . . . . . . 29


3.1. Lenguaje de Definición de Datos (DDL). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29

3.1.1. CREATE (DATABASE, ROLE, TABLE, VIEW). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29

3.1.2. ALTER TABLE nombre_tabla ADD COLUMN nombre_columna tipo_ variable . . . . . . . . . . . . . . . . . . . . . . 30

3.1.3. DROP(DATABASE, ROLE, TABLE, VIEW). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31

3.2. Lenguaje de Manipulación de Datos (DML). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31

3.2.1. SELECT. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32

3.2.2. INSERT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32

3.2.3. UPDATE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33

3.2.4. DELETE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34

3.3. Lenguaje de Control de Datos (DCL) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35

3.3.1. GRANT. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35

5
Índice
Internacional
de Valencia

3.3.2. REVOKE. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35

3.4. Expresiones de búsquedas selectivas, agrupación y orden. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36

3.4.1. LIKE. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36

3.4.2. Funciones de agregacion SUM, MAX, MIN, COUNT, AVG. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37

3.4.3. GROUP BY. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39

3.4.4. ORDER BY. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40

3.5. Expresiones avanzadas SQL. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40

3.5.1. Índices. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40

3.5.2. Restricciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42

3.5.3. Uniones. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46

UNIDAD DE APRENDIZAJE 3. CONCEPTOS Y FUNCIONES DE UN SISTEMA DE GESTIÓN DE BASES DE


DATOS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
4.1. Propiedades deseables en las transacciones. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51

4.1.1. Atomicidad. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51

4.1.2. Consistencia. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51

4.1.3. Aislamiento. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52

4.1.4. Durabilidad. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52

4.2. Niveles de aislamiento. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52

4.2.1. Serializable. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52

4.2.2. Lecturas Comprometidas (Committed Read). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52

4.2.3. Lecturas No Comprometidas (Uncommitted Read) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52

4.3. Estados de una transacción. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52

4.3.1. Activa (Active). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52

4.3.2. Fallida (Failed). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53

4.3.3. Abortada (Rolled Back) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53

4.3.4. Parcialmente Confirmada (Uncommitted) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53

4.3.5. Confirmada (Committed). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53

4.5. Planificaciones y concurrencia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54

4.6. Problemas con la concurrencia. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55

4.6.1. Actualización Perdida . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55

4.6.2. Lectura sucia. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56

4.6.3. Lectura No Repetible . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56

4.6.4. Lectura Fantasma. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56

6
Introducción a Base de Datos
Internacional
de Valencia

4.7. Bloqueos de datos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56

4.7.1. Lectura Comprometida (Committed Read). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56

4.7.2. Lectura Repetible (Repeatable Read). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56

4.7.3. Serializable (Serializable). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56

4.8.Control de la seguridad. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57

4.8.1. Cifrado. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58

4.8.2. Métodos de autenticación. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58

4.8.3. Mecanismos de control de acceso. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59

4.8.4. Vulnerabilidades y ataques. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59

4.8.5. Ataque de Inyección SQL. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60

UNIDAD DE APRENDIZAJE 4. BASES DE DATOS NO RELACIONALES. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63


5.1. NoSQL (Not only Structured Query Language) (No solo Lenguaje de Consulta Estructurado). . . . . . . . 63

5.2. Clasificación de las bases de datos NoSQL. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64

5.2.1. Orientadas a documentos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64

5.2.2. Orientadas a columnas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65

5.2.3. De clave valor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65

5.2.4. En grafos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65

5.3. MongoDB. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65

5.3.1. Instalación de MongoDB. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66

5.4. ¿Qué es CRUD?. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67

5.5. Programación orientada a objetos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67

5.6. Endpoints . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68

5.7. API . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69

5.8. REST. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69

5.9. JSON. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69

UNIDAD DE APRENDIZAJE 5. DESARROLLO DE APLICACIONES BAJO ENTORNO WEB USANDO BASES DE


DATOS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
6.1. Modelo Vista Controlador (MVC). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73

6.2. ORM. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74

6.3. SQLALCHEMY. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79

6.4. Procesador de Plantillas (Template Engine). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80

6.5. Framework de desarrollo Flask . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80

7
Índice
Internacional
de Valencia

6.5.1. Estructura de una aplicación de Flask. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81

6.5.2. Formularios web usando Flask como framework. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83

6.6. ¿Qué es Big Data?. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86

6.7. Internet de las Cosas (IoT) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87

GLOSARIO. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93

ENLACES DE INTERÉS. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97
Referencias bibliográficas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99

BIBLIOGRAFÍA. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99
Bibliografía recomendada. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100

8
Unidad de aprendizaje 1

Introducción

Las bases de datos son entidades o sistemas informáticos que funcionan como almacén para guardar
grandes volúmenes de información, con la menor redundancia posible. La idea principal de las bases
de datos, además de almacenar información, es que estos datos estén disponibles para diferentes
usuarios y programas. Esto nos lleva a relacionar el concepto de base de datos con conceptos de
redes informáticas para poder acceder a los datos desde cualquier dispositivo, específicamente
a través del modelo cliente-servidor, que revisaremos más adelante. Se revisa el modelo de datos
Entidad- Relación, las formas de normalización que ayuda a seguir de forma ordenada un procedi-
miento que reúne las mejores prácticas para el modelado de datos, se ve en detalle la sintaxis del
lenguaje SQL, que permite crear tablas y bases de datos, y realizar consultas y actualizaciones de los
datos almacenados en las mismas.

1.1. Definición de un Sistema de Gestión de Base de Datos (SGBD)


Los Sistemas de Gestión de Base de Datos, abreviado SGBD, del inglés Data Base Management
System (DBMS) son aquellos que permiten almacenar y posteriormente acceder a los datos de forma
rápida y estructurada. Pueden definirse como una colección de rutinas de software que sirven para
definir, crear y poblar, y manipular una base de datos. Entre los principales SGBD utilizados actual-
mente tenemos: Oracle, MySQL, Microsoft SQL SERVER, PostgreSQL, entre otros.

9
Unidad de aprendizaje 1. Introducción
Internacional
de Valencia

Las bases de datos se dividen principalmente entre relacionales y no relacionales (No SQL o Not Only
SQL). En este curso nos centraremos principalmente en las bases de datos relacionales, pero también
revisaremos diversos conceptos fundamentales de las bases de datos no relacionales, para hacer
algunos ejemplos prácticos de su uso en Internet de las Cosas (Internet of Things).

1.2. Características de una base de datos


Entre las principales características de los sistemas de base de datos se puede mencionar:

•• Independencia lógica y física de los datos. Las bases de datos no deben depender del sistema
operativo o los programas que interactúen con ella.

•• Redundancia mínima. Cada pieza de información es almacenada una sola vez y en un único lugar,
evitando problemas de inconsistencias que pueden generarse al hacer cambios sobre informa-
ción que se guarda con múltiples copias.

•• Acceso concurrente por parte de múltiples usuarios. Múltiples operaciones pueden llevarse a
cabo al mismo tiempo en la misma base de datos.

•• Integridad de los datos. La información se mantiene sin pérdidas.

•• Consultas complejas optimizadas.

•• Seguridad de acceso y auditoría. Sólo usuarios autorizados pueden acceder al sistema, y el sis-
tema lleva un registro de las transacciones realizadas, por lo que es auditable.

•• Respaldo y recuperación.

•• Acceso a través de lenguajes de programación estándar.

Vídeo. Características de una


Base de datos

1.3. Modelo Entidad-Relación


El modelo Entidad-Relación es una herramienta para el modelado de datos de un sistema de infor-
mación, y una sintaxis visual para el diseño de DB que permite representar las entidades, es decir los
objetos reales o elementos principales que se identifican en el problema a resolver, y las relaciones y
asociaciones entre las diversas entidades.

10
Introducción a Base de Datos
Internacional
de Valencia

Vídeo. Modelo Entidad - Relación

1.3.1. Entidad

Una entidad es cualquier cosa u objeto, ya sea real o abstracto sobre los que deseamos almacenar
algún tipo de información.

Son los objetos individuales. Como ejemplo de entidades podemos mencionar: pasajeros, vuelos,
tarifas, tarjetas de embarque, etc.

1.3.2. Atributos

Los atributos son características que describe a la entidad. El dominio es el conjunto de valores posi-
bles de los atributos.

En el diseño de una base de datos relacional, normalmente lo primero que se hace es definir las enti-
dades a considerar según el problema que se desea abordar y cuáles son los atributos (campos)
asociados de manera directa a cada entidad. Se define una tabla por cada entidad, la cual se repre-
senta mediante un recuadro. En ella:

•• El título representa la entidad.

•• La lista de elementos en el interior del recuadro representa los atributos que describen a la entidad.

A continuación se muestra la representación de la entidad: vuelos.

Vuelos
id
origen
destino
hora-salida
hora-llegada
aerolínea

Tabla 1. Representación de una entidad en una tabla.

En ella, el atributo id es el identificador único de la identidad, es decir, de cada vuelo en particular, por
lo que id se escogerá como clave primaria en la tabla que represente a la entidad vuelos. Los campos
de la tabla serán entonces: id, origen, destino, hora-salida, hora-llegada, aerolínea.

11
Unidad de aprendizaje 1. Introducción
Internacional
de Valencia

En el caso que ninguno de los atributos pudiera usarse como clave primaria, podría escogerse una
combinación de múltiples campos como clave primaria, que proporcionará la característica de identi-
ficar de manera única a la entidad.

1.3.3. Relación

En un modelo de datos, una vez definidas las entidades que componen la base de datos, y los atri-
butos que la describen, se establecen las relaciones entre las diversas entidades. Como dijimos ante-
riormente, se define una tabla por cada entidad.

Las relaciones entre tablas pueden ser del tipo:

•• Uno a Uno: En esta relación, un registro de una tabla se asocia a un único registro de la otra tabla
y viceversa.

Ejemplo: cada pasajero tiene una única tarjeta de embarque y cada tarjeta de embarque perte-
nece a un único pasajero.

Pasajeros Tarjeta-embarque
id-pasajero id-tarjeta-embarque
apellido id-pasajero
nombre fecha-vuelo
fecha-nacimiento nro-vuelo
sexo clase
teléfono asiento
email sala-embarque

Tabla 2. Relación Uno a Uno entre tablas.

•• Uno a Muchos: En esta relación, un registro de una tabla se asocia a uno o varios registros de
la otra tabla.

Ejemplo: cada vuelo tiene muchos pasajeros.

A continuación se ilustra la relación Uno a Muchos entra las tablas vuelos y pasajeros.

Vuelos Pasajeros Listado-pasajeros-vuelos


id id-pasajero id-vuelo
origen apellido id-pasajero
destino nombre fecha
hora-salida fecha-nacimiento
hora-llegada sexo
aerolínea teléfono
email

Tabla 3. Relación Uno a Muchos entre tablas.

12
Introducción a Base de Datos
Internacional
de Valencia

Para manejar esta relación de manera adecuada, se crea la tabla listado-pasajeros-vuelos, con los
campos id-vuelo, id-pasajero y fecha, para eliminar la redundancia de un mismo número de vuelo
agendado en diferentes días de la semana.

•• Muchos a muchos: En esta relación, varios registros de una tabla se asocian a varios registros
de la otra tabla 6.

Ejemplo: un pasajero puede tener varias reservaciones y a su vez una reservación puede estar
asociada a varios pasajeros, lo cual ilustra la relación Muchos a Muchos.

Pasajeros Reserva-vuelos
id-pasajero id-reserva
apellido trayecto
nombre tramo
fecha-nacimiento id-vuelo
sexo fecha-salida
teléfono fecha-llegada
email nro-adultos
nro-niños
nro-tercera-edad
clase

Tabla 4. Relación Muchos a Muchos entre tablas.

Nota: En la tabla reserva-vuelos, el campo trayecto puede tomar los valores ida o retorno; el campo
tramo toma los valores 1, 2, 3, etc. El registro de cada tramo corresponde a cada vuelo (inicial y cone-
xiones) como parte de la ruta hasta llegar al destino final. Si el vuelo es directo, la reserva tendrá un
solo tramo.

Este tipo de relaciones (1:1, 1: N, M: N) establecen la Cardinalidad de la base de datos.

Aquellas relaciones que sean de muchos a muchos pueden generar duplicidad de datos en la misma
tabla, lo cual es una condición no deseable, pues genera ambigüedades, y posibles errores e inconsis-
tencias. Para evitar esto, se puede definir una tercera tabla cuya clave primaria sea la combinación de
las claves externas de las tablas que tienen la relación muchos a muchos.

A continuación se ilustra cómo en la relación Muchos a Muchos entra las tablas pasajeros y reserva-
vuelos se reducen las redundancias al definir una tercera tabla detalles-viajeros, cuya clave primaria
es la combinación de las claves primarias de las dos tablas anteriores.

13
Unidad de aprendizaje 1. Introducción
Internacional
de Valencia

Pasajeros Reserva-vuelos Detalles-viajeros


id-pasajero id-reserva id-reserva
apellido trayecto id-pasajero
nombre tramo
fecha-nacimiento id-vuelo
sexo fecha-salida
teléfono fecha-llegada
email nro-adultos
nro-niños
nro-tercera-edad
clase

Tabla 5. Eliminación de redundancias en una relación Muchos a Muchos.

En este ejemplo, la relación muchos a muchos se lleva a uno a muchos cuando se introduce el id de
la reservación y el id de cada pasajero en la tabla detalles-viajeros. La clave primaria (única) de esta
tabla es la combinación de ambos id (id-reservación e id-pasajero).

1.4. Diseño de una Base de Datos


Se requiere aplicar una serie de principios en el diseño de bases de datos para su correcto funciona-
miento y su efectividad a la hora de realizar búsquedas y manipulación de los datos almacenados en ella.

El punto de entrada es la creación de un modelo de datos que permita:

•• Eliminar los datos redundantes, evitando consumos innecesarios de espacio en disco.

•• Mantener la integridad de los datos almacenados.

•• Permitir un acceso rápido y eficiente a la información sensible.

Una base de datos se descompone en tablas que contienen datos relacionados entre sí. Las varia-
bles de la tabla se conocen como campos o atributos, y los nombres de los campos encabezan las
columnas de la tabla. Las columnas de los campos contienen un solo tipo de información.

Vídeo. Diseño de una Base de Datos

Los registros de la base de datos se corresponden con las filas de las tablas. Un registro viene a ser
una ocurrencia de los campos de las tablas.

A continuación se muestra una tabla vuelos, que contiene 7 registros con los campos: id, nº de vuelo,
origen, destino, aerolínea, hora-salida, hora-llegada.

14
Introducción a Base de Datos
Internacional
de Valencia

id nro-vuelo origen destino aerolínea hora-salida hora-llegada


1 IB6674 CARACAS MADRID IBERIA 19:50 10:15
1 IB6674 CARACAS MADRID IBERIA 19:50 10:15
1 IB6674 CARACAS MADRID IBERIA 19:50 10:15
2 TK1836 BARCELONA ESTAMBUL TURKISH AIRLINES 13:15 17:40
3 LH0920 FRANCFORT LONDRES LUFTHANSA 20:00 20:40
4 LX0633 PARIS ZURICH SWISS 9:50 11:10
5 AA5823 DALLAS BEIJING AMERICAN 11:20 14:15
AIRLINES

Tabla 6. Ejemplo de una tabla en una base de datos.

En cada columna se asigna un tipo de datos que garantice consistencia.

El tipo de datos de cada campo (entero, decimal, texto, fecha, etc.) se define en el esquema de la base
de datos, al cual nos referiremos de ahora en adelante como schema.

A continuación se mencionan los tipos de datos más comúnmente usados:

1.5. Tipos de datos


Los datos que se almacenan en una base de datos tienen que ser de un determinado tipo:

INTEGER: usado cuando se quiere almacenar un número entero, es decir, que no contiene ningún
decimal.

DECIMAL: usado cuando se quiere almacenar un número que típicamente contiene algún decimal.

SERIAL: es también un entero, pero con la particularidad que se va incrementando automáticamente,


es decir, cada vez que se añade un nuevo registro, incrementa su valor en una unidad de manera auto-
mática.

VARCHAR: cadena de caracteres de longitud variable. Este sería el tipo a usar si se quiere almacenar
algún texto, frase o palabra.

TIMESTAMP: usado cuando se quiere almacenar fecha y hora.

BOOLEAN: usado para almacenar valores verdadero o falso de una variable.

ENUM: usado para almacenar uno de varios posibles valores discretos que puede tomar una variable.

15
Unidad de aprendizaje 1. Introducción
Internacional
de Valencia

Vídeo. Tipos de datos

1.6. Creación de una Base de Datos


Para crear una base de datos: sistema-reservaciones, mostramos a continuación la sintaxis de SQL
correspondiente.

CREATE DATABASE sistema-reservaciones;

Figura 1. Creación de una base de datos.

1.7. Creación de una tabla


Para crear una tabla vuelos, con los campos: id, origen, destino, duración, mostramos a continuación
la sintaxis de SQL correspondiente.

CREATE TABLE vuelos (


id SERIAL PRIMARY KEY,
origen VARCHAR NOT NULL,
destino VARCHAR NOT NULL,
duración INT NOT NULL
);

Figura 2. Creación de una tabla.

En este caso, vuelos es el nombre de la tabla, y luego se especifica qué tipo de información va a
contener la tabla:

El id es la referencia de cada vuelo individual.

El atributo SERIAL indica que la referencia id es un entero que se va incrementando uno a uno de
manera automática. El primer vuelo sería el número 1, el segundo el número 2 y así sucesivamente.

El atributo PRIMARY KEY indica que id es la referencia principal y que además identifica a cada vuelo
de manera única. La referencia hace más fácil ubicar un vuelo. Por ejemplo, se ubica el vuelo por la
referencia 2734 y se obtienen todos los detalles asociados a él. De no tenerla, tendría que indicarse un
vuelo cuyo origen es tal y cual y cuyo destino es tal y cual, que sería mucho más engorroso. Tener una
referencia en cada tabla permite ubicar los registros de manera más práctica y eficiente.

16
Introducción a Base de Datos
Internacional
de Valencia

Tanto el parámetro origen como destino son de tipo VARCHAR, y corresponden a la ciudad en la que
se origina el vuelo y la ciudad de destino, respectivamente.

El atributo duración es de tipo ENTERO y representa la duración del vuelo en minutos.

El atributo NOT NULL indica que el parámetro siempre debe tomar un valor, no puede ser vacío. Un
vuelo siempre tiene que tener un origen, un destino y una duración, por eso se le añade el atributo NOT
NULL. Si se trata de ingresar un vuelo sin indicar un origen o destino, o la duración, el sistema lo va a
rechazar. Esta es una manera de asignar restricciones (constraints) sobre la base de datos.

Vídeo. Creación de una Tabla

17
Unidad de aprendizaje 2

Normalización de la base de datos

Se conoce como Formas de Normalización a una serie de técnicas y recomendaciones aplicadas siste-
máticamente al modelo de datos a fin de eliminar información redundante en las tablas de una base
de datos. Esto evita problemas y errores que pudieran ocurrir al insertar, eliminar o actualizar regis-
tros en las tablas. A su vez, permite el uso eficiente del espacio que ocupan en memoria las tablas de
la base de datos, así como mantener la integridad de los datos y su escalabilidad.

Vídeo. Normalización de la BD

Considere la siguiente tabla: vuelos.

19
Id Nro-vuelo Origen Destino Aerolínea Hora-salida Hora-llegada Pasaporte Apellido Nombre

1 IB6674 CARACAS MADRID IBERIA 19:50 10:15 06678450 Gavidia Liliana

1 IB6674 CARACAS MADRID IBERIA 19:50 10:15 32775484 Jiménez José

1 IB6674 CARACAS MADRID IBERIA 19:50 10:15 02115537 Ceballos Olga

2 TK1836 BARCELONA ESTAMBUL TURKISH AIRLINES 13:15 17:40 15978124 Rodríguez Ernesto
Unidad de aprendizaje 2. Normalización de la Base de datos

3 LH0920 FRANCFORT LONDRES LUFTHANSA 20:00 20:40 21447895 Pérez Pedro

4 LX0633 PARIS ZURICH SWISS 9:50 11:10 82139600 González Judith

5 AA5823 DALLAS BEIJING AMERICAN AIRLINES 11:20 14:15 12115432 González Elena

Tabla 7. Ejemplo de una tabla en una base de datos con problemas de redundancia y potenciales problemas de inconsistencia.
de Valencia
Internacional

20
Introducción a Base de datos
Internacional
de Valencia

Nótese que en los registros 1, 2 y 3 hay información repetida al tener los tres pasajeros el mismo vuelo
(problemas de redundancia).

Si quisiéramos ingresar un nuevo vuelo que aún no tiene pasajeros, tendríamos que esperar a que
tuviera algún pasajero para ingresarlo, o tendríamos que colocar como nulos (NULL) los datos del
pasajero. Por otra parte, si quisiéramos ingresar 150 pasajeros de un mismo vuelo, tendríamos que
repetir la misma información del vuelo ciento cincuenta veces (problemas de inserción y redundancia).

Si se produce un retraso en el vuelo Caracas-Madrid, tendríamos que actualizar la hora de salida de


todos los pasajeros de ese vuelo. Si por error omitimos algún pasajero, generaríamos una inconsis-
tencia en los datos (problemas de actualización). También tenemos información faltante (fecha de
salida del vuelo), lo cual generaría problemas de actualización al no saber si los pasajeros tienen el
mismo número de vuelo pero viajan en fechas distintas.

Por último, si elimináramos cualquier pasajero en los registros 4 al 7, perderíamos la información de


su vuelo correspondiente (problemas de eliminación). Esto sucede debido a que la tabla contiene
información de dos entidades diferentes (vuelos y pasajeros).

En el proceso de normalización, lo que se hace es dividir la tabla en relaciones más pequeñas, de


manera de eliminar las dependencias redundantes.

A continuación se ilustra la división de una tabla en relaciones más pequeñas a fin de eliminar
de redundancias.

Tabla códigos-vuelo
Id Nro-vuelo
1 IB6674
1 IB6674
1 IB6674
2 TK1836
3 LH0920
4 LX0633
5 AA263

Tabla vuelos
Id-vuelo Origen Destino Aerolínea Hora-salida Hora-llegada
1 CARACAS MADRID IBERIA 19:50 10:15
1 CARACAS MADRID IBERIA 19:50 10:15
1 CARACAS MADRID IBERIA 19:50 10:15
2 BARCELONA ESTAMBUL TURKISH AIRLINES 13:15 17:40
3 FRANCFORT LONDRES LUFTHANSA 20:00 20:40
4 PARIS ZURICH SWISS 9:50 11:10
5 DALLAS BEIJING AMERICAN AIRLINES 11:20 14:15

Tabla 8. División de una tabla en una base de datos en relaciones más pequeñas a fin de eliminar de redundancias.

21
Unidad de aprendizaje 2. Normalización de la Base de datos
Internacional
de Valencia

Tabla pasajeros
Id-pasajero Pasaporte Apellido Nombre
1 06678450 Gavidia Liliana
2 32775484 Jiménez José
3 02115537 Ceballos Olga
4 15978124 Rodríguez Ernesto
5 21447895 Pérez Pedro
6 82139600 González Judith
7 12115432 González Elena

Tabla tarjeta-embarque
Id-vuelo Id-pasajero Fecha-salida
1 1 06/06/2018
1 2 06/06/2018
1 3 06/06/2018
2 4 16/06/2018
3 5 30/06/2018
4 6 06/07/2018
5 7 07/07/2018

Tabla 9. División de una tabla en una base de datos en relaciones más pequeñas a fin de eliminar de redun-
dancias (Cont.).

Adicionalmente, se podrían añadir los campos clase, asiento y sala a la tabla tarjeta-embarque.

Los problemas antes mencionados se suelen corregir al aplicar de manera sistemática las reglas de
normalización en la creación del modelo de datos, las cuales se subdividen en las siguientes formas
normales:

2.1. Primera Forma de Normalización (1NF)


La Primera Forma de Normalización establece que cada campo contiene un solo valor, es decir, no
puede tomar múltiples valores.

La clave primaria de la tabla que representa una entidad, representa a cada instancia de la entidad de
manera única, por lo que no hay registros repetidos.

El campo (o combinación de campos) escogidos como clave primaria no tienen valores repetidos ni
duplicados en la tabla.

Ejemplo: La tabla mostrada a continuación no cumple con la primera forma de normalización porque
hay múltiples elementos en el campo días-semana de un mismo registro y porque hay dos registros
repetidos (no existe clave primaria).

22
Introducción a Base de datos
Internacional
de Valencia

Días- Hora- Hora-


Id-vuelo Origen Destino Aerolínea
semanas salida llegada
IB6674 mar, jue CARACAS MADRID IBERIA 19:50 10:15
TK1836 mar BARCELONA ESTAMBUL TURKISH AIRLINES 13:15 17:40
LH0920 lun, jue FRANCFORT LONDRES LUFTHANSA 20:00 20:40
LH0920 lun, jue FRANCFORT LONDRES LUFTHANSA 20:00 20:40

Tabla 10. Ejemplo de una tabla en una base de datos que no cumple con la primera forma de normalización 1NF.

La misma tabla modificada, de manera que cumpla con la norma 1NF.

Días- Hora-lle- Hora-lle-


Id-vuelo Origen Destino Aerolínea
semanas gada gada
IB6674 mar, jue CARACAS 10:15 10:15 MADRID IBERIA
IB6674 mar, jue CARACAS 10:15 10:15 MADRID IBERIA
TK1836 mar BARCELONA 17:40 17:40 ESTAMBUL TURKISH AIRLINES
LH0920 lun, jue FRANCFORT 20:40 20:40 LONDRES LUFTHANSA
LH0920 lun, jue FRANCFORT 20:40 20:40 LONDRES LUFTHANSA

Tabla 11. Ejemplo de una tabla en una base de datos que sí cumple con la primera forma de normalización 1NF.

La clave primaria escogida es la combinación id-vuelo junto con días-semana.

2.2. Segunda Forma de Normalización (2NF)


La Segunda Forma de Normalización establece que todos los campos que no son claves o índices
dependen de todos los componentes de la clave primaria.

Ejemplo: La tabla mostrada a continuación no cumple con la segunda forma de normalización porque
los campos origen, destino, aerolínea, hora-salida, hora-llegada dependen del vuelo, pero no del día
de la semana.

Días Hora- Hora-


Id-vuelo Origen Destino Aerolínea
semanas salida llegada
IB6674 mar, jue CARACAS MADRID IBERIA 19:50 10:15
IB6674 mar, jue CARACAS MADRID IBERIA 19:50 10:15
TK1836 mar BARCELONA ESTAMBUL TURKISH AIRLINES 13:15 17:40
LH0920 lun, jue FRANCFORT LONDRES LUFTHANSA 20:00 20:40
LH0920 lun, jue FRANCFORT LONDRES LUFTHANSA 20:00 20:40

Tabla 12. Ejemplo de una tabla en una base de datos que no cumple con la segunda forma de normalización 2NF.
La misma tabla modificada, de manera que cumpla con la norma 2NF:

23
Unidad de aprendizaje 2. Normalización de la Base de datos
Internacional
de Valencia

Id-vuelo Días-semana
IB6674 mar
IB6674 jue
TK1836 mar
LH0920 lun
LH0920 jue

Id-vuelo Origen Destino Aerolínea Hora-salida Hora-llegada


IB6674 CARACAS MADRID IBERIA 19:50 10:15
TK1836 BARCELONA ESTAMBUL TURKISH AIRLINES 13:15 17:40
LH0920 FRANCFORT LONDRES LUFTHANSA 20:00 20:40

Tabla 13. Ejemplo de una tabla en una base de datos que sí cumple con la segunda forma de normalización 2NF.

2.3. Tercera Forma de Normalización (3NF)


La Tercera Forma de Normalización establece que los campos dependen únicamente de la clave
primaria y no tienen dependencia entre sí.

Ejemplo: La tabla mostrada a continuación no cumple con la tercera forma de normalización porque el
IVA depende del precio, no de id-vuelo.

Hora- Hora-
Id-vuelo Origen Destino Aerolínea Precio IVA
salida llegada
IB6674 CARACAS MADRID IBERIA 19:50 10:15 1200 120
TK1836 BARCELONA ESTAMBUL TURKISH AIRLINES 13:15 17:40 350 35
LH0920 FRANCFORT LONDRES LUFTHANSA 20:00 20:40 200 220

Tabla 14. Ejemplo de una tabla en una base de datos que no cumple con la tercera forma de normalización 3NF.

24
Introducción a Base de datos
Internacional
de Valencia

La misma tabla modificada, de manera que cumpla con la norma 3NF.

Id-vuelo Origen Destino Aerolínea Hora-salida Hora-llegada


IB6674 CARACAS MADRID IBERIA 19:50 10:15
TK1836 BARCELONA ESTAMBUL TURKISH AIRLINES 13:15 17:40

LH0920 FRANCFORT LONDRES LUFTHANSA 20:00 20:40

Precio IVA
1200 120
350 35
200 220

Tabla 15. Ejemplo de una tabla en una base de datos que sí cumple con la tercera forma de normalización 3NF.

2.4. Creación de un modelo de datos relacional usando los conceptos


aprendidos anteriormente
Tradicionalmente los modelos de datos se clasifican en tres grandes grupos, asociado al nivel de
abstracción que provee el modelo:

2.4.1. De Alto Nivel, Conceptuales o Semánticos

Permiten representar la realidad a través de estructuras que visualizan los datos de forma más
cercana a como el hombre los percibe. Usualmente estos modelos de datos proporcionan una gran
cantidad de constructores que permiten representar las propiedades de los entes de la manera más
fiel posible. El Modelo Entidad Interrelación (ER) se encuentra en esta categoría.

2.4.2. De Implementación, Lógicos o Tradicionales

Permiten representar la realidad a través de estructuras que pueden ser entendidas por usuarios,
pero que se acercan más a la forma como se almacenan en el ordenador. En esta categoría se incluyen
los modelos de datos implementados en los SGBD, tales como el jerárquico, y relacional.

2.4.3. De Bajo Nivel o Físicos

Representan cómo están almacenados los datos en memoria secundaria; cada SGBD posee un
modelo físico particular. El que se utilizó originalmente en el procesamiento de datos fue el registro y
el registro variante.

25
Unidad de aprendizaje 2. Normalización de la Base de datos
Internacional
de Valencia

A manera de ejemplo, se creó parte del modelo de datos para un sistema de reserva de vuelos de una
aerolínea, el cual se muestra a continuación:

Un pasajero realiza una reserva de vuelo que tiene uno o varios pasajeros

Pasajeros Reserva-vuelos Detalles-viajeros


id-pasajero id-reserva id-reserva
nro-pasaporte fecha-salida id-pasajero
apellido fecha-retorno
nombre nro-adultos
fecha-nacimiento nro-niños
sexo nro-tercera-edad
dirección clase
teléfonol

La reserva tiene un itinerario

El pasajero compra un boleto que genera una o más tarjetas de embarque.

Boleros Itinerarios Tarjeta de embarque


id-boleto id-reserva id-reserva
id-pasajero trayecto embarque
id-reserva tramo id-pasajero
clase id-vuelo nro-vuelo
precio fecha-vuelo fecha-vuelo
clase
asiento
sala-embarque

Cada bolero puede tener uno o más vuelos

Cada vuelo tiene muchos pasajeros

Vuelos Listado-pasajeros-vuelos
id id-vuelo
origen id-pasajero
destino fecha
hora-salida
hora-llegada
aerolínea

Tabla 16. Ejemplo de un modelo de datos para un sistema de reserva de vuelos de una aerol.

26
Introducción a Base de datos
Internacional
de Valencia

Para su creación, se siguieron paso a paso las recomendaciones de las formas de normalización, a fin
de eliminar información redundante, y de garantizar la integridad de los datos y su escalabilidad. En él
muestran las entidades, que aparecen resaltadas en color encabezando la tabla, junto con sus respec-
tivos atributos, así como relaciones uno a uno y uno a muchos entre las tablas.

2.5. Jupyter Notebook como herramienta de familiarización con el


Lenguaje SQL
Jupyter Notebook es una aplicación web que te permite crear y compartir documentos que contienen
código que corre en vivo, ecuaciones, gráficos y notas del código, trabaja con un amplio número de
lenguajes de programación y es ideal para el análisis de datos.

Algunas de sus características son:

•• Puede trabajar con bases de datos no relacionales y relacionales.

•• Al poder combinar texto, códigos y resultados, es ideal para documentar sobre el código y sobre
el análisis de datos con una interfaz sencilla.

•• Puedes importar una gran cantidad de paquetes para trabajar con diversas aplicaciones.

•• Tiene opciones para ocultar códigos y resultados que no deseas mostrar. Por ejemplo, si tienes
una abrumadora cantidad de código o quieres mostrar solo los resultados en gráficos para ha-
cer un reporte más limpio del código.

•• Puedes guardar la página en múltiples formatos, incluyendo HTML y PDF.

Entre los lenguajes usados por Jupyter Notebook se incluye Python, que junto con el ORM SQL
Alchemy nos facilitará la familiarización de con el Lenguaje SQL, que incluye soporte para SQLite,
MySQL, PostgreSQL, Oracle, MS SQL, entre otros.

SQLAlchemy presenta un método para asociar clases de Python definidas por el usuario con tablas de
bases de datos, e instancias de esas clases (objetos) con filas en sus tablas correspondientes. Incluye
un sistema que sincroniza de forma transparente todos los cambios de estado entre objetos y sus filas
relacionadas, llamada unidad de trabajo (work unit), así como un sistema para expresar consultas de
bases de datos en términos de las clases definidas por el usuario y sus relaciones definidas entre sí.

Existen otras librerías adicionales, como Pandas, disponible en Python para el análisis y manipu-
lación de datos. En Pandas, los DataFrames son unidades básicas, junto con las series. Las series
son arreglos de una dimensión mientras que los DataFrames son estructuras de datos bidimensio-
nales, con columnas de diversos tipos. Están basadas también en conceptos de vectores, así que se
pueden realizar operaciones vectoriales. Los DataFrames en general pueden usarse para importar
archivos de datos y luego con otras librerías como Numpy y Matplotlib para manipular los datos, y
realizar gráficas y visualizaciones de los mismos. La librería Pandas hace posible llevar a cabo todo
el proceso (lectura de datos, depuración, análisis y modelización) sin necesidad de cambiar a un
lenguaje más específico.

27
Unidad de aprendizaje 2. Normalización de la Base de datos
Internacional
de Valencia

Algunas de las funcionalidades de Pandas son las siguientes:

•• Un rápido y eficiente uso del objeto Dataframe para manipular datos con indexación integrada.

•• Herramientas para la lectura y escritura de datos de forma rápida y eficiente manejadas en me-
moria, como el DataFrame, y con posibilidad de trasladarlos a la mayoría de los formatos conoci-
dos para el manejo de datos, entre ellos: CSV y archivos de texto, Excel, bases de datos SQL, etc.

•• Proporciona una alineación inteligente de datos y un manejo integrado de los datos faltantes;
con estas funciones podemos obtener una ganancia de desempeño en los cálculos entre Data-
Frames y una fácil manipulación y ordenamiento de los datos de la colección de datos usada.

•• Flexibilidad para manipular y redimensionar las colecciones de datos, facilidad para construir
tablas pivote.

•• Posibilidad de filtrar los datos, agregar o eliminar columnas.

•• Indexación jerárquica que proporciona una forma intuitiva de trabajar con datos de alta dimen-
sión en una estructura de datos de menor dimensión.

•• Posibilidad de realizar cálculos agregados o transformaciones de datos.

•• Flexibles en la manipulación de datos de las hojas de cálculo y bases de datos relacionales como SQL.

•• Gran número de funcionalidades para el manejo de series de tiempo ideales para el análisis fi-
nanciero.

Todas sus funciones y estructuras de datos están optimizadas para el alto rendimiento, con las partes
críticas del código escritas en Python o C.

En algunas sesiones prácticas del presente curso, mostraremos algunos ejemplos de su uso.

28
Unidad de aprendizaje 3

Cómo manipular datos con el lenguaje SQL

SQL es un lenguaje sencillo, versátil y poderoso, que permite crear, consultar y manipular datos y
estructuras en una base de datos. También puede definirse como un lenguaje que permite especificar
consultas en una base de datos relacional.

3.1. Lenguaje de Definición de Datos (DDL)


El Lenguaje de Definición de Datos (DDL) es utilizado en la definición del schema, lo que permite
definir cómo se estructuran los datos en una base de datos relacional. Los comandos asociados a la
definición del schema se indican a continuación:

3.1.1. CREATE (DATABASE, ROLE, TABLE, VIEW)

Vídeo. Sintaxis Crear Tabla

29
Unidad de aprendizaje 3. Cómo manipular datos con el lenguaje SQL
Internacional
de Valencia

La sintaxis para crear una nueva tabla es la siguiente:

CREATE TABLE nombre_tabla (


nombre-columna1 tipo_variable,
nombre-columna2 tipo_variable,
nombre-columna3 tipo_variable,
nombre-columna4 tipo_variable
);

Figura 3. Sintaxis de Creación de tabla en SQL.

A continuación mostramos un ejemplo de creación de una tabla en SQL:

CREATE TABLE vuelos (


id-vuelo SERIAL PRIMARY KEY,
origen VARCHAR NOT NULL,
destino VARCHAR NOT NULL,
hora-salida TEXT,
hora-llegada TEXT,
aerolínea VARCHAR NOT NULL
);

Figura 4. Creación de una tabla en SQL.

3.1.2. ALTER TABLE nombre_tabla ADD COLUMN nombre_columna tipo_ variable

Vídeo. Sintaxis Modificar Tabla

El comando ALTER TABLE se utiliza para modificar la estructura de una tabla.

Para añadir una columna en una tabla ya existente, la sintaxis es la siguiente:

ALTER TABLE nombre_tabla


ADD COLUMN nombre_columna tipo_variable;

Figura 5. Sintaxis para añadir una columna en una tabla en SQL.

Ejemplo:
ALTER TABLE vuelos
ADD COLUMN fecha_vuelo TIMESTAMP;

Figura 6. Generación de una nueva columna en una tabla en SQL.

30
Introducción a Base de datos
Internacional
de Valencia

Para eliminar una columna en una tabla ya existente, la sintaxis es la siguiente:

ALTER TABLE nombre_tabla


ADD COLUMN nombre_columna

Figura 7. Sintaxis para eliminar una columna en una tabla en SQL.

Ejemplo:
ALTER TABLE vuelos
DROP COLUMN fecha-vuelo;

Figura 8. Eliminación de una columna en una tabla en SQL.

3.1.3. DROP(DATABASE, ROLE, TABLE, VIEW)

La sintaxis para eliminar completamente una tabla con todos sus datos es la siguiente:

DROP TABLE nombre_tabla;

Figura 9. Sintaxis para eliminar por completo una tabla en SQL.

Ejemplo:

DROP TABLE vuelos;

Figura 10. Eliminación por completo de una tabla en SQL.

Si por el contrario se desea eliminar la base de datos completa, el comando es el siguiente:

DROP DATABASE nombre_basedatos;

Figura 11. Sintaxis para eliminar por completo una base de datos en SQL.

En donde nombre_basedatos es el nombre de la base de datos.

3.2. Lenguaje de Manipulación de Datos (DML)


Una vez definido el schema, y después de introducir los valores de los campos, se puede proceder
a realizar búsquedas y consultas sobre la base de datos. Para ello se utiliza el Lenguaje de Consulta
o Manipulación de Datos (DML), que es el usado en las consultas y modificación de los datos. Sus
comandos se mencionan a continuación:

31
Unidad de aprendizaje 3. Cómo manipular datos con el lenguaje SQL
Internacional
de Valencia

3.2.1. SELECT

El comando SELECT se usa para consultar y obtener los datos de una tabla. Podemos realizar
consultas para obtener los datos de la tabla completa, o podemos obtener parte de los resultados al
especificar condiciones de búsqueda usando la cláusula WHERE.

Vídeo. Sintaxis para Obtener datos de


la Tabla

La sintaxis es la siguiente:

SELECT nombre_columna1,
nombre_columna2... Nombre_columna N
FROM nombre_tabla;

Figura 12. Sintaxis para consultar datos en una tabla en SQL.

Ejemplo:

SELECT * FROM vuelos;

Figura 13. Selección de todos los registros y columnas en una tabla en SQL.

A continuación se muestra la sintaxis para mostrar el valor de algunos parámetros seleccionados a


partir de una tabla:

SELECT id-vuelo, aerolínea FROM vuelos;

Figura 14. Selección de sólo las columnas indicadas (id, aerolínea) de todos los registros en la tabla vuelos en
SQL. Fuente: elaboración propia.

Ejemplo:

SELECT id-vuelo, aerolínea FROM vuelos


WHERE origen = 'caracas' AND
destino= 'madrid';

Figura 15. Selección de sólo las columnas indicadas (id, aerolínea) de los registros cuyo origen sea caracas y
cuyo destino sea Madrid en la tabla vuelos en SQL.

3.2.2. INSERT

El comando INSERT se usa para crear nuevos registros (llenar una fila en la tabla).

32
Introducción a Base de datos
Internacional
de Valencia

Vídeo. Sintaxis para Insertar datos en


la Tabla

La sintaxis es la siguiente:

INSERT INTO nombre_tabla


VALUES (data1, data2, ...);

Figura 16. Sintaxis para añadir datos en una tabla en SQL.

Ejemplo:

INSERT INTO vuelos


VALUES (ib6674, caracas, madrid, iberia, 19:50, 10:15);

Figura17. Inserción de datos en una tabla en SQL.

También es posible crear un nuevo registro en el que se insertan selectivamente valores en algunos
campos (no en todos):

INSERT INTO vuelos (id-vuelo, origen, destino, aerolínea)


VALUES (ib6674, caracas, madrid, iberia)
WHERE id-vuelo = 'IB6674';

Figura 18. Inserción selectiva de datos en una tabla en SQL.

3.2.3. UPDATE

El comando UPDATE es utilizado para actualizar cualquier valor en el registro de una tabla.

Vídeo. Sintaxis para Actualizar datos


de la Tabla

La sintaxis es la siguiente:

UPDATE nombre-tabla SET


nombre-columna = nuevo-valor WHERE alguna-condición;

Figura 19. Sintaxis para actualizar datos en una columna en una tabla en SQL.

33
Unidad de aprendizaje 3. Cómo manipular datos con el lenguaje SQL
Internacional
de Valencia

Supongamos que en el registro del vuelo en la tabla vuelos se cometió un error en el campo aerolínea
y hora-salida para el vuelo IB6674:

Id-vuelo Origen Destino Aerolínea Hora-salida Hora-llegada


IB6674 CARACAS MADRID SWISS 16:50 10:15
TK1836 BARCELONA ESTAMBUL TURKISH AIRLINES 13:15 17:40
LH0920 FRANCFORT LONDRES LUFTHANSA 20:00 20:40

Tabla 17. Ejemplo de una tabla en una base de datos con errores en los valores de los campos aerolínea y hora-salida
en un registro.

Si solo queremos corregir el error en la aerolínea:

UPDATE vuelos SET aerolínea = 'IBERIA'


WHERE id-vuelo = 'IB6674';

Figura 20. Corrección del valor de un dato en una tabla en SQL.

Si queremos corregir ambos errores en una misma línea de comandos:

UPDATE vuelos SET aerolínea = 'IBERIA'; hora-salida = '19:50'


WHERE id-vuelo = 'IB6674';

Figura 21. Corrección del valor de varios datos en una tabla en SQL.

3.2.4. DELETE

El comando DELETE se usa para eliminar datos de una tabla.

Vídeo. Sintaxis para Eliminar datos de


la Tabla

La sintaxis es la siguiente:

DELETE FROM nombre_tabla;

Figura 22. Sintaxis para eliminar datos en una tabla en SQL.

34
Introducción a Base de datos
Internacional
de Valencia

DELETE FROM vuelos;

Figura 23. Eliminación de todos los registros en una tabla en SQL.

A continuación se muestra un ejemplo de eliminación de registros de una tabla que cumplen una
determinada condición.

DELETE FROM vuelos WHERE id-vuelo = 'IB6674';

Figura 24. Eliminación de un solo registro en una tabla en SQL.

(Este registro es el único que cumple con la condición dada en la cláusula WHERE).

3.3. Lenguaje de Control de Datos (DCL)


Los comandos DCL se usan para proveer seguridad de la base de datos en un ambiente multiusuarios.
Se utiliza para otorgar o revocar privilegios a un usuario sobre un objeto de la base de datos. En otras
palabras, es lo que permite controlar los privilegios en la DB.

3.3.1. GRANT

El comando GRANT es usado para otorgar al usuario privilegios de acceso u otro tipo de privilegios
sobre la base de datos.

Ejemplos:

GRANT CREATE TABLE TO username;

Figura 25. Sintaxis SQL para permitir a un usuario crear una tabla.

GRANT DROP ANY TABLE TO username;

Figura 26. Sintaxis SQL para permitir a un usuario eliminar una tabla.

3.3.2. REVOKE

El comando REVOKE es usado para al usuario privilegios de acceso u otro tipo de privilegios sobre la
base de datos.

Seguidamente se muestra la sintaxis del comando.

REVOKE CREATE TABLE TO username;

Figura 27. Sintaxis SQL para permitir a un usuario eliminar una tabla

35
Unidad de aprendizaje 3. Cómo manipular datos con el lenguaje SQL
Internacional
de Valencia

Vídeo. Sintaxis para crear Usuarios y


conceder permisos en la Tabla

3.4. Expresiones de búsquedas selectivas, agrupación y orden


3.4.1. LIKE

La cláusula LIKE se usa en las consultas de SQL conjuntamente con la cláusula WHERE como parte de
la condición a cumplir, comparando datos extraídos de la tabla con una expresión que contiene como-
dines o caracteres especiales (como ‘%’ y ‘_’).

En ella:

•• El símbolo de porcentaje (%) representa ninguno, uno o más caracteres.

•• El símbolo de guion bajo (_) representa un solo carácter.

Vídeo. Sintaxis para hacer búsquedas


selectivas

Considere los siguientes datos de la tabla pasajeros:

Id-pasajero Pasaporte Apellido Nombre


1 06678450 Gavidia Liliana
2 32775484 Jimenez José
3 02115537 Ceballos Olga
4 15978124 Rodriguez Ernesto
5 21447895 Pérez Pedro
6 82139600 González Judith
7 12115432 González Elena

Tabla 18. Ejemplo de una tabla pasajeros en una base de datos.

Ejemplo 1:

SELECT*FROM pasajeros WHERE nombre LIKE ‘j%’;

Figura 28. Selección de todos los registros en la tabla pasajeros en SQL cuyo nombre empieza por "j".

36
Introducción a Base de datos
Internacional
de Valencia

Resultado:

Id-pasajero Pasaporte Apellido Nombre


2 32775484 Jimenez José
6 82139600 González Judith

Tabla 19. Resultado de la consulta de todos los registros en la tabla pasajeros en SQL cuyo nombre empieza por ‘j’.

Ejemplo 2:

SELECT*FROM pasajeros WHERE nombre LIKE ‘%a’;

Figura 29. Selección de todos los registros en la tabla pasajeros en SQL cuyo nombre finaliza con una ‘a’.

Resultado:

Id-pasajero Pasaporte Apellido Nombre


1 06678450 Gavidia Liliana
3 02115537 Ceballos Olga
7 12115432 González Elena

Tabla 20. Resultado de la consulta de todos los registros en la tabla pasajeros en SQL cuyo nombre finaliza con
una ‘a’.

Ejemplo 3:

SELECT*FROM pasajeros WHERE nombre LIKE ‘_o%’;

Figura 30. Selección de todos los registros en la tabla pasajeros en SQL cuyo nombre tiene una ‘o’ en la segunda
posición de los caracteres.
Resultado:

Id-pasajero Pasaporte Apellido Nombre


2 32775484 Jimenez José

Tabla 21. Resultado de la consulta de todos los registros en la tabla pasajeros en SQL cuyo nombre tiene una ‘o’
en la segunda posición de los caracteres.

3.4.2. Funciones de agregacion SUM, MAX, MIN, COUNT, AVG

Vídeo. Funciones de agregación

37
Unidad de aprendizaje 3. Cómo manipular datos con el lenguaje SQL
Internacional
de Valencia

La función SUM () retorna la suma total de una columna numérica. A continuación se muestra la
sintaxis de este comando.

SELECT SUM (nombre-columna)


FROM nombre-tabla
WHERE condición

Figura 31. Sintaxis para obtener la suma total de una columna numérica en una tabla en SQL.

La función MAX () devuelve el valor máximo en la columna especificada. A continuación se muestra la


sintaxis de este comando.

SELECT MAX (nombre-columna)


FROM nombre-tabla
WHERE condición

Figura 32. Sintaxis para obtener el valor máximo del campo especificado, en una tabla en SQL.

La función MIN () devuelve el valor mínimo en la columna especificada. A continuación se muestra la


sintaxis de este comando.

SELECT MIN (nombre-columna)


FROM nombre-tabla
WHERE condición

Figura 33. Sintaxis para obtener el valor mínimo del campo especificado, en una tabla en SQL.

La función COUNT () retorna el número de filas que cumplen con la condición especificada. A conti-
nuación se muestra la sintaxis de este comando.

SELECT COUNT (nombre-columna)


FROM nombre-tabla
WHERE condición

Figura 34. Sintaxis para obtener el número de filas que cumplen con la condición especificada en una tabla en SQL.

38
Introducción a Base de datos
Internacional
de Valencia

La función AVG () retorna el valor promedio de un columna numérica. A continuación se muestra la


sintaxis de este comando.

SELECT AVG (nombre-columna)


FROM nombre-tabla
WHERE condición

Figura 35. Sintaxis para obtener el valor promedio de una columna numérica en una tabla en SQL.

3.4.3. GROUP BY

La cláusula GROUP BY permite agrupar los resultados de una consulta SELECT según una o más
columnas. Suele usarse a menudo con las funciones de agregación (SUM, MAX, MIN, COUNT, AVG)
para agrupar el conjunto de resultados por una o más columnas.

La sintaxis es la siguiente:

SELECT nombre-columna, function (nombre-columna)


FROM nombre-tabla
WHERE condición
GROUP BY nombre-columna

Figura 36. Sintaxis para agrupar datos en una tabla en SQL.

Ejemplo: Supongamos que tenemos una tabla tarjeta-embarque con los siguientes campos:

Tarjeta-embarque

id-tarjeta-embarque id-pasajero
nro-vuelo nacionalidad-pasajero
fecha-vuelo
clase asiento
sala-embarque

Tabla 22. Ejemplo de una tabla tarjeta-embarque en una base de datos.

39
Unidad de aprendizaje 3. Cómo manipular datos con el lenguaje SQL
Internacional
de Valencia

Si queremos conocer el número de pasajeros según su nacionalidad en el vuelo IB6674:

SELECT COUNT (id-pasajero), nacionalidad-pasajero


FROM tarjeta-embarque
WHERE nro-vuelo=’IB’
GROUP BY nacionalidad-pasajero;

Figura 37. Conteo de pasajeros de un vuelo específico en una tabla en SQL agrupados por nacionalidad.

3.4.4. ORDER BY

La cláusula ORDER BY especifica la forma de ordenar los resultados. Esta cláusula se coloca de
último en la instrucción SQL y contiene una lista de los campos usados para ordenar, en el mismo
orden en el que se quiere aplicar los criterios para ordenar los resultados de la consulta SQL.

A manera de ejemplo, si se desea ordenar los resultados de una consulta de vuelos disponibles cuyo
origen sea caracas y cuyo destino sea Miami por aerolínea en orden ascendente, y en caso que haya
varios vuelos para una misma aerolínea, se desea también ordenarlos por hora de salida del vuelo en
forma ascendente, la cláusula ORDER BY a incluir al final de la instrucción sería la siguiente:

SELECT * FROM vuelos


WHERE origen=’caracas’ AND destino=’miami’
ORDER BY aerolínea, hora-salida;

Figura 38. Consulta SQL de vuelos con origen y destino específico presentados según hora de salida para cada
aerolínea.

Vídeo. Agrupaciones y ordenación de


los datos

3.5. Expresiones avanzadas SQL


3.5.1. Índices

Un índice acelera las búsquedas por un subconjunto de campos de interés y que probablemente no
incluya la clave primaria (índice primario).

40
Introducción a Base de datos
Internacional
de Valencia

A manera de ejemplo supongamos que se desea ubicar una palabra específica en un libro que no
tiene índice. En ese caso habría que ir página por página, y palabra por palabra para ubicar la palabra
que se está consultando. Si se dispone de un índice, simplemente se va al índice, se ubica la palabra
que se está buscando, y simplemente se va al número de página correspondiente. Adicionalmente,
cabe destacar que en un índice las palabras están guardadas en orden alfabético. De esta manera,
ubicar la palabra en el índice es más rápido. De allí la idea de utilizar índices, para hacer las consultas
de manera rápida y eficiente.

Existen diversos esquemas de indexación y para su evaluación se usa como parámetro el tiempo de
acceso, es decir, el tiempo que se tarda en buscar un determinado elemento de datos, o conjunto de
datos, usando un esquema determinado de indexación.

También se considera el espacio extra necesario. Esto es, el espacio adicional ocupado por la estruc-
tura del índice. Como normalmente la cantidad necesaria de espacio adicional suele ser moderada, es
razonable sacrificar el espacio para alcanzar un mejor rendimiento.

Existen básicamente dos tipos de esquemas de indexación:

•• Índices ordenados: estos índices están basados en una disposición ordenada de valores. El índi-
ce cuya clave de búsqueda especifica un orden secuencial es el índice agrupado (clustering in-
dex). Los índices agrupados también se llaman índice primarios. Los índices cuyas claves de
búsqueda especifican un orden diferente del orden secuencial se llaman índices no agrupados
(non clustering indexes) o secundarios.

•• Índices asociativos (hash indexes): estos índices están basados en una distribución uniforme de
los valores a través de una serie de cajones (buckets). EL valor asignado a cada cajón está deter-
minado por una función, llamada función de asociación (hash function). Estos índices están or-
denados de acuerdo a la función de asociación.

La tabla vuelos mostrada a continuación nos sirve de base para mostrar varios ejemplos del uso de índices.

id-vuelo origen destino aerolínea hora-salida hora-llegada


IB6674 CARACAS MADRID IBERIA 19:50 10:15
TK1836 BARCELONA ESTAMBUL TURKISH AIRLINES 13:15 17:40
LH0920 FRANCFORT LONDRES LUFTHANSA 20:00 20:40
LX0633 PARIS ZURICH SWISS 9:50 11:10
AA5823 DALLAS BEIJING AMERICAN AIRLINES 11:20 14:15

Tabla 23. Ejemplo de una tabla vuelos en una base de datos.

41
Unidad de aprendizaje 3. Cómo manipular datos con el lenguaje SQL
Internacional
de Valencia

Registros ordenados según índice hora-salida:

hora-salida id-vuelo
9:50 LX0633
11:20 AA5823
13:15 TK1836
19:50 IB6674
20:00 LH0920
id-vuelo origen destino aerolínea hora-salida hora-llegada
IB6674 CARACAS MADRID IBERIA 19:50 10:15
TK1836 BARCELONA ESTAMBUL TURKISH AIRLINES 13:15 17:40
LH0920 FRANCFORT LONDRES LUFTHANSA 20:00 20:40
LX0633 PARIS ZURICH SWISS 9:50 11:10
AA5823 DALLAS BEIJING AMERICAN AIRLINES 11:20 14:15

Tabla 24. Registros de una tabla vuelos en una base de datos ordenados según índice hora-salida.

El mismo ejemplo pero con los registros ordenados según índice aerolínea:

aerolínea id-vuelo
AMERICAN AIRLINES AA5823
IBERIA IB6674
LUFTHANSA LH0920
SWISS LX0633
TURKISH AIRLINES TK1836
id-vuelo origen destino aerolínea hora-salida hora-llegada
IB6674 CARACAS MADRID IBERIA 19:50 10:15
TK1836 BARCELONA ESTAMBUL TURKISH AIRLINES 13:15 17:40
LH0920 FRANCFORT LONDRES LUFTHANSA 20:00 20:40
LX0633 PARIS ZURICH SWISS 9:50 11:10
AA5823 DALLAS BEIJING AMERICAN AIRLINES 11:20 14:15

Tabla 25. Registros de una tabla vuelos en una base de datos ordenados según índice aerolínea.

3.5.2. Restricciones

Las restricciones son reglas para limitar el tipo de datos que puede ingresarse en una tabla, a fin de
mantener la integridad de los datos en la tabla.

Vídeo. Restricciones

42
Introducción a Base de datos
Internacional
de Valencia

A continuación mencionamos las principales restricciones que pueden ser añadidas a la tabla:

NOT NULL, la cual establece que la columna siempre debe tener un valor adecuado, que no puede ser
nulo. A continuación se muestra un ejemplo de su uso.

CREATE TABLE vuelos (


id-vuelo SERIAL PRIMARY KEY,
origen VARCHAR NOT NULL,
destino VARCHAR NOT NULL,
hora-salida TEXT,
hora-llegada TEXT,
aerolínea VARCHAR NOT NULL
);

Figura 39. Ejemplo de restricción NOT NULL.

En este caso los atributos origen, destino y aerolínea no pueden tomar el valor NULL.

UNIQUE, la cual asegura que la columna solo tomará valores únicos y que no habrá valores repetidos.
A continuación se muestra un ejemplo de su uso.

CREATE TABLE vuelos (


id-vuelo INT NOT NULL UNIQUE,
origen VARCHAR NOT NULL,
destino VARCHAR NOT NULL,
hora-salida TEXT,
hora-llegada TEXT,
aerolínea VARCHAR NOT NULL
);

Figura 40. Ejemplo de restricción UNIQUE.

En este caso el atributo id de la tabla vuelos toma valores únicos y no puede tomar el valor NULL.

Ejemplo:

ALTER TABLE vuelos (


ADD UNIQUE (id-vuelo)

Figura 41. Modificación de tabla para restricción UNIQUE.

43
Unidad de aprendizaje 3. Cómo manipular datos con el lenguaje SQL
Internacional
de Valencia

En este caso se especifica que el atributo id de la tabla vuelos toma valores únicos.

PRIMARY KEY, la cual asegura que cada registro pueda ser identificado de manera única. La clave
primaria debe tomar un valor único y no puede tomar el valor NULL. A continuación se muestra un
ejemplo de su uso.

CREATE TABLE vuelos (


id-vuelo INT PRIMARY KEY,
origen VARCHAR NOT NULL,
destino VARCHAR NOT NULL,
hora-salida TEXT,
hora-llegada TEXT,
aerolínea VARCHAR NOT NULL
);

Figura 42. Ejemplo de restricción PRIMARY KEY.

En este caso se crea el atributo id de la tabla vuelos como clave primaria.

Ejemplo:

ALTER TABLE vuelos (


ADD PRIMARY KEY
(id-vuelo)

Figura 43. Modificación de tabla para restricción PRIMARY KEY.

En este caso se crea el atributo id de la tabla vuelos como clave primaria.

FOREIGN KEY, la cual se usa para relacionar dos tablas. Considere el siguiente ejemplo:

Tabla vuelos

Id-vuelo Origen Destino Aerolínea Hora-salida Hora-llegada


IB6674 CARACAS MADRID IBERIA 19:50 10:15
TK1836 BARCELONA ESTAMBUL TURKISH AIRLINES 13:15 17:40
LH0920 FRANCFORT LONDRES LUFTHANSA 20:00 20:40
LX0633 PARIS ZURICH SWISS 9:50 11:10
AA5823 DALLAS BEIJING AMERICAN AIRLINES 11:20 14:15

44
Introducción a Base de datos
Internacional
de Valencia

Tabla pasajeros Tabla tarjeta-embarque


Id-pasajero Pasaporte Apellido Nombre Id-vuelo Id-pasajero Fecha-salida
1 06678450 Gavidia Liliana IB6674 1 06/06/2018
2 32775484 Jiménez José IB6674 2 06/06/2018
3 02115537 Ceballos Olga IB6674 3 06/06/2018
4 15978124 Rodríguez Ernesto TK1836 4 16/06/2018
5 21447895 Pérez Pedro LH0920 5 30/06/2018
6 82139600 González Judith LX0633 6 06/07/2018
7 12115432 González Elena AA5823 7 07/07/2018

Tabla 26. Ejemplo de uso de claves foráneas (id-pasajero e id-vuelo) en una tabla tarjeta-embarque. Ambas cla-
ves son claves primarias en otras tablas.

En la tabla tarjeta-embarque, id-pasajero es clave foránea (FOREIGN KEY), puesto que id-pasajero es
clave primaria en otra tabla. Lo mismo ocurre con id-vuelo, que es clave foránea, debido a que id-vuelo
es clave primaria en otra tabla. Esto impide que se inserten datos inválidos en las columnas id-vuelo e
id-pasajero de la tabla tarjeta-embarque.

CHECK, usada para limitar el rango de valores posibles de una columna de la tabla. Realiza compro-
baciones de los valores, antes de ser guardados en la base de datos. A continuación se muestra un
ejemplo de su uso.

CREATE TABLE vuelos (


id-vuelo INT NOT NULL CHEK(id>0),
origen VARCHAR NOT NULL,
destino VARCHAR NOT NULL,
hora-salida TEXT,
hora-llegada TEXT,
aerolínea VARCHAR NOT NULL
);

Figura 44. Ejemplo de restricción CHECK.

En este caso se restringe el valor de id a que sea mayor que cero.

Ejemplo:

ALTER TABLE vuelos (


ADD CHECK(id-vuelo>0);

Figura 45. Modificación de tabla para restricción CHECK.

45
Unidad de aprendizaje 3. Cómo manipular datos con el lenguaje SQL
Internacional
de Valencia

En este caso se restringe el valor de id a que sea mayor que cero.

DEFAULT, usada para asignar un valor por defecto en una columna de la tabla. A continuación se
muestra un ejemplo de su uso.

CREATE TABLE vuelos (


id-vuelo INT NOT NULL CHEK(id>0),
origen VARCHAR NOT NULL,
destino VARCHAR NOT NULL DEFAULT madrid,
hora-salida TEXT,
hora-llegada TEXT,
aerolínea VARCHAR NOT NULL
);

Figura 46. Ejemplo de restricción DEFAULT.

En este caso asigna el valor por defecto Madrid en el atributo destino en la tabla vuelos.

3.5.3. Uniones

El comando JOIN permite combinar información de dos o más tablas, que se juntan para permitir
presentar la información como si fuera un solo conjunto de datos. Para unirlas se usan valores
comunes en ambas tablas.

Vídeo. Uniones

Las diferencias entre los diferentes tipos de JOIN se resumen a continuación:

Inner join Left join Right join full Outer join

Figura 47. Representación Esquemática de los diversos tipos de Uniones (JOIN) en SQL. Fuente: recuperado de:
https://www. w3schools.com/sql/sql_join.asp

Para ilustrar el uso de los diferentes tipos de JOIN, se incluirán ejemplos usados considerando las dos
tablas mostradas a continuación:

46
Introducción a Base de datos
Internacional
de Valencia

Tabla pasajeros Tabla tarjeta-embarque


Id-pasajero Pasaporte Apellido Nombre Id-vuelo Id-pasajero Fecha-salida
1 06678450 Gavidia Liliana IB6674 1 06/06/2018
2 32775484 Jiménez José IB6674 2 06/06/2018
3 02115537 Ceballos Olga IB6674 3 06/06/2018
4 15978124 Rodríguez Ernesto TK1836 4 16/06/2018
5 21447895 Pérez Pedro LH0920 5 30/06/2018
6 82139600 González Judith LX0633 6 06/07/2018
7 12115432 González Elena AA5823 7 07/07/2018

Tabla 27. Tabla pasajeros y tabla tarjeta-embarque a ser usadas en los ejemplos de usos de los comandos de
Unión en SQL.

En la tabla tarjeta-embarque, si queremos obtener la información del pasajero, debemos combinar la


información de las dos tablas, a través del atributo común id-pasajero.

A continuación iremos describiendo los diversos tipos de JOIN:

CROSS JOIN o Producto Cartesiano, que retorna el producto cartesiano de las filas de las tablas
especificadas en la instrucción JOIN. El resultado es una tabla que combina una a una cada fila de la
primera tabla con cada fila de la segunda. La sintaxis es la siguiente:

SELECT lista-nombres-columna
FROM nombre-tabla1 CROSS JOIN nombre-tabla2;

SELECT*FROM pasajeros CROSS JOIN tarjeta-embaque;

Figura 48. CROSS JOIN O Producto Cartesiano.

INNER JOIN, que retorna como resultado una tabla que combina las filas de la primera tabla con las
filas de la segunda según se cumpla la condición de igualdad especificada en la cláusula del comando.
La sintaxis es la siguiente:

SELECT lista-nombres-columna FROM nombre-tabla1


INNER JOIN nombre-tabla2
WHERE nombre-tabla1.nombre-columna=nombre-tabla2;

SELECT*FROM pasajeros INNER JOIN tarjeta-embaque;


WHERE pasajeros.id-pasajero=tarjeta-embarque.id-pasajero;

Figura 49. INNER JOIN.

47
Unidad de aprendizaje 3. Cómo manipular datos con el lenguaje SQL
Internacional
de Valencia

LEFT OUTER JOIN, que retorna como resultado una tabla que combina todas las filas de la primera y la
segunda tabla que cumplan la condición especificada en la cláusula del comando, seguida del resto de filas
de la primera tabla y NULL como valor del resto de filas de la segunda tabla. La sintaxis es la siguiente:

SELECT lista-nombres-columna FROM nombre-tabla1


LEFT OUTER JOIN nombre-tabla2
ON nombre-tabla1.nombre-columna=nombre-tabla2;

SELECT*FROM pasajeros
LEFT OUTER JOIN tarjeta-embarque
ON pasajeros.id-pasajero=tarjeta-embarque.id-pasajero;

Figura 50. LEFT OUTER JOIN.

RIGHT OUTER JOIN, que retorna como resultado una tabla que combina todas las filas de la primera y la
segunda tabla que cumplan la condición especificada en la cláusula del comando, seguida de NULL como
valor del resto de filas de la primera tabla y el resto de filas de la segunda tabla. La sintaxis es la siguiente:

SELECT lista-nombres-columna FROM nombre-tabla1


RIGHT OUTER JOIN nombre-tabla2
ON nombre-tabla1.nombre-columna=nombre-tabla2;

SELECT*FROM pasajeros
RIGHT OUTER JOIN tarjeta-embarque
ON pasajeros.id-pasajero=tarjeta-embarque.id-pasajero;

Figura 51. RIGHT OUTER JOIN. .

FULL OUTER JOIN, que retorna como resultado una tabla que combina todas las filas de la primera y
la segunda tabla que cumplan la condición especificada en la cláusula del comando, seguida del resto
de filas de la primera y la segunda tabla. La sintaxis es la siguiente:

SELECT lista-nombres-columna FROM nombre-tabla1


FULL OUTER JOIN nombre-tabla2
ON nombre-tabla1.nombre-columna=nombre-tabla2;

SELECT*FROM pasajeros
FULL OUTER JOIN tarjeta-embarque
ON pasajeros.id-pasajero=tarjeta-embarque.id-pasajero;

Figura 52. FULL OUTER JOIN.

48
Unidad de aprendizaje 4

Conceptos y funciones de un sistema de gestión de bases


de datos

Un Sistema de Gestión de Bases de Datos (DBMS) utiliza 3 regiones de memoria en el ordenador:

•• Local: en ella almacena valores únicamente vistos por él cuando realiza cada proceso del DBMS.

•• Global: se encuentra en la memoria principal (RAM), y puede ser leída o escrita en cada proceso.

•• Disco: es la memoria global y puede ser leída o escrita en el disco duro.

Esto se conoce como el medio de almacenamiento físico, donde se almacena la base de datos. Los
posibles medios físicos se mencionan brevemente a continuación:

•• Caché: la principal característica de la memoria caché es que es muy rápida, más rápida que la
memoria principal, pero también más costosa. Solo algunos registros son más rápidos que la
memoria caché, pero la memoria caché es muy costosa. Es posible almacenar datos en ella, pero
su principal limitación es que es volátil, es decir, su contenido se desvanece una vez que se apa-
ga el sistema, impidiendo que los datos persistan en la base de datos.

49
Unidad de aprendizaje 4. Conceptos y funciones de un sistema de gestión de Base de datos
Internacional
de Valencia

•• Memoria principal: es bastante rápida, pero también es costosa y volátil, por lo que no es posi-
ble que los datos persistan en la memoria principal. Y, por otra parte, las bases de datos suelen
ser grandes, y la memoria principal disponible en la máquina puede o no ser suficiente para po-
der almacenar la base de datos completa. Aún si es capaz de albergar los datos completos, no
hay garantía de que los cambios que se realicen sobre la memoria principal persistan, porque
pueden ocurrir eventos como apagones, o re-inicializaciones de la máquina, con lo cual se pier-
den las actualizaciones realizadas.

•• Memoria flash: la característica más importante de las memorias flash es que son no volátiles,
lo que significa que una vez que se escribe algo en ellas, su contenido permanece, no se desapa-
rece, aun cuando se retire la energía del dispositivo, o suceda cualquier otra cosa. Las memorias
USB usadas comúnmente son ejemplos de la memoria flash.

•• Disco Magnético: es el disco duro al que comúnmente se hace referencia. Son económicos en
comparación con los demás medios de almacenamiento magnético, así que se puede usar para
almacenar grandes cantidades de datos y es por supuesto no volátil, pero es en general bastan-
te lento comparado con una memoria flash o una memoria principal.

•• Disco Óptico: son no volátiles, y bastante lentos. Algunos son de escritura una sola vez y múlti-
ples lecturas; sin son re-escribibles soportan múltiples lecturas y escrituras. CDs y DVDs son
ejemplos de discos ópticos.

•• Cinta Magnética: son medios de almacenamiento muy económicos y realmente lentos. Son muy
útiles para hacer respaldos de toda la información de una institución completa, o para hacer
respaldos en general de grandes cantidades de datos, pero para almacenamiento secundario,
no para uso diario, porque son extremadamente lentos.

El registro (Log) de transacciones en el sistema se escribe tanto en el disco duro como en la memoria
principal (RAM).

La memoria principal o RAM es rápida, de capacidad limitada y volátil, mientras que el almacena-
miento en el disco duro es lento pero de gran capacidad y duradero.

La memoria RAM es volátil, por lo que requiere energía constante para mantener su información
almacenada.

El almacenamiento en el disco duro es no volátil, por lo que mantendrá la información almacenada


incluso cuando no reciba energía eléctrica en forma constante.

El sistema operativo debe trasladar los datos a la memoria principal para poder acceder a ellos. Por
ejemplo, los datos almacenados en el disco duro deben ser llevados a la memoria principal, pero no
pueden ser leídos directamente desde el disco duro. Esto consume un tiempo en cargar los datos
provenientes del disco duro en la memoria principal, y a esto se le conoce como el tiempo de acceso.

Por su parte, una transacción es una secuencia de una o más operaciones (lecturas o escrituras), que
reflejan una sola transición en el“mundo real”. En él, las transacciones pueden ejecutarse por completo
o interrumpirse en el camino debido a fallos inesperados.

50
Introducción a Base de datos
Internacional
de Valencia

Algunos ejemplos de transacciones incluyen: las transferencia de dinero entre cuentas, el pago a
proveedores, reservaciones de vuelo en una aerolínea, la inscripción en un curso, la compra de bienes
y servicios, etc.

SELECT TRANSACTION
UPDATE vuelos
SET hora-salida = 19:50
WHERE id-vuelo = ‘IB6674’

COMMIT

Figura 53. Ejemplo de una transacción. Fuente: https://github.com/stanford-futuredata/cs145-2017/tree/mas-


ter/ lectures/lecture-8

En la ejecución de SQL en general, cada línea de código es igual a una transacción. Sin embargo, múlti-
ples líneas pueden ser agrupadas y ser consideradas una transacción (Figura 53).

La agrupación de las acciones de los usuarios (lecturas y escrituras) en transacciones, ayuda a:

•• Recuperación y durabilidad: Mantener los datos del DBMS consistentes y duraderos en caso
de caídas (crashes), interrupciones, apagones del sistema, etc.

•• Concurrencia: Lograr un mejor rendimiento ejecutando las transacciones en forma paralela sin
la generación de errores y anomalías en el sistema.

4.1. Propiedades deseables en las transacciones


Las transacciones en los sistemas de gestión de bases de datos deben poseer ciertas características
(ACID), las cuales se mencionan a continuación (el acrónimo justamente se refiere a estas propiedades):

4.1.1. Atomicidad

Se refiere a que las transacciones sean completas, es decir, si una operación consiste en una serie de
pasos, o todos ellos se ejecutan o ninguno, es decir, las transacciones son completas.

4.1.2. Consistencia

Es la propiedad que garantiza la integridad de los datos almacenados en la base de datos. Se mantiene
siempre que cualquier transacción lleve a la base de datos desde un estado válido a otro también
válido, asegurando que los datos sean exactos y consistentes, es decir que siempre estén intactos,
sean siempre los esperados y que no sean alterados en el proceso.

51
Unidad de aprendizaje 4. Conceptos y funciones de un sistema de gestión de Base de datos
Internacional
de Valencia

4.1.3. Aislamiento

Esta propiedad asegura que una operación no puede interferir otras y por ende que la realización de
dos transacciones sobre la misma información sea independiente y se produzca sin errores. Existen
varios niveles de aislamiento, los cuales definen cómo y cuándo los cambios realizados por una opera-
ción se hacen visibles para las demás operaciones.

4.1.4. Durabilidad

Esta propiedad asegura la persistencia de los datos, es decir, que una vez realizada y confirmada la
operación, que esta persista y no se pueda deshacer, aunque se produzcan fallos en el sistema y que
de esta forma los datos mantengan los valores generados como resultado de esas transacciones.

4.2. Niveles de aislamiento


El nivel de aislamiento de un Sistema de Gestión de Bases de Datos varía dependiendo del nivel de
bloqueo de lectura o escritura de datos que este establezca, o por el uso de múltiples versiones. Los
posibles niveles se describen a continuación.

4.2.1. Serializable

Este corresponde al nivel de aislamiento más alto, y establece que las transacciones se ejecuten en
forma serial, es decir, una después de finalizar la otra y así sucesivamente.

4.2.2. Lecturas Comprometidas (Committed Read)

En este nivel de aislamiento, el SGBD mantiene bloqueos de escritura de los datos seleccionados
hasta que finalice la transacción, mientras que el bloqueo de lectura acaba tan pronto se completa la
instrucción que está en ejecución.

4.2.3. Lecturas No Comprometidas (Uncommitted Read)

Este corresponde al nivel de aislamiento más bajo. En él se permiten las lecturas sucias, lo que quiere
decir que una transacción puede ver los cambios aún no confirmados por otra transacción.

4.3. Estados de una transacción


Las transacciones pueden tener diferentes estados, dependiendo de si están siendo ejecutadas, se
ejecutaron completamente, o fueron interrumpidas o abortadas en algún punto del proceso. Según
ello, se establecen los siguientes estados de una transacción:

4.3.1. Activa (Active)

Es el estado que mantiene la transacción mientras está siendo ejecutada.

52
Introducción a Base de datos
Internacional
de Valencia

4.3.2. Fallida (Failed)

Es el estado que se genera cuando es imposible continuar su ejecución normal.

4.3.3. Abortada (Rolled Back)

Es el estado que se genera cuando el proceso normal de ejecución de la transacción fue detenido,
se retrocede la transacción y se restaura la base de datos al estado anterior a su ejecución. A este
nivel se puede reiniciar su ejecución o cancelarla.

4.3.4. Parcialmente Confirmada (Uncommitted)

Es el estado que se genera después de ejecutarse la última instrucción, quedando pendientes por
ejecutar otras instrucciones de la misma transacción.

4.3.5. Confirmada (Committed)

Es el estado que se genera después de ejecutarse la última instrucción, habiéndose completado


exitosamente todas las instrucciones de la misma transacción.

Recuperación de operaciones en la bases de datos

En caso de interrupciones o que el usuario aborte la operación, las transacciones deben ser ejecu-
tadas completamente o mantener el registro de la misma para permitir revertir la transacción.

A continuación se muestra una operación en donde se están copiando filas de la tabla vuelos en
la tabla vuelos-desincorporados y seguidamente se están eliminando de la primera tabla. (Figura
54).

En este caso, si la operación se interrumpe, los datos quedarían repetidos en ambas tablas. Para
ello se agrupa todo en una transacción. (Figura 55).

Figura 54. Operaciones no agrupadas como transacciones. Ocurrirían incongruencias en las tablas en caso
de que la operación se interrumpa. Fuente: https://github.com/stanford-futuredata/cs145-2017/tree/mas-
ter/lectures/lecture-8

53
Unidad de aprendizaje 4. Conceptos y funciones de un sistema de gestión de Base de datos
Internacional
de Valencia

START TRANSACTION
INSERT INTO vuelos-desincorporados (id-vuelo, origen,
destino)
SELECT id-vuelo, origen, destino
FROM vuelos
WHERE id-vuelo=MH370
DELETE vuelos
WHERE id-vuelo=’MH370’
COMMIT OR ROLL BACK

Figura 55. Operaciones agrupadas como transacción. Fuente: https://github.com/stanford-futuredata/cs145-


2017/tree/master/lectures/lecture-8

4.5. Planificaciones y concurrencia


El acceso al disco suele ser lento y el rendimiento puede ser mejorado optimizando el tiempo por
cada transacción. Para ello, se ejecutan varias transacciones al mismo tiempo manteniendo a su vez la
consistencia en la DB.

En el ejemplo que se muestra a continuación se realizan dos modificaciones al parámetro hora –salida
y hora -llegada, que no pueden ejecutarse al mismo tiempo, ya que arrojarían resultados erróneos.

Cliente 1:
UPDATE vuelos
SET hora-salida = 13:00,
hora-llegada = 17:25
WHERE id-vuelo = ‘TK1836’

Cliente 2:
UPDATE vuelos
SET hora-salida = SELECT time(hora-salida,+ 30 minutes),
hora-llegada = SELECT time(hora-llegada, +30 minutes)
WHERE id-vuelo = ‘TK1836’

Figura 56. Operaciones de 2 clientes. No pueden ser ejecutadas al mismo tiempo porque el resultado sería inco-
rrecto. Fuente: https://github.com/stanford-futuredata/cs145-2017/tree/master/lectures/lecture-8

54
Introducción a Base de datos
Internacional
de Valencia

La corrección a este problema se muestra a continuación.

Cliente 1: START TRANSACTION


UPDATE vuelos
SET hora-salida = 13:00,
hora-llegada = 17:25
WHERE id-vuelo = ‘TK1836’
COMMIT
Cliente 2: START TRANSACTION
UPDATE vuelos
SET hora-salida = SELECT time(hora-salida,+ 30 minutes),
hora-llegada = SELECT time(hora-llegada, +30 minutes)
WHERE id-vuelo = ‘TK1836’
COMMIT

Figura 57. Operaciones de 2 clientes. Pueden ejecutarse al mismo tiempo. Fuente: https://github.com/stan-
ford- futuredata/cs145-2017/tree/master/lectures/lecture-8

4.6. Problemas con la concurrencia


Los problemas de concurrencia tienen que ver con problemas de aislamiento y consistencia del proce-
samiento de transacciones. El control de concurrencia asegura que se mantenga la consistencia de los
datos de una base de datos en un ambiente multiusuario.

La manera más simple de garantizar la consistencia de los datos sería efectuar cada transacción una
a una, después de ejecutarse completamente la que la precede. Sin embargo, esto tendría un gran
impacto en el desempeño del sistema de gestión de base de datos, ya que el nivel de concurrencia
se reduce al mínimo. Es por ello, que los mecanismos de control de concurrencia deben encontrar un
balance entre el mantenimiento de la consistencia de los datos y el mantenimiento de un elevado nivel
de concurrencia.

Si no se mantiene un adecuado control de concurrencia, se pueden perder actualizaciones generando


inconsistencias en las bases de datos debido a que los efectos de la ejecución de algunas transac-
ciones no quedan guardados en ellas. Por otra parte, pueden realizarse recuperaciones de informa-
ción inconsistentes. A continuación se describen posibles problemas que pueden presentarse cuando
se realizan varias transacciones de manera concurrente sin un mecanismo adecuado de control de
dicha concurrencia.

4.6.1. Actualización Perdida

La Actualización Perdida (Lost Update) ocurre cuando se pierde la actualización realizada por una
transacción porque se ejecuta otra transacción y esta sobrescribe los cambios de la otra transacción
sobre el mismo ítem.

55
Unidad de aprendizaje 4. Conceptos y funciones de un sistema de gestión de Base de datos
Internacional
de Valencia

Ejemplo de ello sería cuando dos usuarios intentan actualizar la misma información, pero solo una (la
más actual) queda registrada en la base de datos.

4.6.2. Lectura sucia

La Lectura Sucia (Dirty Read) ocurre cuando una transacción lee un valor de un ítem generado por otra
transacción que no se completó (con un Commit), y fue abortada, por lo que se produce un retroceso
a un estado anterior, pero la segunda transacción realiza una lectura de datos no comprometidos, es
decir, realiza una lectura de los datos antes de que estos recuperen su valor anterior. En estos casos,
la transacción podría estar realizando cambios a partir de datos que no son correctos.

4.6.3. Lectura No Repetible

Esta ocurre cuando una transacción lee la misma fila varias veces, y otra transacción modifica esa fila,
por lo que las diversas lecturas sobre la misma fila van a arrojar resultados diferentes.

4.6.4. Lectura Fantasma

La Lectura Fantasma ocurre cuando las transacciones no son aisladas entre sí, y por ejemplo se
intenta leer una fila que no ha sido generada aún, siendo inexistente y por lo tanto inválida su lectura.
Otro ejemplo sería cuando se está realizando una actualización de un conjunto de datos correspon-
dientes a una región y en ese justo momento se ingresa un nuevo registro de esa región.

4.7. Bloqueos de datos


A fin de evitar estos conflictos de concurrencia derivados en muchos casos de la realización de actua-
lizaciones de datos se introduce el concepto de bloqueo de datos, que impide que los usuarios lean o
modifiquen los datos que están siendo usados y modificados por otros usuarios. A continuación se
mencionan los niveles de aislamiento de los bloqueos.

4.7.1. Lectura Comprometida (Committed Read)

Evita que se produzcan lecturas no confirmadas.

4.7.2. Lectura Repetible (Repeatable Read)

Evita que ocurran lecturas no confirmadas ni lecturas irrepetibles, al efectuar bloqueos de lectura que
se mantienen hasta que la transacción sea completada.

4.7.3. Serializable (Serializable)

Impide que otros usuarios actualicen o inserten nuevas filas que satisfagan la condición de la cláusula
WHERE de la transacción, lo cual asegura que no se produzcan datos fantasmas.

56
Introducción a Base de datos
Internacional
de Valencia

4.8.Control de la seguridad
El concepto de seguridad en el ámbito de las bases de datos se refiere a la protección:

•• Frente a ataque externos.

•• Frente a caídas o fallos en el software o en equipo.

•• Frente a manipulación por parte de usuarios no autorizados.

El SGBD define qué usuarios pueden ingresar a la base de datos, y a través de los perfiles de usuarios,
a aquellos que sí tengan acceso, se les otorgan y revocan privilegios a nivel de archivos, registros o
campos, indicando qué actividades pueden realizar (solo consulta, consulta y modificación, crear y/o
eliminar tablas, bases de datos, modificar parámetros y variables en las tablas, etc.).

El objetivo principal de la seguridad en una base de datos es proteger la base de datos contra accesos
no autorizados, así como garantizar la confidencialidad, integridad y disponibilidad de la información.

El SGBD permite identificar y autentificar usuarios a través de un código y una contraseña. También
realizar identificación por hardware. Luego, el administrador a través de tablas del sistema puede
definir la permisología y privilegios de los usuarios sobre los objetos: acceso a la base de datos y sus
tablas, consulta, ingreso y actualización de datos en la tabla, creación o actualización de objetos, etc.

Existen dos niveles adicionales de seguridad:

•• Relación: para permitir o impedir que el usuario tenga acceso directo a una relación.

•• Vista: para permitir o impedir que el usuario tenga acceso a la información que aparece en una
vista.

Una amenaza es un tipo de acción o elemento capaz de atentar contra la seguridad de la información
a través de cualquiera de los aspectos fundamentales previamente mencionados. Estas amenazas
surgen a partir de la existencia de vulnerabilidades en los sistemas que son aprovechadas por los
atacantes. Existen dos tipos de amenazas: las intencionales (se intenta producir un daño) y las no
intencionales (se producen u omiten acciones que no buscar explotar la vulnerabilidad, pero ponen en
riesgo la seguridad).

Existen diversos mecanismos para salvaguardar cada una de las vulnerabilidades o fortalecer los
aspectos fundamentales de la seguridad. Cada aspecto lleva a técnicas diferentes, por ejemplo, para
salvaguardar la confidencialidad de los datos se utilizan técnicas de control de acceso y/o cifrado de
la información y las comunicaciones. A continuación revisaremos brevemente los principales meca-
nismos de defensa.

57
Unidad de aprendizaje 4. Conceptos y funciones de un sistema de gestión de Base de datos
Internacional
de Valencia

4.8.1. Cifrado

Es una técnica que protege y autentica a un documento o usuario al aplicarle un algoritmo criptográ-
fico. Ha sido usada a través de los años con el objetivo de que solo dos personas, autorizadas, puedan
intercambiar información sin que una tercera, no autorizada, sea capaz de descifrar la información
compartida.

El cifrado es una técnica para autenticar ya que solo las personas autorizadas pueden conocer el
mensaje, es decir, sin conocer una clave secreta, no es posible descifrarlo o recuperarlo. También es
una técnica que refuerza la confidencialidad ya que protege el contenido porque el resultado del algo-
ritmo criptográfico es información inentendible por una máquina o un usuario que intente interpretar
los datos sin la respectiva clave.

Consiste en dos pasos: encriptación y desencriptación. El primero consiste en la conversión de texto


en claro en un texto cifrado mediante un algoritmo criptográfico. El segundo es el proceso inverso y
requiere de una clave para recuperar la información original.

Existen dos tipos de clave que se pueden utilizar para el cifrado:

•• Clave Simétrica: este tipo de clave es el cual tanto el emisor como el receptor utilizan la misma
contraseña. También se utiliza la misma contraseña para encriptar y desencriptar. El cifrado con
clave simétrica ha alcanzado la perfección matemática (no se puede revertir el proceso, la única
opción es a través de ataque de fuerza bruta). Además, las velocidades de cifrado/ descifrado
son muy altas. El problema principal es el riesgo de distribuir y mantener la clave ya que el canal
no es seguro. Entre los principales algoritmos de clave simétrica están: DES, 3DES, Blowfish,
AES, entre otros.

•• Clave Asimétrica: este tipo de clave consiste en una pareja de claves compuesta en una clave pú-
blica y una clave privada, distintas entre sí. Tanto el emisor como el receptor difunden sus claves
públicas y conservan su clave privada (nunca se debe revelar). Para realizar el proceso de cifrado
se utiliza la clave pública y para el proceso de descifrado se utiliza la clave privada. Para cifrar, el
emisor utiliza la clave pública del receptor (clave difundida y publica para todos) y para descifrar,
el receptor utiliza su clave secreta o privada. Entre los principales algoritmos que utilizan claves
asimétricas tenemos: RSA, DSA, DiffieHellman, entre otros.

4.8.2. Métodos de autenticación

Son servicios o herramientas que se encargan de asegurar que el intercambio de datos sea auténtico,
es decir, verificar que el emisor, receptor, fecha y demás elementos de la comunicación sean correctos
y efectivamente quien dicen ser.

Entre los principales métodos de autenticación tenemos:

•• Biomédicas: huellas dactilares, retina ocular, iris ocular, entre otros.

•• Tarjetas Inteligentes: tarjetas que contienen certificados únicos de los usuarios.

58
Introducción a Base de datos
Internacional
de Valencia

•• Contraseñas: cadenas de caracteres asociadas a un usuario y se pueden comprobar localmente


o en red.

4.8.3. Mecanismos de control de acceso

Un mecanismo de control de acceso se ejecuta con el fin de que un usuario sea identificado y auten-
ticado de manera exitosa para que le sea permitido el acceso. Estos mecanismos proporcionan
una segregación de privilegios y permisos de usuario, así como de la administración de estos y sus
elementos.

Existen tres tipos de control de acceso:

•• Discrecional: es un método de restricción de acceso a objetos que se basa en la identidad de los


sujetos que pretender operar o acceder sobre ellos. Está presente en la mayoría de los sistemas
operativos y un claro ejemplo de este es el mecanismo son los permisos de lectura, escritura y
ejecución de las carpetas en Windows.

•• Basado en roles: consiste en la definición de perfiles (roles) a los que se le atribuye una serie de
características que aplican sobre los permisos y acciones que pueden llevar a cabo.

•• Obligatorio: este se basa en un “etiquetado” de todos los elementos del sistema y sobre las
cuales se aplicarán políticas de control de acceso configuradas. De este modo cualquier opera-
ción de un sujeto sobre un objeto será comprobado a través de las etiquetas y las políticas de
seguridad.

4.8.4. Vulnerabilidades y ataques

Los mecanismos de protegen las vulnerabilidades de los sistemas informáticos no son perfectos
y traen consigo otras vulnerabilidades. Los atacantes buscan explotar estas con diversos tipos de
ataques como los siguientes:

•• Interrupción: consiste en cortar la conexión entre sistemas informáticos dejando uno de ellos
no disponible. Por ejemplo, destruyendo un dispositivo hardware o borrando un programa o ar-
chivo, ataque de denegación de servicios, borrado de BD, entre otros.

•• Intercepción: consiste en adquirir un acceso no autorizado en la comunicación y desviar la infor-


mación en fluye en ella. Por ejemplo, ataque MiM (Hombre en el medio o Man in the Middle),
donde se copia la información a través de una intervención de un canal de la red.

•• Modificación: consiste en realizar un ataque por intercepción y posteriormente enviar el men-


saje interceptado al destino original con datos corruptos. Por ejemplo, caballos de Troya, virus,
entre otros.

•• Fabricación: consiste en enviar un mensaje por parte de un usuario no autorizado haciendo pa-
sar por otro usuario que si tiene acceso. Por ejemplo, inserción de registros en base de datos,
servidores, etc.

59
Unidad de aprendizaje 4. Conceptos y funciones de un sistema de gestión de Base de datos
Internacional
de Valencia

•• Fuerza Bruta: consiste en un método para averiguar una contraseña o clave probando todas las
combinaciones posibles hasta obtener la correcta. No es necesario tener conocimientos tecno-
lógicos para realizar este tipo de ataque y regularmente es realizado de forma automática por
programas. Para evitar este ataque se limita el número de intentos posibles o se requiere una
confirmación humana para probar una contraseña.

De acuerdo al tamaño de la clave, se puede estimar el tiempo que tardaría un programa en probar
todas las combinaciones posibles.

4.8.5. Ataque de Inyección SQL

Es un tipo de ataque que se realiza a lab. El ataque consiste en inyectar código creado por el atacante
al código fuente propio de la base de datos. A partir de esta inyección se pueden realizar las acciones
regulares de un administrador de base de datos, es decir, se puede otorgar/quitar privilegios, crear/
eliminar/modificar tablas, extraer datos de las tablas, entre otros. A manera de resumen de los princi-
pales comandos y cláusulas descritos en el lenguaje SQL tenemos:

•• From: selecciona la tabla sobre la cual se va a operar (o sobre sus registros).

•• Where: especifica las condiciones que deben cumplir los registros que se seleccionan.

•• Group by: utilizado para separar registros en grupos.

•• Having: especifica las condiciones que cumple cada grupo.

•• Order: ordena registros seleccionados.

•• Grant: utilizado para otorgar privilegios.

•• Revoke: utilizado para eliminar privilegios.

•• Create: utilizado para crear nuevos elementos (tablas, índices, etc.).

•• Drop: utilizado para eliminar elementos.

•• Select: utilizado para consultar registros de una tabla y comprobar que satisfagan una condi-
ción.

•• Insert: utilizado para cargar lotes de datos en la base de datos.

•• Update: utilizado para cambiar valores de registros y campos.

•• Delete: elimina registros de una tabla de la base de datos. Es posible realizar ataques directamen-
te a la base de datos o una página web aprovechándose de los defectos de programación.

Es posible realizar ataques directamente a la base de datos o una página web aprovechándose de los
defectos de programación.

60
Introducción a Base de datos
Internacional
de Valencia

En el ataque de seguridad por Inyección SQL, se introduce como identificador de usuario” ‘ OR 1 = 1;


/ ”, y como contraseña “*/--”. Esta instrucción pasa inmediatamente el control del acceso, ya que el
programa debe cumplir con la condición de que exista el identificador de usuario o 1=1, lo cual siempre
es cierto. Además, se coloca el signo “/” para introducir un comentario e invalidar el resto de la lógica.
De esta forma se supera el control fácilmente.

Vídeo. Ataque de inyección

61
Unidad de aprendizaje 5

Bases de datos no relacionales

5.1. NoSQL (Not only Structured Query Language) (No solo Lenguaje
de Consulta Estructurado)
NoSQL es un término que describe las bases de datos no relacionales de alto desempeño. Las bases
de datos NoSQL utilizan varios modelos de datos, incluidos los de documentos, gráficos, claves-
valores y columnas. Otra definición muy usada es que las bases de datos NoSQL han sido diseñadas
para atender las crecientes demandas de volumen, velocidad y variedad de los datos que van a ser
almacenados y consultados.

Las bases de datos NoSQL están orientadas hacia la gestión de datos y el diseño de base de datos
de grandes conjuntos de datos distribuidos. Las bases de datos NoSQL son reconocidas por su faci-
lidad de desarrollo, el desempeño escalable, la alta disponibilidad y la resiliencia. Generalmente es un
sistema mucho más liviano y rápido que el relacional SQL (Structured Query Language, Lenguaje de
Consulta Estructurado).

En otras palabras, las propiedades de los sistemas NoSQL pueden resumirse de la siguiente manera:

63
Unidad de aprendizaje 5. Base de datos no relacionales
Internacional
de Valencia

•• Escalabilidad: se acepta de manera generalizada que las bases de datos relacionales son esca-
lables. Sin embargo, cuando son muy grandes, comienzan los problemas. La escalabilidad en una
base de datos se refiere esencialmente al volumen de datos que intenta manejar. Uno de los
objetivos de las bases de datos NoSQL es hacer el sistema tan escalable como sea posible, de
manera que se pueda seguir añadiendo datos sin mayor problema.

•• Flexibilidad: las bases de datos relacionales siguen un esquema particular y ese esquema debe
ser seguido rigurosamente. En las bases de datos NoSQL los objetos o entidades pueden tener
diferentes tipos de atributos, otorgando la flexibilidad necesaria para la creciente demanda de
fuentes de colecciones de datos. Si pensamos en las redes sociales como Facebook, etc. No
todo el mundo tendrá muchos amigos, no todo el mundo subirá fotos, no todo el mundo tendrá
blogs, pero su estructura es flexible.

•• Naturalidad: algunas veces, para ajustarse a los a los modelos relacionales, los datos tienen que
ser adaptados al esquema relacional en una forma no del todo natural. El objetivo de los siste-
mas NoSQL es hacerlo más natural aún.

•• Facilidad de Distribución: sin importar cuán grande sea la base de datos relacional, la informa-
ción es en general almacenada en una sola máquina, en un gran disco. Los sistemas distribuidos
en general no son manejados muy bien, ni de una manera muy elegante. Esta propiedad se refie-
re a que los datos pueden ser distribuidos a través de diferentes máquinas la información recu-
perada o consultada de manera transparente, como si estuviera en una única máquina.

•• Buen desempeño: esto básicamente se refiere a que si se requiere actualizar algún registro en
la base de datos, debería hacerse de manera rápida y eficiente. Por ejemplo, si uno desea actua-
lizar algo en la cuenta de Facebook, deberá ser rápido, casi inmediato, de manera que los demás
amigos puedan verlo y así sucesivamente. Y si alguien escribe un comentario, deberíamos po-
der verlo de manera oportuna.

5.2. Clasificación de las bases de datos NoSQL


Aunque existen varias aproximaciones diferentes para clasificar las bases de datos NoSQL en general
se considera que existen cuatro tipos diferentes: orientadas a documentos, orientadas a columnas, de
clave-valor y en gráficos.

5.2.1. Orientadas a documentos

Son aquellas que gestionan datos semiestructurados, es decir, documentos. Estos datos son
almacenados en algún formato estándar como puede ser XML (Extensible Markup Language,
Lenguaje de Marcas Extensible), JSON (JavaScript Object Notation, Notación de Objetos de
JavaScript) o BSON (Binary JSON, JSON Binario). A un grupo de documentos con los mismos atri-
butos se les llama colección.

64
Introducción a Base de datos
Internacional
de Valencia

Son las bases de datos NoSQL más versátiles. Se pueden utilizar en gran cantidad de proyectos, inclu-
yendo muchos que tradicionalmente funcionarían sobre bases de datos relacionales. MongoDB y
CouchDB son ejemplos de esta clasificación.

5.2.2. Orientadas a columnas

Este tipo de bases de datos están pensadas para realizar consultas y agregaciones sobre grandes
cantidades de datos. Funcionan de forma parecida a las bases de datos relacionales, pero almace-
nando columnas de datos en lugar de registros. En esta categoría se encuentran Cassandra y HBase.
Apache Cassandra es la base de datos NoSQL usada por Twitter y escrita en Java. La versión genérica
de HBase usada por Google se denomina Bigtable.

5.2.3. De clave valor

Estas son las más sencillas de entender. Simplemente guardan tuplas que contienen una clave y su
valor. Cuando se quiere recuperar un dato, simplemente se busca por su clave y se recupera el valor.
Por ejemplo, DynamoDB y Redis.

5.2.4. En grafos

Basadas en la teoría de grafos utilizan nodos y aristas para representar los datos almacenados. Son
muy útiles para guardar información en modelos con muchas relaciones, como redes y conexiones
sociales. Neo4j es una base de datos de esta categoría.

5.3. MongoDB
MongoDB, que proviene de Humongous (enorme), es una base de datos no relacional (NoSQL), orien-
tada a objetos, y entre las no relacionales, una de las bases de datos más usadas hoy en día, ya que
permite a las empresas ser más ágiles y escalables. Organizaciones de todos los tamaños están
usando MongoDB para crear nuevos tipos de aplicaciones, mejorar la experiencia del cliente, acelerar
el tiempo de comercialización y reducir costes.

MongoDB es un sistema de base de datos multiplataforma orientado a documentos. Está licenciado


como GNU AGPL 3.0, de modo que se trata de un software de licencia libre. Funciona bajo sistemas
operativos Windows, Linux, OS X y Solaris.

Los distintos documentos se almacenan en formato BSON, que es una versión modificada de JSON que
permite búsquedas rápidas de datos. Para hacernos una idea, BSON guarda de forma explícita las longi-
tudes de los campos, los índices de los arreglos, y demás información útil para el escaneo de datos.

MongoDB está escrito en C++, aunque las consultas se hacen pasando objetos JSON como parámetro.
MongoDB viene de serie con una consola desde la que podemos ejecutar los distintos comandos. Esta
consola está construida sobre JavaScript, por lo que las consultas se realizan utilizando ese lenguaje.
Además de las funciones de MongoDB, podemos utilizar muchas de las funciones propias de JavaS-
cript. En la consola también podemos definir variables, funciones o utilizar bucles.

65
Unidad de aprendizaje 5. Base de datos no relacionales
Internacional
de Valencia

Cualquier aplicación que necesite almacenar datos semiestructurados puede usar MongoDB. Es el
caso de las típicas aplicaciones CRUD o de muchos de los desarrollos web actuales.

5.3.1. Instalación de MongoDB

MongoDB es una base de datos orientada a documentos. Esto quiere decir que en lugar de guardar los
datos en registros, guarda los datos en documentos. Estos documentos son almacenados en BSON,
que es una representación binaria de JSON.

Una de las diferencias más importantes con respecto a las bases de datos relacionales, es que no es
necesario seguir un esquema. Los documentos de una misma colección (concepto similar a una tabla
de una base de datos relacional), pueden tener esquemas diferentes.

A continuación se presentan los pasos para su instalación:

•• Entrar en la página web: www.mongodb.com/download-center

•• Seleccionar Community Server.

•• Seleccionar el sistema operativo del ordenador en el que se instalará el programa (Windows,


Linux u OSX).

•• En el recuadro Vision, seleccionar el número de bits del ordenador.

•• Seleccionar el botón Download.

•• Una vez presionado el botón Download, seleccionar la opción Ejecutar.

•• Cuando la descarga termine, se desplegará una ventana como la siguiente.

•• Seleccionar Next.

•• Seleccionar que se aceptan los términos y condiciones y una vez más Next.

•• En el próximo menú, no seleccionar Complete, en su lugar escoger Custom.

•• Seleccionar Browser.

•• Seleccionar la carpeta en donde se instalará MongoDB, en Look in. Recomendación: seleccionar


la carpeta C:

•• Seleccionar Ok > Next > Next > Install.

•• Una vez instalado seleccionar Finish.

•• Abrir el command prompt de Windows y escribir los siguientes comandos:

66
Introducción a Base de datos
Internacional
de Valencia

Figura 58. Activación del servidor MongoDB desde la consola administrativa de MongoDB.

Para confirmar que la conexión se puede realizar adecuadamente, escribir:

Figura 59. Conexión con la base de datos MongoDB. Ingreso en la consola de línea de comandos administrativa
de MongoDB.

5.4. ¿Qué es CRUD?


El propósito de las bases de datos no es solo almacenar información, sino manipular esa información
de distintas maneras con el objetivo de alimentar un conjunto de procesos previamente establecidos
en los sistemas informáticos.

En los sistemas de base de datos existen 4 funciones básicas las cuales son: Crear, Leer, Modificar y
Eliminar (Create, Read, Update and Delete - CRUD), de estas 4 funciones básicas derivan todo un sin
fin de funciones para el tratamiento de la información.

MongoDB provee un grupo de métodos en JavaScript para realizar CRUD en las bases de datos a
través de la consola y los drivers de los distintos lenguajes de programación.

5.5. Programación orientada a objetos


Este es un método de programación, de gran adopción a través de toda la industria de tecnologías
de información. Este esquema para programar está basado en objetos en lugar de acciones y datos
en lugar de lógica. Un objeto es un conjunto de datos que forma parte de una estructura definida por
reglas determinadas, bien sean: estáticos, no estáticos, públicos o privados, etc.

67
Unidad de aprendizaje 5. Base de datos no relacionales
Internacional
de Valencia

Dentro de los objetos se definen diferentes propiedades que afectan a los mismos, como por ejemplo
las relaciones. A su vez las propiedades se ve manipuladas por otros conceptos como el de encapsula-
ción, que se utiliza para ocultar información al usuario por medio de un procedimiento lógico que toma
los datos de entrada, los procesa, y produce datos de salida, de manera de poder controlar el flujo de
información entre usuario y aplicación.

Otra de las características con las que cuenta un objeto, es la herencia, según la cual las propiedades
de un objeto padre pueden ser asumidas por un objeto hijo.

La última propiedad que vale la pena resaltar son los métodos, los cuales hacen referencia a las opera-
ciones a las que se someten los objetos para alterar o modificar sus datos. Una característica resal-
tante de los métodos es el concepto de polimorfismo, donde existen versiones del mismo método,
pero con variables y resultados distintos.

Las clases son el modelo a partir del cual se define un objeto. Un objeto es una instancia de una clase.
De este concepto surge la idea de reciclar código, el cual permite utilizar métodos genéricos que apli-
quen a objetos de diferentes instancias.

5.6. Endpoints
En la informática los endpoints son dispositivos o nodos que se encuentran conectados a una red y
aceptan comunicaciones entrantes y salientes a través de esta.

Por la definición común de REST, un endpoint es un URI por el cual se puede acceder a un servicio o
recurso de una aplicación por parte de un cliente. Esta aplicación puede tener múltiples endpoints con
diferentes URIs para acceder a diferentes servicios y recursos.

Por otra parte, en el diseño de software de aplicaciones, el frontend es la parte del software que interactúa
con los usuarios y el backend es la parte que procesa la entrada de datos desde el frontend. Backend es a
la vez un término empleado para definir el desarrollo de la aplicación que se encuentra del lado del servidor,
que incluye el acceso a la base de datos y la forma de transmitir la información almacenada. Frontend es a
la vez un término empleado para definir el desarrollo de la aplicación que se encuentra del lado del cliente,
como lo es una aplicación web o cualquier aplicación que consuma del servicio.

Asimismo, el Cloud o la Nube consiste en la utilización de servidores remotos para acceder a aplica-
ciones, procesar datos y almacenar información, relegando buena parte de los servicios de infraes-
tructura de hardware y software a un tercero, quien brinda el servicio a través de Internet, aliviando a
quien lo contrata de las labores de soporte, actualización de software y hardware, manejo de personal
del área de Tecnología de Información, etc., y generando una sensación de libertad e independencia en
el usuario, que puede tener acceso a sus datos desde cualquier lugar en el que se encuentre.

Un endpoint se mantiene en escucha de una solicitud y al recibirla procede a realizar la acción para la que
fue diseñado. En este caso los endpoints son las herramientas que proporciona el backend en el Cloud o
la Nube que permiten interactuar con la base de datos y todo su contenido. Dependiendo del endpoint
este puede devolver una respuesta con un valor o puede que solo realice una acción en el backend.

68
Introducción a Base de datos
Internacional
de Valencia

5.7. API
API, acrónimo de interfaz de programas de aplicación, es el conjunto de funciones y procedimientos
(o métodos, si se hace referencia a programación orientada a objetos), que ofrece un servicio para ser
consumido por otra aplicación como una capa de abstracción.

5.8. REST
REST es un tipo de arquitectura de desarrollo web que se apoya totalmente en el estándar HTTP.
REST permite crear servicios y aplicaciones que pueden ser usadas por cualquier dispositivo o cliente
que entienda HTTP, por lo tanto, REST es el tipo de arquitectura más natural y estándar para crear
APIs para servicios orientados a Internet. Los sistemas que siguen los principios REST se llaman con
frecuencia RESTful.

La arquitectura tipo REST está basada en la trasferencia de información desde un servidor a un


cliente vía web, por lo que se comunican utilizando el protocolo HTTP, respondiendo a los métodos
GET, POST, PUT y DELETE con una representación de la información disponible en el servidor.

Entre las características claves de la arquitectura REST se encuentran:

•• Utiliza un protocolo cliente/servidor sin estado: cada mensaje HTTP contiene toda la informa-
ción necesaria para comprender la petición. Como resultado, ni el cliente ni el servidor necesi-
tan recordar ningún estado de las comunicaciones entre mensajes.

•• Tiene un conjunto de operaciones bien definidas que se aplican a todos los recursos de infor-
mación: HTTP en sí define un conjunto pequeño de operaciones, las más importantes son POST,
GET, PUT y DELETE. Con frecuencia estas operaciones se comparan a las operaciones CRUD en
bases de datos.

•• Hace uso de una sintaxis universal para identificar los recursos. En un sistema REST, cada re-
curso se puede alcanzar únicamente a través de su URI.

•• La integración y el intercambio de datos entre dos aplicaciones distintas en un sistema REST


se hace típicamente vía HTML con los datos en formato JSON o XML. Como resultado de esto,
es posible navegar de un recurso REST a muchos otros, simplemente siguiendo enlaces, sin re-
querir el uso de registros u otra infraestructura adicional.

5.9. JSON
JSON es un formato ligero de intercambio de datos. Leerlo y escribirlo es simple para humanos, mien-
tras que para las máquinas es simple interpretarlo y generarlo. Está basado en un subconjunto del
lenguaje de programación JavaScript. JSON es un formato de texto que es completamente indepen-
diente del lenguaje, pero utiliza convenciones que son ampliamente conocidos por los programadores
de la familia de lenguajes C, incluyendo C, C++, C#, Java, JavaScript, Perl, Python y muchos otros. Estas
propiedades hacen que JSON sea un lenguaje ideal para el intercambio de datos.

69
Unidad de aprendizaje 5. Base de datos no relacionales
Internacional
de Valencia

Vídeo. JSON

Se utiliza principalmente para serializar y transmitir datos estructurados a través de una conexión de
red, normalmente entre un servidor y una aplicación web. JSON es más simple que XML porque tiene
una gramática más pequeña y se mapea mejor a las estructuras de datos de los lenguajes modernos.

JSON está constituido por dos estructuras:

•• Una colección de pares de nombre/valor. En varios lenguajes, esto es conocido como un objeto,
registro, estructura, diccionario, tabla hash, lista de claves o un arreglo asociativo.

•• Una lista ordenada de valores. En la mayoría de los lenguajes, esto se implementa como arre-
glos, vectores, listas o secuencias.

Estas son estructuras universales, virtualmente todos los lenguajes de programación las soportan de
una forma u otra.

JSON consta de los siguientes elementos:

•• Un objeto: es un conjunto desordenado de pares nombre/valor. Un objeto comienza con una lla-
ve de apertura “{” y termina con una llave de cierre “}”. Cada nombre es seguido por dos puntos “:”
y los pares nombre/valor están separados por una coma “,”.

•• Un valor: puede ser una cadena de caracteres con comillas dobles, un número, un valor booleano
o nulo, un objeto o un arreglo. Estas estructuras pueden anidarse.

Un ejemplo de este formato se muestra en la figura a continuación:

70
Introducción a Base de datos
Internacional
de Valencia

{
“data”; [{
“id”: “788029”,
“lattitude”: 48.858844300000001,
“longitude”: 2.2943506,
“name”: “Eiffel Tower, París”
},
{
“id”: “45331”,
“lattitude”: 48.858334059662262,
“longitude”: 2.2943401336669909,
“name”: “Restaurant 58 Tour Eiffel”
},
{
“id”: “421930”,
“lattitude”: 48.858325999999998,
“longitude”: 2.294505,
“name”: “American Library in París”
}]
}

Figura 60. Ejemplo de formato JSON.

71
Unidad de aprendizaje 1

Desarrollo de aplicaciones bajo entorno web usando bases


de datos

6.1. Modelo Vista Controlador (MVC)


Para comenzar la programación, es necesario partir de un patrón de arquitectura de software.

Este patrón fue descrito por primera vez por Trygve Reenskaug en 1979, y la implementación original
fue realizada en Smalltalk en los laboratorios Xerox.

El Modelo-Vista-Controlador es un patrón de arquitectura desarrollado por Microsoft, cuyo objetivo


principal es la simplificación de la programación dirigida por eventos de las interfaces.

Este patrón propone la separación en un modelo de tres capas:

•• El Modelo: es la representación de la información con la cual el sistema opera, y por tanto ges-
tiona todos los accesos a dicha información, incluyendo consultas y actualizaciones. En él se
gestionan los datos del sistema y las operaciones asociadas a esos datos.

73
Unidad de aprendizaje 6. Desarrollo de aplicaciones bajo entorno web usando Base de datos
Internacional
de Valencia

•• La Vista: comprende los componentes que se muestran en la interfaz al usuario. Los datos son
manipulados por el controlador, y se muestran al usuario de forma visual. El usuario interactúa
con la vista y realiza otras peticiones que se enviarán al controlador.

•• El Controlador: es la interfaz entre la vista y el modelo, y se encarga de responder a eventos e


invocar peticiones al modelo cuando se hace alguna solicitud e interactúa con son su vista aso-
ciada para cambiar la presentación de un modelo.

La idea detrás del patrón MVC, es mantener separados el modelo, la vista y el controlador para
hacerlos lo más independientes posibles de los otros. En otras palabras, esta arquitectura permite
separar las diferentes capas del programa, de manera que se pueda trabajar en paralelo e imple-
mentar el código para que sea reusable en otras aplicaciones con el mismo contexto. En este sentido
también sirve para separar las tareas, y que varias personas puedan trabajar en equipo para lograr el
mismo fin sin solapar las tareas.

El modelo es la estructura de los objetos, de los datos del programa. La vista maneja la información
que se muestra en las pantallas de la aplicación desarrollada. Y el controlador interpreta los datos
introducidos por el usuario de manera de cambiar la vista y el modelo en forma acorde con lo recibido.

6.2. ORM
Un ORM (trazador de objetos relacionales u Object relational mapper) es un modelo de programación
que consiste en la transformación de las tablas de una base de datos, en una serie de entidades que
simplifiquen las tareas básicas de acceso a los datos para el programador.

Vídeo. ORM Laravel

Un ORM, facilita las labores básicas de cualquier acceso a datos, el CRUD (Create, Read, Update
y Delete), realizando todas estas labores a través de un lenguaje de alto nivel orientado a objetos.
Como ejemplo de ORM trabajaremos con SQL Alchemy con Python en Jupyter Notebook. Usaremos
esto para facilitar el aprendizaje y familiarización con el Lenguaje SQL.

Como segundo ejemplo usaremos Eloquent, el ORM desarrollado para el entorno de trabajo Laravel.

Laravel:

•• Es un framework de código abierto para el desarrollo de aplicaciones web en PHP, que utiliza la
filosofía de desarrollo de aplicaciones web bajo el concepto de Modelo Vista Controlador.

•• Permite la gestión de bases de datos y la manipulación de tablas desde código, manteniendo un


control de versiones de las mismas mediante su sistema de migraciones.

74
Introducción a Base de datos
Internacional
de Valencia

•• Utiliza un sistema de plantillas para las vistas llamado Blade, el cual hace uso de la cache para
darle mayor velocidad. Blade facilita la creación de vistas mediante el uso de layouts, herencia y
secciones.

•• Facilita la extensión de funcionalidad mediante paquetes o librerías externas. De esta forma


es muy sencillo añadir paquetes que faciliten el desarrollo de una aplicación y disminuyan tiem-
po de programación.

•• Incorpora un intérprete de línea de comandos llamado Artisan que facilita la realización de ta-
reas rutinarias como la creación de distintos componentes de código, trabajo con la base de
datos y migraciones, gestión de rutas, cachés, colas, tareas programadas, etc.

Laravel soporta conexiones con diversas bases de datos, a saber:

•• MySQL

•• PostgreSQL

•• SQLite3

•• SQL Server

La instalación de Laravel requiere en primer lugar tener instalado un servidor web con PHP >= 5.5.9,
MySQL y en algunos casos, la extensión MCrypt de PHP. Se recomienda instalar XAMPP de Apache-
Friends, que puede ser descargado de su página web:

https://www.apachefriends.org

Este aplicativo contiene el servidor web, el servidor de base de datos MySQL, y maneja PHP.

Después hay que acceder a la aplicación de panel de control de XAMPP, a fin de iniciar Apache y MySQL.

Para comprobar que el servidor se ha instalado correctamente abrimos el siguiente enlace en el navegador:

http: //localhost o http: //127.0.0.1

Esto mostrará la página por defecto de XAMPP.

En segundo lugar se requiere instalar Composer, que es una herramienta para administración de
dependencias en PHP. Permite declarar las librerías requeridas por la aplicación y éste las instala en el
proyecto en forma automática, según se indican en un archivo llamado composer.json.

Composer puede ser descargado desde su página web:

http://getcomposer.org

75
Unidad de aprendizaje 6. Desarrollo de aplicaciones bajo entorno web usando Base de datos
Internacional
de Valencia

Después se procede a instalarlo siguiendo las instrucciones del instalador. Lo que sí es relevante
mencionar es que la instalación solicita colocar la ruta y el aplicativo PHP que se desea usar. Para el
caso de instalar XAMPP, la ruta sería:

C:\xampp\php\php.exe

Por último, procedemos a instalar un nuevo proyecto de Laravel mediante Composer. Para ello, abrir
una interfaz de línea de comando, y ubicándose en el directorio raíz del servidor web que va a contener
la aplicación (por ejemplo: /xampp/htdocs/appdir), ejecutamos el siguiente comando:

composer create-project laravel/laravel myapp

Composer creará diversos directorios a partir del directorio raíz, pero en particular creará el direc-
torio public, y la aplicación web a desarrollar realmente existirá a partir de ese directorio.

En la configuración inicial de Laravel, debemos crear la clave (key) de la aplicación, para garantizar que la
aplicación sea segura. Para ello, se ejecuta en la interfaz de línea de comandos la siguiente instrucción:

php artisan key generate

Para comprobar que todo está funcionando correctamente escribimos:

http://127.0.0.1/<nombre-del-proyecto>/public/

Que en nuestro caso particular corresponde a:

http://127.0.0.1/myapp/public/

Esta acción mostrará una página web en blanco, y que incluye además el texto Laravel 5.

Al crear un nuevo proyecto se genera también una estructura de directorios y subdirectorios. Los más
relevantes se describen brevemente a continuación:

•• app: contiene el código principal de la aplicación y consta de diversos subdirectorios adiciona-


les, rutas, controladores y modelo de datos. Este directorio incluye el subdirectorio Http, que
contiene lo siguiente:

–– app/Http/Controllers: contiene los archivos que permiten manejar la lógica de la aplicación,


es decir, los controladores y sus clases.

–– app/Http/Middleware: contiene los archivos que permiten realizar la autenticación de los


usuarios. En general permite filtrar las peticiones HTTP que se realizan a una aplicación. Per-
mitirá el acceso a una ruta si el usuario ingresó al sistema de manera satisfactoria y además
tiene la permisología necesaria al recurso en cuestión.

–– app/Http/routes: este documento define todas las rutas del sitio web, asociando un enlace
del navegador con un método de un controlador.

76
Introducción a Base de datos
Internacional
de Valencia

•• config: incluye los archivos de configuración de la base de datos, sesiones y caché entre otros.

•• database: contiene los archivos necesarios para especificar y caracterizar la base de datos del
proyecto. Incluye los subdirectorios migration y seeds.

•• public: es el único directorio visible en nuestra aplicación, y que contiene las páginas html
de la misma.

•• resources: consta de tres subdirectorios: assets, que contiene archivos tipo Less o Sass usados
para compilar archivos de estilo; views, que contiene las vistas de nuestra aplicación, que son
invocadas por los controladores para mostrar la información; y lang. que puede contener en
arreglos todos los textos usados por nuestra aplicación en diversos idiomas.

•• vendor: contiene las librerías y dependencias usadas por Laravel para poder funcionar correctamente.

El funcionamiento básico que sigue Laravel tras una petición web a un enlace de nuestro sitio es
el siguiente:

Todas las peticiones se reciben a través del archivo public/index.php ; la ruta de enlace que se intro-
duce se compara con las indicadas en el archivo de rutas (app/Http/routes.php ), y si allí se aparece
el controlador ejecuta el método asignado para dicha ruta, que usualmente suele acceder a la base
de datos (si así está programado) a través del modelo para añadir, modificar o eliminar datos en la
base de datos y procederá a pasarlos a la vista para ser desplegados en la aplicación a fin de ser
mostrados al usuario.

Utilizando Eloquent podemos trabajar con modelos, que son clases que representan nuestras tablas
en la base de datos y nos proveen de métodos con los que podemos interactuar en una interfaz más
“elocuente” y orientada a objetos.

Usando la herramienta php Artisan, crearemos un modelo. Cabe destacar que no es obligatorio espe-
cificar el nombre de la tabla si seguimos las convenciones de Eloquent. Por ejemplo, si utilizamos
como nombre de modelo Vuelo, Laravel hará las consultas a la tabla vuelos. Si utilizamos Usuario,
Laravel hará las consultas a la tabla usuarios. Por último si nuestro modelo fuese TarjetaEmbarque, la
tabla por defecto sería tarjeta_embarques.

Después procedemos a ejecutar las migraciones.

Las migraciones son una serie de archivos y clases en PHP que actúan como un control de versiones
de base de datos, tanto para crear las tablas al inicio del desarrollo de la aplicación, como para realizar
cambios como agregar o eliminar una tabla, agregar o eliminar una columna y así sucesivamente, a
medida que se va desarrollando el proyecto.

Las migraciones permiten definir las tablas con programación orientada a objetos en vez de
SQL, lo cual nos da portabilidad a los diferentes motores que soporta Laravel: MySQL, Postgres,
SQLite, y SQL Server.

77
Unidad de aprendizaje 6. Desarrollo de aplicaciones bajo entorno web usando Base de datos
Internacional
de Valencia

Cuando se ejecuta la migración por primera vez, se crean las tablas de la base de datos. Hay dos
migraciones que se crean por defecto, siendo una de ellas la de create_users_table, que crea la tabla
de usuarios del sistema. En ella se crea la tabla users_table como tal, y se le asocia el objeto user.

Los seeders por otra parte son archivos que nos van a permitir poblar la base de datos evitando tener
que escribir de forma manual todos los datos.

Esto facilita enormemente desde el punto de vista del programador y del administrador de bases de
datos la ejecución de migraciones de la aplicación web a sitios diferentes y/o la realización de modi-
ficaciones en la estructura de la base de datos sin tener que necesariamente importar y exportar la
base de datos.

A manera de ejemplo, se tomará una aplicación sencilla de Farmacia en Línea, a la cual se desea modi-
ficar su estructura de base de datos, a fin de incorporar la variable Cantidad de cada producto, para el
adecuado manejo de inventario.

Allí crearemos un modelo llamado Product, donde se especifican los atributos de cada producto ofre-
cido en la página, usando el siguiente comando:

php artisan make:model Product –m

Esta instrucción generará dos archivos:

Product.php en el directorio app

…create_products_table.php en el directorio database/migrations,

En donde los tres puntos (…) representan una cadena de caracteres del tipo fecha (en formato yyyy_
mm_dd, es decir, año, mes y día) seguido de una numeración adicional que representa un control del
número de versión.

Si el modelo fuera creado el 19 de septiembre de 2018, el archivo podría ser generado automática-
mente con un nombre como el indicado a continuación:

2018_09_19_172732_create_products_table.php

Este archivo contendrá el esquema de la tabla, es decir, atributos como el identificador del producto, la
ruta del directorio que contiene las imágenes del producto, el título del producto, su descripción y precio.

Luego con la siguiente instrucción:

php artisan make:seed ProductTableSeeder

Lo cual generará el archivo:

ProductTableSeeder.php en el directorio database/seeds

En el cual se colocarán los datos de cada artículo ofrecido.

78
Introducción a Base de datos
Internacional
de Valencia

Cada vez que se indiquen los datos de un producto hay que agregar la instrucción:

$product->save();

Para guardar los valores indicados para cada producto. Por otra parte, en el archivo:

DatabaseSeeder.php en el directorio database/seeds

Vinculamos nuestro archivo semilla ProductTableSeeder.php

Ejecutamos el comando:

php artisan migrate

Para crear la tabla Product, según se indica en el archivo:

2018_09_19_172732_create_products_table.php

Y ejecutamos el comando:

php artisan db:seed

Para incorporar los productos que estaban guardados en:

ProductTableSeeder.php

Se puede también trabajar también con datos autogenerados, usando un Componente llamado Faker,
que se encargará de generar estos datos.

En el caso que haya que producir cambios en la estructura de una tabla en la base de datos, y queramos
actualizarla, se usarán los siguientes comandos:

php artisan make:migration create_products_table

En ella se incorporan los nuevos atributos y luego se generan las nuevas tablas mediante la instrucción:

php artisan make:migration update

6.3. SQLALCHEMY
Este conjunto de herramientas desarrolladas en Python para interactuar con bases de datos es un
ORM, y se encarga de realizar solicitudes a las bases de datos y manipular los datos obtenidos usando
la programación orientada a objetos. Esto de manera general permite interactuar de manera eficiente
con las bases de datos usando el lenguaje de programación Python, en vez de usar un dialecto especí-
fico para bases de datos SQL.

79
Unidad de aprendizaje 6. Desarrollo de aplicaciones bajo entorno web usando Base de datos
Internacional
de Valencia

El procedimiento general para utilizar SQLAlchemy consiste en definir las tablas de las bases de
datos con las que se interactuará, luego se definen las clases que serán asociadas con las tablas ante-
riores y por último se realiza la asociación correspondiente.

El proceso de definición de las tablas y las clases se realiza en SQLAlchemy utilizando el método
declarativo que presenta el ORM, que permite definir en las clases algunas directivas que describirán
la tabla de la base de datos a las que se asociará. Posteriormente, este proceso generará el meta-
data que será usado en el resto de la configuración. Con el metadata de las tablas de la base de datos,
se procede a generar las declaraciones SQL para interactuar con la base de datos y crear las tablas
respectivas, mediante el uso de las herramientas del ORM.

Posterior a esto se necesita crear el objeto que permite la interacción con la base de datos seleccio-
nada, para luego asociar dicho objeto con una sesión, que guardará un registro de las operaciones
pendientes por realizar en la base de datos. Al hacer esto se pueden crear instancias de las clases
asociadas a las tablas definidas anteriormente, agregar datos a las mismas, hacer búsquedas o actua-
lizar información y agregarlos a la sesión.

Cabe destacar que la sesión no ejecutará los comandos directamente en la base de datos, sino hasta
tanto se indique que deben ejecutarse los comandos pendientes.

6.4. Procesador de Plantillas (Template Engine)


Un template engine, template processor o procesador de plantillas es una herramienta que permite
combinar la información proveniente de un modelo de datos con una plantilla definida previamente,
con la finalidad de producir un documento completo que tenga todas las características de la plantilla
y toda la información del modelo.

Esto es muy relevante para el contexto de las aplicaciones web debido a que proporciona una manera
de combinar la información proveniente del servidor final con una plantilla de HTML, para generar el
documento HTML completo que será enviado al cliente como respuesta a una de sus solicitudes. Las
plantillas están escritas usando sintaxis de la herramienta, que por lo general tiene la capacidad de
utilizar estructuras semánticas de lenguajes de programación tales como los bucles y las estructuras
condicionales.

Los procesadores de plantillas están escritos en una gran variedad de lenguajes de programación
por lo cual hay gran cantidad de ellos. Entre los más conocidos se tiene: Amber, Casper, Jinja2, Genshi,
entre otros.

6.5. Framework de desarrollo Flask


Flask es un entorno de trabajo (o “framework” en inglés) utilizado para el desarrollo web. Se
encuentra escrito en Python y está basado en el conjunto de herramientas de Werkzeug y Jinja2.
El primero es un conjunto de herramientas para la creación de aplicaciones WGSI (Web Server
Gateway interface) escritas en Python y la segunda es un procesador de plantillas muy popular
para el renderizado de archivos.

80
Introducción a Base de datos
Internacional
de Valencia

Se le conoce como un micro framework, debido a que carece de herramientas particulares o librerías
específicas para realizar una tarea, más sin embargo proporciona un conjunto de extensiones que
pueden agregar funcionalidades en el entorno de trabajo tal y como si fueran creadas nativamente
en él. Esto evita el problema de tener una cantidad extensiva de módulos innecesarios dentro de la
aplicación.

Flask tiene extensiones para el manejo de las bases de datos, la creación de formularios en las aplica-
ciones web, diferentes sistemas de autenticaciones, administradores para el uso de otros protocolos
diferentes al HTTP y muchos otros módulos que le han permitido obtener una gran popularidad.

Una aplicación en Flask básicamente consiste en crear una instancia de la clase Flask y escribir una
serie de funciones en Python que se encargan de ejecutar alguna tarea necesaria para el desarro-
llador. Sobre dichas funciones se utiliza un decorador proveniente de la instancia de Flask llamado
route (), al cual se le pasa como parámetro un URL que le indica al entorno de trabajo cuándo debe
ser ejecutada la función que está siendo decorada, es decir, cuando se haga una solicitud a un URL el
entorno de trabajo busca que función se encuentra “asignada” a dicho URL y la ejecuta.

Un decorador en Python es una función que permite alterar o aumentar la funcionalidad de otra
función sin necesidad de modificar su código original. Python tiene una sintaxis bastante amigable
para este tipo de operaciones, la cual es la que se usa en el entorno de trabajo de Flask.

Por último cuando un usuario realiza la solicitud a un URL y se ejecuta la función correspondiente para
que el cliente vea la respuesta del servidor (si hay alguna), el entorno de trabajo permite devolver
archivos o se vale de un procesador de plantillas (en este caso Jinga2), el cual se encarga de renderizar
un archivo HTML con la información proveniente del servidor que se quiere enviar al cliente que está
realizando la solicitud.

6.5.1. Estructura de una aplicación de Flask

Para crear una aplicación en el entorno de trabajo de Flask es necesario crear una estructura de
proyecto con nombres de directorios específicos para que las funciones del framework obtengan
la información referente a la ubicación de los archivos a renderizar, las dependencias con librerías
externas y otros archivos relevantes para la aplicación.

Vídeo. Estructura de una aplicación de


Flask

Se presentará a continuación una explicación general de cada elemento típicamente usado.

•• Main.py

En este archivo usualmente se encuentra el código de la funcionalidad de todos los endpoints


de la aplicación. Adicionalmente se incluyen las funciones para el manejo de las bases de datos
y las consultas pertinentes.

81
Unidad de aprendizaje 6. Desarrollo de aplicaciones bajo entorno web usando Base de datos
Internacional
de Valencia

•• Forms.py

En este módulo es donde se mantienen las clases que representan los formularios a utilizar
para registrar usuarios y administrar el acceso a la plataforma, así como capturar cualquier
información que deban proveer los usuarios para que sea procesada o almacenada en el
sistema.

•• Models.py

En este módulo se definen las clases para representar las tablas dentro de la base de datos
(usando SQLAlchemy ORM). También se define la estructura de los objetos que podrán alma-
cenarse en la base de datos.

•• Utils.py

En este módulo se definen las funciones adicionales que se usan en forma recurrente en toda
la aplicación.

•• constants.py

Aquí se definen variables que son constantes a lo largo de la aplicación.

•• database.py

Aquí se define la configuración de SQLAlchemy con la base de datos MySQL creada para la
aplicación en cuestión. Además se implementan algunas funciones útiles para el manejo de
consultas y actualizaciones en la base de datos.

•• Carpeta Static

En ella se guardan las dependencias de otras librerías de la aplicación web, como por ejemplo
los archivos de CSS (Cascade Stylesheet), que son utilizados para agregar estilos visuales a la
aplicación o los archivos de Javascript en donde se programan las funcionalidades dentro de
la interfaz de la aplicación. En general este directorio es utilizado para guardar los archivos y
librerías necesarios para la parte visual de la aplicación.

•• Carpeta templates

Aquí se ubican los archivos HTML que se serán renderizados con la información proveniente de
la aplicación de Flask. Para hacer esto último posible es necesario utilizar la sintaxis de Jinga2
en el archivo HTML para agregar los datos como variables y al llamar la función de render se
agregue en el archivo las variables enviadas por la aplicación.

Toda la funcionalidad de la aplicación de Flask se basa en el uso de URL’s a los que el cliente hace
solicitudes.

82
Introducción a Base de datos
Internacional
de Valencia

6.5.2. Formularios web usando Flask como framework

A continuación mostramos un ejemplo que ilustra cómo enviar información a través de un formulario
web a una aplicación, para luego mostrarla en pantalla, usando Flask y Jinga, lo cual es un ejemplo
sencillo de cómo podríamos recibir información por ejemplo de un sensor de Internet de las cosas,
para luego mostrar sus valores y graficarlo en pantalla de manera muy rápida y sencilla.

En nuestro ejemplo particular el usuario introduce su edad a través de un formulario, la cual se envía y
se muestra en la página web en forma dinámica usando Flask y Jinja.

•• Instalamos el módulo Flask utilizando el comando: pip install flask desde la consola de Win-
dows o cualquier otra consola bash, obteniendo:

Figura 61. Instalación de Flask.

•• Creamos el directorio templates que contendrá los archivos .html que mostraremos en nuestra
aplicación, esta carpeta debe ser creada en la misma carpeta donde se aloja nuestra aplicación,
tal como lo muestra la siguiente imagen:

Figura 62. Estructura de directorios de una sencilla aplicación en Flask.

83
Unidad de aprendizaje 6. Desarrollo de aplicaciones bajo entorno web usando Base de datos
Internacional
de Valencia

•• Creamos los archivos .html que utilizaremos en nuestra aplicación web, en este caso crearemos
el archivo age.html (que mostrará la información introducida en el formulario web) e index. html
(será el archivo que contiene el formulario a ser llenado y además es la página principal).

Figura 63. Archivos html de una sencilla aplicación en Flask. Uno corresponde al formulario para introducir los
datos y el otro al que muestra la información introducida en el formulario web.

Para el aspecto visual de una aplicación web y de las plantillas de HTML se utiliza la librería “Boots-
trap”. Esta librería consiste en un conjunto de archivos CSS y de JavaScript que permiten dar un toque
visual agradable y moderno a la aplicación de una manera rápida y sencilla.

Ambos archivos poseen en el header la dirección de bootstrap de donde se toman las clases necesa-
rias para darle el estilo deseado a las páginas de la app.

84
Introducción a Base de datos
Internacional
de Valencia

•• Crearemos ahora, nuestra aplicación web en Python utilizando el siguiente código:

Figura 64. Creación de la aplicación web en Python.

•• Posteriormente, ejecutamos nuestra aplicación, verificando que se ejecuta correctamente en la


consola, tal como lo muestra la imagen:

Figura 65. Ejecución de la aplicación web en Python y verificación de que se ejecuta correctamente en consola.

En la imagen se observa como la aplicación se está ejecutando correctamente y se nos indica la direc-
ción a colocar en el navegador para acceder a la misma.

•• Por último, introducimos la dirección de acceso a la aplicación y comprobamos su funcionamiento:

Figura 66. Resultado al introducir la información y hacer clic en la aplicación.

85
Unidad de aprendizaje 6. Desarrollo de aplicaciones bajo entorno web usando Base de datos
Internacional
de Valencia

6.6. ¿Qué es Big Data?


Big Data hace referencia a grandes conjuntos de datos que por la velocidad a la que se generan, la
diversidad en las fuentes y formatos, y la alta velocidad de respuesta para procesarlas convierte en
todo un reto trabajar con ellos.

“Big data” se caracteriza a menudo por las conocidas como cuatro “Vs”:

•• Volumen (volume): hace referencia a la cantidad de datos generados y que deben ser captura-
dos, analizados y gestionados para tomar decisiones. El auge de la telefonía móvil y las redes
sociales y el crecimiento del número de dispositivos con capacidad de conectarse a Internet
(teléfonos inteligentes, tabletas, sensores, cámaras IP, etc.), generan cantidades enormes de
datos, que no paran de crecer siguiendo la Ley de Moore.

•• Velocidad (velocity): hace referencia a la rapidez con la que los datos son producidos o cambia-
dos. Cada vez es más importante, para mejorar los procesos de decisión, que los datos sean
accesibles y analizados en tiempo real. El incremento de la velocidad se debe al aumento de las
fuentes de datos, los mayores anchos de banda en la parte de conectividad y la mayor potencia
de computación de los dispositivos generando datos.

•• Variedad (variety): el crecimiento de información viniendo de nuevas fuentes de datos, tanto


desde dentro como fuera de la organización, genera retos en los departamentos de tecnologías
de la información. Según varios estudios, solo el 15% de la información actual está estructurada,
que es aquella que se almacena fácilmente en bases de datos relacionales u hojas de cálculo,
con sus tradicionales filas y columnas. Es decir, el 85% está desestructurada (videos, audio, so-
cial media, blogs, chat, e-mail, tweets, clicks, sensores, etc.), lo cual supone grandes retos para
generar significado con las herramientas de inteligencia de negocio convencionales.

•• Valor (value): la calidad los datos podría ser mala o indefinida, debido a inconsistencias e incon-
gruencias, ambigüedades, latencia, etc. Las decisiones en Big Data deben estar basadas en da-
tos fiables, trazables y justificables. Además, es importante considerar el potencial de interac-
ción entre los datos producidos por distintas fuentes, pudiéndose generar información muy útil
de combinaciones con resultados impredecibles.

Los SGBD tradicionales trabajaban con información estructurada y relacional. Las herramientas tradicio-
nales no estaban diseñadas para analizar conjuntos de datos no estructurados y masivos y procedentes de
fuentes diversas de las que se pueden obtener patrones escondidos, correlaciones desconocidas, etc.

Big Data constituye la evolución natural de estos sistemas, trabajando con información más compleja
que cumple las 4 Vs. Los entornos de programación de Big Data destacan por su potencia en el análisis
estadístico y gráfico.

Evidentemente, esto supone la adopción de nuevas tecnologías. Así, del lenguaje SQL se ha pasado a
lenguajes y herramientas basadas en MapReduce de Google, como Hadoop, un entorno de programación
de código abierto concebido por Yahoo! y actualmente soportado por Apache. Se han escrito implemen-
taciones de librerías de MapReduce en diversos lenguajes de programación como C++, Java o Python.

86
Introducción a Base de datos
Internacional
de Valencia

Además, de un único servidor de grandes prestaciones, en Big Data se recurre a arquitecturas clúster
con servidores estándar de menores prestaciones, que trabajan de forma distribuida, buscando
reducir costes y mejorar la disponibilidad.

Podría decirse que Hadoop nació en el momento en que Google precisa urgentemente de una
solución que le permitiera continuar procesando datos al ritmo que necesitaba, en una propor-
ción que repentinamente creció de forma exponencial. Google se ve incapaz de poder indexar
la web al nivel que exigía el mercado y por ello decide buscar una solución, que se basa en un
sistema de archivos distribuidos.

Esta solución, que posteriormente se denominó Hadoop, se basa en un gran número de pequeños
ordenadores, cada uno de los cuales se encarga de procesar una porción de información. La grandio-
sidad del sistema es que, a pesar de que cada uno de ellos funciona de forma independiente y autó-
noma, todos actúan en conjunto, como si fueran un solo ordenador de dimensiones increíbles.

Cuando se trabaja con datos distribuidos, estas tecnologías no mueven los datos, lo cual sería
muy costoso y lento. En vez de hacer respaldos de información, se mantienen una serie de réplicas
en distintos servidores. Así, en vez de procesar los datos desde un lugar central, se distribuyen los
programas en los distintos servidores y se ejecutan en paralelo (map), consolidando posteriormente
los resultados. Reduce las grandes empresas y organizaciones, sobre todo las web 2.0 como Amazon,
Google, Facebook, LinkedIn, Twitter, etc. Estas han sido las primeras en aprovechar Big Data para
reducir costos, mejorar su productividad, mejorar su servicio de atención al cliente, desarrollar nuevos
productos y servicios, etc.).

Al incorporar herramientas de Inteligencia de Negocios (Business Intelligence o BI) es posible realizar


análisis predictivos y avanzados, que nos ayudan en la toma de decisiones estratégicas en función
de una predicción de comportamiento basada en datos reales que nos permiten reducir el umbral
de error. El tamaño de los dispositivos está reduciéndose y el número de sensors está creciendo
dramáticamente; el mundo digital está volviéndose más conectado con el mundo físico a la vez que
el mercado laboral para profesionales técnicos que pueden usar estas conexiones para brindar valor
agregado a su mercado también está creciendo en forma exponencial.

6.7. Internet de las Cosas (IoT)


Para el año 2020, se estima que habrá más de 50 mil millones de dispositivos conectados a Internet,
en promedio casi 7 dispositivos para cada persona en el planeta. Estos dispositivos abarcarán los
mercados industriales, comerciales y de consumo que podrán comunicarse entre sí de forma inteli-
gente y responder inteligentemente a la interacción humana y las necesidades comerciales de una
notable variedad de formas.

El Internet de las cosas potencia objetos que antiguamente se conectaban mediante circuito
cerrado, como comunicadores, cámaras, sensores, y demás, y les permite comunicarse global-
mente mediante el uso de la red de redes. Si tuviéramos que dar una definición del Internet de
las cosas probablemente lo mejor sería decir que se trata de una red que interconecta objetos
físicos valiéndose de Internet.

87
Unidad de aprendizaje 6. Desarrollo de aplicaciones bajo entorno web usando Base de datos
Internacional
de Valencia

Internet de las cosas (IoT), Big Data y la nube crean un nuevo ecosistema muy fértil que ha hecho
nuestras vidas más efectivas y agradables, y ofrece nuevas oportunidades para que las empresas
mejoren sus eficiencias operativas y brinden oportunidades de crecimiento. Es por ello que las
empresas proveedoras de servicios en la nube han centrado su atención en proveer plataformas
que ofrezcan conectividad y análisis en tiempo real de la información proveniente de dispositivos
de Internet de las Cosas (IoT).

Algunos ejemplos de estas plataformas son Microsoft Azure IoT Suite, Google Cloud IoT Core,
Amazon Web Service IoT. Todas centran esfuerzos en ofrecer servicios para conectividad de los
dispositivos IoT y análisis de datos en tiempo real. Estos conceptos se aplican en diversidad de
ámbitos: domótica, para lo que sería hogares inteligentes, en donde se pueden programar diversos
actuadores y captar información de diversos dispositivos usados en el hogar, a fin de controlar,
temperatura, humedad, presión, encendido y apagado de las luces, etc.; la ciudad inteligente, para el
control de luces de forma amigable con el ambiente; salud digital, monitorización de pacientes con
enfermedades crónicas, monitorización de tercera edad, etc.

En el Internet de las Cosas se utilizan chips y circuitos que cuentan con todas las herramientas
necesarias para cumplir labores especializadas muy específicas. A nivel creciente se están usando
también los dispositivos móviles tipo pulsera en aplicaciones de salud y monitorización y para preven-
ción de enfermedades mediante el ejercicio y la nutrición sana.

Los sistemas embebidos son el principio técnico por el que es posible la interconexión de los objetos
cotidianos con el Internet ya que por su naturaleza estos sistemas cubren necesidades específicas
y pueden cumplir tareas en tiempo real. Las interfaces inteligentes también son uno de los compo-
nentes esenciales para el funcionamiento fáctico de los objetos con Internet.

Todas las grandes empresas tecnológicas han creado una línea de productos para IoT, desde dispo-
sitivos inteligentes hasta plataformas de desarrollo miniaturizados, entre ellas Raspberry, Arduino,
Samsung, Intel.

Las soluciones concebidas bajo plataformas de Internet de las Cosas siguen más o menos la misma
estructura: la solución comienza con dispositivos que contienen sensores que pueden enviar infor-
mación de telemetría a través de Internet a la nube, en donde se aplican diversos algoritmos de
procesamiento o de alguna manera se procesa la información después de lo cual se infiere o se
detecta algún tipo de anomalía, falla, o situación peculiar, y se establecen patrones y tendencias a
fin de predecir cosas.

Podría realizarse un procesamiento en lotes, o podría ser también procesamiento en tiempo real, lo
que también se conoce como análisis en tiempo real, y con base en esto se podrían tomar o ejecutar
acciones sobre estas mismas cosas. Por ejemplo, si la temperatura está en un nivel demasiado alto,
entonces se reinicializa el dispositivo, o se activa el sistema de enfriamiento en ese cuarto, o se envía
una notificación de alerta que pueda controlar la situación.

88
Introducción a Base de datos
Internacional
de Valencia

Actualmente IoT está llegando un punto de inflexión por varias razones:

•• El coste del hardware es bajo. Se puede conseguir dispositivos que tienen sensores incorporados, a
un precio bastante razonable, por lo que vemos nuevos dispositivos, y partes y piezas que se añaden
en nuevos escenarios y en situaciones en los que no habían sido explorados anteriormente.

•• La conectividad está disponible en todas partes, usando Wi-Fi o inclusive redes móviles, con lo
cual se conecta el dispositivo a Internet para su procesamiento en tiempo real.

•• El desarrollo de aplicaciones es relativamente sencillo. Encontramos una serie de soluciones y


módulos o bloques disponibles para los desarrolladores, de manera que no tienen que comenzar
a programar desde cero, y que contribuyen a resolver a nuestras necesidades. La mayoría de
esos bloques incluyen funcionalidades de seguridad tradicionalmente establecida, así como la
posibilidad de administrarlos y configurarlos remotamente.

•• Con la Nube, es posible manejar Big Data de manera más sencilla, sin tener que preocuparse de
los requerimientos de almacenamiento local, y además proveen capacidades y diversas herra-
mientas de análisis en tiempo real, disponibles desde cualquier lugar, lo cual hace posible la es-
calabilidad en el uso de modelos de inteligencia artificial y aprendizaje automático (machine
learning) para hacer el análisis en tiempo real.

AWS y Google Cloud Platform se han convertido en dos de los grandes proveedores de cloud pública y
ofrecen una amplia gama de servicios que se adaptan sin dificultad a nuestras necesidades.

Las soluciones ofrecidas en materia de bases de datos tratan de abarcar la mayoría de las nece-
sidades que podríamos tener en nuestras aplicaciones. Desde bases de datos relacionales como
Google Cloud SQL que da un servicio gestionado de MySQL y Amazon RDS que oferta un servicio
administrado de Aurora, MySQL, PostgreSQL, Oracle, SQL Server o MariaDB a bases de datos NoSQL
como Amazon DynamoDB y Cloud Datastore.

También hay servicios como Bigtable de Google, que nos da una base de datos NoSQL orientada a
Big Data con integración con Hadoop y que soporta la API de HBase. Para Data Warehouse tenemos
Redshift de Amazon y BigQuery de Google.

Bigtable es un mapa distribuido ordenado y multidimensional con tres dimensiones: filas, columnas
y marca temporal. Es un sistema que divide los datos en columnas para almacenar toda la informa-
ción en tablas compuestas por celdas. Cada una de esas celdas dispone de una marca temporal que
permite visualizar la evolución de ese dato a lo largo del tiempo.

El sistema de archivos que usa Bigtable es Google File System (GFS) y la compresión y descompre-
sión de los datos se hacen a través de dos algoritmos especialmente rápidos: 100 – 200 MB/s para
comprimir y 400 – 1000 MB/s para descomprimir. Esa velocidad es posible porque para llevar a cabo
cada una de esas acciones no se actúa sobre el conjunto entero, sino sobre una parte los datos.

Otra gran ventaja del servicio es su API, que es de acceso público. Eso permite que cualquier desarro-
llador pueda hacer un proyecto concreto con ella o hacer pruebas de rendimiento sobre una muestra
de datos, por ejemplo. Los lenguajes utilizados son C y C++.

89
Unidad de aprendizaje 6. Desarrollo de aplicaciones bajo entorno web usando Base de datos
Internacional
de Valencia

Con la API de Bigtable se pueden hacer todo tipo de operaciones con las tablas de datos: se pueden
crear y suprimir tablas y familias de columnas, escribir o borrar valores, iterar sobre un subconjunto
de datos en una tabla, cambiar un clúster o los metadatos de alguna variable o gestionar los derechos
de control de acceso.

Si necesitáramos almacenar datos en una caché como Redis o Memcached tendríamos Amazon
ElastiCache. Y si quisiéramos migrar nuestras bases de datos desde o hacia nuestro datacenter
on- premise y cualquiera de los productos de Amazon, podríamos utilizar AWS Database Migration
Service (DMS), que tiene prácticamente todas las características que cabría esperar en una herra-
mienta para estos fines.

Para familiarización con este tema de Internet de las Cosas, y bases de datos relacionales y no rela-
cionales se escogerá una colección de datos tomada de la biblioteca gratuita de una amplia variedad
de dispositivos y proyectos de Internet de las Cosas (IoT) de la Universidad de Irvine, California, USA:

https://archive.ics.uci.edu/ml/datasets

El repositorio contiene alrededor de 440 colecciones de datos, y de ellas las que tienen que ver con el
área de salud son las de arritmias, audiología, cáncer de mama, cáncer de pulmón, diabetes, dermato-
logía, ecocardiograma, enfermedad cardíaca, alteraciones del hígado, enfermedad tiroidea, enfermedad
de Parkinson, inflamaciones agudas, fertilidad, cirugía torácica, electromiografía de extremidades infe-
riores, identificación de usuarios por actividad al caminar, monitorización de actividad con un aceleró-
metro único colocado en el pecho, lesiones gastrointestinales en colonoscopias, detección temprana
de autismo en el adolescente y el adulto, monitorización de pacientes de edad avanzada, monitoriza-
ción de pacientes crónicos, monitorización de pacientes con edad avanzada, simulación de caídas y
de actividades de la vida diaria, señales de potenciales evocados generados a partir del electroence-
falograma, m-health, etc. Existen también colecciones de datos correspondientes a otras áreas dife-
rentes a la salud, entre ellas las de comercio electrónico de Amazon, energía, vehículos autónomos.

En ella por ejemplo, se puede escoger analizar información captada a través de acelerómetros colo-
cados en los ejes x, y, z, en las colecciones de datos de pacientes de tercera edad para monitorización
remoto. Después, se podría analizar la información para, por ejemplo, detectar en qué momento el
paciente está caminando, corriendo o sin ningún tipo de actividad física. Se podría cargar la informa-
ción en Jupyter Notebook, y luego utilizar la librería Pandas para manipular los datos, hacer gráficas y
en definitiva realizar el análisis de los datos.

Por último, se muestra un ejemplo que ilustra el uso de REST APIs para la integración de la información
proveniente de dos aplicaciones distintas. Gracias a ello, encontramos un sin fin aplicaciones nuevas
que se crean y están disponibles a diario, pues se facilita la labor del desarrollador, quien no tiene obli-
gatoriamente que comenzar una aplicación desde cero, sino que tiene a su disposición código prove-
niente de otras aplicaciones a las que fácilmente puede acceder, sin tener que preocuparse de si las
aplicaciones están desarrolladas en lenguajes de programación diferentes.

90
Introducción a Base de datos
Internacional
de Valencia

Figura 67. Ejemplo de uso de REST API de Google Maps y de Instagram para producir sencilla aplicación en la que
el usuario solicita las fotos tomadas cercanas a un lugar, en este caso La Torre Eiffel.

91
Glosario

ACID
Acrónimo que representa las propiedades inherentes a las transacciones en los sistemas de gestión
de bases de datos: Atomicidad, Consistencia, Aislamiento (del inglés Isolation) y Durabilidad.

API
Acrónimo por sus siglas en Inglés Application programming Interface, o interfaz de programación de
aplicaciones. Es una librería que contiene un conjunto de funciones que puede ser utilizado por otros
programas y aplicaciones aún si son escritas en lenguaje de programación diferente.

Backend
En el diseño de software de aplicaciones, el frontend es la parte del software que interactúa con los
usuarios y el backend es la parte que procesa la entrada de datos desde el frontend.

Base de datos (DB)


Colección de datos almacenados de forma estructurada que pueden ser seleccionados eficiente-
mente por un programa del ordenador a fin de ser: consultados, actualizados, llenados y eliminados.
En un DBMS, una base de datos es un sistema de archivos electrónico.

Campos
Espacio para el almacenamiento de un dato en particular.

CRUD
Acrónimo de “Crear, Leer, Actualizar y Borrar” (del original en inglés: Create, Read, Update and
Delete), que se usa para referirse a las funciones básicas en bases de datos o la capa de persistencia
en un software.

Datos
Conjunto de valores que representan una determinada información.

DBMS
Sistemas de Gestión de Base de Datos, abreviado DBMS del inglés Data base Management System,
que permiten almacenar y posteriormente acceder a los datos de forma rápida y estructurada.

93
Glosario
Internacional
de Valencia

Disco Duro
Dispositivo de almacenamiento magnético, más lento que la memoria RAM, pero de carácter más
permanente.

El Cloud o la Nube
Consiste en la utilización de servidores remotos para acceder a aplicaciones, procesar datos y alma-
cenar información, relegando buena parte de los servicios de infraestructura de Hardware y Software
a un tercero, quien brinda el servicio a través de internet, aliviando a quien lo contrata de las labores
de soporte, actualización de software y hardware, manejo de personal del área de Tecnología de
Información, etc.

Endpoints
Dispositivos o nodos que se encuentran conectados a una red y aceptan comunicaciones entrantes y
salientes a través de esta. En un sistema REST, un endpoint es un URI por el cual se puede acceder a
un servicio o recurso de una aplicación por parte de un cliente.

Entidad
Identifica a los elementos que reciben información o envían datos.

JSON
Abreviación en inglés de JavaScript Object Notation, Notación de Objetos de JavaScript, que es un
formato estándar de almacenamiento de datos semi–estructurados, disponibles en Not only Struc-
tured Query Language o base de datos NoSQL.

NoSQL
De sus siglas en inglés Not only SQL o No solo Lenguaje de Consulta Estructurado, término que
describe las bases de datos no relacionales de alto desempeño, orientadas hacia la gestión de datos y
el diseño de base de datos de grandes conjuntos de datos distribuidos.

Objeto
Es una entidad tangible que muestra un comportamiento bien definido.

ORM
Acrónimo del Inglés Object Relational Mapper, o trazador de objetos relacionales. Es un modelo de
programación que consiste en la transformación de las tablas de una base de datos, en una serie de
entidades u objetos que simplifiquen las tareas básicas de acceso a los datos para el programador.

94
Introducción a Base de Datos
Internacional
de Valencia

RAM
Acrónimo de Random Access Memory (Memoria de acceso aleatorio). Nombre que recibe la memoria
primaria de un ordenador en la que se puede leer o escribir de manera inmediata cualquier octeto en
cualquier posición. Es una forma de almacenamiento rápido pero temporal.

REST
Es cualquier interfaz entre sistemas que use HTTP para obtener datos o generar operaciones sobre
esos datos en diversos formatos de datos semi-estructurados, tales como XML y JSON.

SGBD
Sistemas de Gestión de Base de Datos, abreviado SGBD, que permiten almacenar y posteriormente
acceder a los datos de forma rápida y estructurada.

Tabla de una Base de Datos


Tipo de modelado de datos, donde se almacenan los datos usados por un programa. Haciendo
analogía con un programa de hoja de cálculo, las columnas representan los campos y las filas vienen a
ser los registros u ocurrencias de las Entidades definidas en la Tabla, cuyos datos se pueden ser alma-
cenados y presentados de manera estructurada y ubicados de manera eficiente.

XML
Abreviación en inglés de eXtensible Markup Language, Lenguaje de Marcas Extensible, que es un
formato estándar de almacenamiento de datos semi–estructurados, disponibles en una base de
datos NoSQL.

95
Enlaces de interés

Academind Curso de Laravel Maximilian Schwarzmüller


Curso de Laravel con implementación paso a paso de aplicación de comercio electrónico con carrito
de compras. Sirvió de base para la aplicación de Farmacia en Línea. Muy ilustrativo en especial el
video #3 que explica lo referente a migraciones y población de datos en la base de datos (Data Migra-
tions and Seeding), usando una estructura de tipo arreglo con la información de los productos a incluir
en la aplicación.

https://www.youtube.com/playlist?list=PL55RiY5tL51qUXDyBqx0mKVOhLNFwwxvH

Curso de Introducción a Laravel 5


Guía con indicaciones paso a paso de cómo desarrollar una aplicación bajo el entorno de trabajo
Laravel 5.

https://legacy.gitbook.com/book/richos/laravel-5/details

Flask Web Development Series de Shaantam Chawla


Tutorial de Flask con Jinja que sirve como rápida referencia para inyectar información de una base de
datos como mongoDB en una página Web.

https://www.youtube.com/playlist?list=PLzWaSuz38oGvFklb9kUCjT2FGS95chHcz&disable_ poly-
mer=true

Jupyter Notebook Tutorial: The Definitive Guide


Tutorial de Jupyter Notebook que explica cómo instalar, ejecutar y usar cuadernos de Jupyter Notebook.

https://www.datacamp.com/community/tutorials/tutorial-jupyter-notebook

Machine Learning Repository de la Universidad de Irvine, California, USA


Colección de datos gratuita de una amplia variedad de dispositivos y proyectos de Internet de las
Cosas (IoT).

https://archive.ics.uci.edu/ml/datasets.html

97
Enlaces de interés
Internacional
de Valencia

Tutorial de diseño de bases de datos


Tutorial de estructura y diseño de bases de datos.

https://www.lucidchart.com/pages/es/tutorial-de-estructura-y-dise%C3%B1o-de-bases-de-datos

Tutorial de SQL
Tutorial de SQL que sirve como rápida referencia para las búsquedas de la sintaxis de los comandos
en SQL.

https://www.w3schools.com/sql/

98
Bibliografía

Referencias bibliográficas
Alyeksandr, J. (2012). Database design & Normalization (1NF, 2NF, 3NF). Slideshare. Recuperado de
https://es.slideshare.net/jagaarj/database-design-normalization

Burnham, J. D. (2015). A simple definition: What is an Endpoint? Druva Blog. Recuperado de http://
www.druva.com/blog/simple-definition-endpoint/

DBMS and SQL Tutorial (2018). Studytonight. Recuperado de https://www.studytonight.com/dbms/


fourth-normal-form.php

Elmasri, R. and S.B. Navathe, S.B. (2006), Fundamentals of Database Systems, 6th Edition, Boston,
Massachusetts, Estados Unidos: Addison-Wesley.

Fernández, R. Bases de datos NoSQL (2014). Elige la opción que mejor se adapte a tus necesidades.
Genbeta. Recuperado de http://www.genbetadev.com/bases-de-datos/bases-de-datos-nosql-elige-
la-opcion-que-mejor-se-adapte-a-tus-necesidades

Ingargiola, A. (2015). Jupyter/IPython Notebook Quick Start Guide. Readthedocs. Recuperado de


http://jupyter-notebook-beginner-guide.readthedocs.io

Introducción a JSON (2017). ECMA International. Recuperado de http://www.json.org/json-es.html

Jupyter Documentation (2018). Project Jupyter. Recuperado de http://jupyter.org/documentation


MongoDB (2018). Recuperado de: https://www.mongodb.com/es

Ochoa J. (2015). Aprende a usar Eloquent el ORM de Laravel. Recuperado de https://styde.net/apren-


de-a-usar-eloquent-el-orm-de-laravel/

Palacios, D. (2017) Introducción a Eloquent, el ORM del framework Laravel. Recuperado de https://
styde.net/introduccion-a-eloquent-el-orm-del-framework-laravel/

SQL Tutorial (2018). Techonthenet. Recuperado de https://www.techonthenet.com SQL Tutorial


(2018). W3schools. Recuperado de: https://www.w3schools.com/sql/

Stanford CS145 Fall 2017 (2017). Future Data Systems Group. Computer Science Dept. University of
Stanford. Recuperado de https://github.com/stanford-futuredata/cs145-2017/

99
Bibliografía
Internacional
de Valencia

Bibliografía recomendada
Özsu, M. T. y Valduriez, P. (2011), Principles of Distributed Database Systems, 3rd Edition, Berlin,
Alemania: Springer-Verlag.

Silberschatz, A., Korth, H. F., y Sudarshan, S. (2014), Fundamentos de Bases de Datos, 6ta Edición,
Nueva York, Estados Unidos:McGraw-Hill.

Thomas, P y Bertone, R. (2011), Introducción a las Bases de Datos, 1era Edición, Londres, reino Unido:
Pearson.

100
Agradecimientos

Autor Departamento de Recursos para el Aprendizaje


Dra. D.ª Liliana Gavidia Ceballos
D.ª Carmina Gabarda López
D.ª Cristina Ruiz Jiménez
D.ª Sara Segovia Martínez

Internacional
Reservados todos los derechos© de Valencia
Universidad Internacional de Valencia - 2020

También podría gustarte