Documentos de Académico
Documentos de Profesional
Documentos de Cultura
BASE DE DATOS
Edita
Universidad Internacional de Valencia
Grado en
Ingeniería Informática
Base de datos
Modulo de Formación Obligatoria
6 ECTS
Los términos resaltados a lo largo del contenido en color naranja se recogen en el apartado GLOSARIO.
Índice
1.3.1. Entidad. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
1.3.2. Atributos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
1.3.3. Relación. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
2.4. Creación de un modelo de datos relacional usando los conceptos aprendidos anteriormente. . . . . . . 25
3.2.1. SELECT. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
3.2.2. INSERT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
3.2.3. UPDATE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
3.2.4. DELETE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
3.3.1. GRANT. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
5
Índice
Internacional
de Valencia
3.3.2. REVOKE. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
3.4.1. LIKE. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
3.5.1. Índices. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
3.5.2. Restricciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
3.5.3. Uniones. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
4.1.1. Atomicidad. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
4.1.2. Consistencia. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
4.1.3. Aislamiento. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
4.1.4. Durabilidad. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
4.2.1. Serializable. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
6
Introducción a Base de Datos
Internacional
de Valencia
4.8.Control de la seguridad. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
4.8.1. Cifrado. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
5.2.4. En grafos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
5.3. MongoDB. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
5.6. Endpoints . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
5.7. API . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
5.8. REST. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
5.9. JSON. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
6.2. ORM. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
6.3. SQLALCHEMY. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
7
Índice
Internacional
de Valencia
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.
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).
•• 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.
•• 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.
10
Introducción a Base de Datos
Internacional
de Valencia
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:
•• La lista de elementos en el interior del recuadro representa los atributos que describen a la entidad.
Vuelos
id
origen
destino
hora-salida
hora-llegada
aerolínea
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.
•• 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
•• Uno a Muchos: En esta relación, un registro de una tabla se asocia a uno o varios registros de
la otra tabla.
A continuación se ilustra la relación Uno a Muchos entra las tablas vuelos y pasajeros.
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
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.
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
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).
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.
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
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.
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.
VARCHAR: cadena de caracteres de longitud variable. Este sería el tipo a usar si se quiere almacenar
algún texto, frase o palabra.
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
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 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 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.
17
Unidad de aprendizaje 2
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
19
Id Nro-vuelo Origen Destino Aerolínea Hora-salida Hora-llegada Pasaporte Apellido Nombre
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
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).
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:
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
Tabla 10. Ejemplo de una tabla en una base de datos que no cumple con la primera forma de normalización 1NF.
Tabla 11. Ejemplo de una tabla en una base de datos que sí cumple con la primera forma de normalización 1NF.
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.
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
Tabla 13. Ejemplo de una tabla en una base de datos que sí cumple con la segunda forma de normalización 2NF.
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
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.
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.
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.
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
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.
•• 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.
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
•• 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.
•• 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.
•• 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
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.
29
Unidad de aprendizaje 3. Cómo manipular datos con el lenguaje SQL
Internacional
de Valencia
Ejemplo:
ALTER TABLE vuelos
ADD COLUMN fecha_vuelo TIMESTAMP;
30
Introducción a Base de datos
Internacional
de Valencia
Ejemplo:
ALTER TABLE vuelos
DROP COLUMN fecha-vuelo;
La sintaxis para eliminar completamente una tabla con todos sus datos es la siguiente:
Ejemplo:
Figura 11. Sintaxis para eliminar por completo una base de datos en SQL.
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.
La sintaxis es la siguiente:
SELECT nombre_columna1,
nombre_columna2... Nombre_columna N
FROM nombre_tabla;
Ejemplo:
Figura 13. Selección de todos los registros y columnas en una tabla en SQL.
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:
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
La sintaxis es la siguiente:
Ejemplo:
También es posible crear un nuevo registro en el que se insertan selectivamente valores en algunos
campos (no en todos):
3.2.3. UPDATE
El comando UPDATE es utilizado para actualizar cualquier valor en el registro de una tabla.
La sintaxis es la siguiente:
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:
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.
Figura 21. Corrección del valor de varios datos en una tabla en SQL.
3.2.4. DELETE
La sintaxis es la siguiente:
34
Introducción a Base de datos
Internacional
de Valencia
A continuación se muestra un ejemplo de eliminación de registros de una tabla que cumplen una
determinada condición.
(Este registro es el único que cumple con la condición dada en la cláusula WHERE).
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:
Figura 25. Sintaxis SQL para permitir a un usuario crear una tabla.
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.
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
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:
Ejemplo 1:
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:
Tabla 19. Resultado de la consulta de todos los registros en la tabla pasajeros en SQL cuyo nombre empieza por ‘j’.
Ejemplo 2:
Figura 29. Selección de todos los registros en la tabla pasajeros en SQL cuyo nombre finaliza con una ‘a’.
Resultado:
Tabla 20. Resultado de la consulta de todos los registros en la tabla pasajeros en SQL cuyo nombre finaliza con
una ‘a’.
Ejemplo 3:
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:
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.
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.
Figura 31. Sintaxis para obtener la suma total de una columna numérica en una tabla en SQL.
Figura 32. Sintaxis para obtener el valor máximo del campo especificado, en una tabla en SQL.
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.
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
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:
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
39
Unidad de aprendizaje 3. Cómo manipular datos con el lenguaje SQL
Internacional
de Valencia
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:
Figura 38. Consulta SQL de vuelos con origen y destino específico presentados según hora de salida para cada
aerolínea.
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.
•• Í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.
41
Unidad de aprendizaje 3. Cómo manipular datos con el lenguaje SQL
Internacional
de Valencia
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.
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.
En este caso el atributo id de la tabla vuelos toma valores únicos y no puede tomar el valor NULL.
Ejemplo:
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.
Ejemplo:
FOREIGN KEY, la cual se usa para relacionar dos tablas. Considere el siguiente ejemplo:
Tabla vuelos
44
Introducción a Base de datos
Internacional
de Valencia
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.
Ejemplo:
45
Unidad de aprendizaje 3. Cómo manipular datos con el lenguaje SQL
Internacional
de Valencia
DEFAULT, usada para asignar un valor por defecto en una columna de la tabla. A continuación se
muestra un ejemplo de su uso.
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
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 27. Tabla pasajeros y tabla tarjeta-embarque a ser usadas en los ejemplos de usos de los comandos de
Unión en SQL.
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;
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:
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*FROM pasajeros
LEFT OUTER JOIN tarjeta-embarque
ON pasajeros.id-pasajero=tarjeta-embarque.id-pasajero;
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*FROM pasajeros
RIGHT OUTER JOIN tarjeta-embarque
ON pasajeros.id-pasajero=tarjeta-embarque.id-pasajero;
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*FROM pasajeros
FULL OUTER JOIN tarjeta-embarque
ON pasajeros.id-pasajero=tarjeta-embarque.id-pasajero;
48
Unidad de aprendizaje 4
•• 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.
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 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
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).
•• 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.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.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.
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.
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.
52
Introducción a Base de datos
Internacional
de Valencia
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.
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.
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
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
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
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.
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.
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.
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.
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.
Evita que ocurran lecturas no confirmadas ni lecturas irrepetibles, al efectuar bloqueos de lectura que
se mantienen hasta que la transacción sea completada.
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:
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.
•• 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.
•• 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.
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.
58
Introducción a Base de datos
Internacional
de Valencia
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.
•• 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.
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.
•• 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.
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:
•• Where: especifica las condiciones que deben cumplir los registros que se seleccionan.
•• Select: utilizado para consultar registros de una tabla y comprobar que satisfagan una condi-
ción.
•• 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
61
Unidad de aprendizaje 5
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.
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.
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.
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.
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.
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.
•• Seleccionar Next.
•• Seleccionar que se aceptan los términos y condiciones y una vez más Next.
•• Seleccionar Browser.
66
Introducción a Base de datos
Internacional
de Valencia
Figura 58. Activación del servidor MongoDB desde la consola administrativa de MongoDB.
Figura 59. Conexión con la base de datos MongoDB. Ingreso en la consola de línea de comandos administrativa
de MongoDB.
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.
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.
•• 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.
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.
•• 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.
•• 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.
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”
}]
}
71
Unidad de aprendizaje 1
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: 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.
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.
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.
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.
•• 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.
•• 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:
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.
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 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:
http://127.0.0.1/<nombre-del-proyecto>/public/
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/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.
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:
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.
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:
Ejecutamos el comando:
2018_09_19_172732_create_products_table.php
Y ejecutamos el comando:
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:
En ella se incorporan los nuevos atributos y luego se generan las nuevas tablas mediante la instrucción:
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.
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.
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.
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.
•• Main.py
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
•• 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
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:
•• 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:
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
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.
85
Unidad de aprendizaje 6. Desarrollo de aplicaciones bajo entorno web usando Base de datos
Internacional
de Valencia
“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.
•• 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.).
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
•• 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.
•• 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.
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.
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
https://www.youtube.com/playlist?list=PL55RiY5tL51qUXDyBqx0mKVOhLNFwwxvH
https://legacy.gitbook.com/book/richos/laravel-5/details
https://www.youtube.com/playlist?list=PLzWaSuz38oGvFklb9kUCjT2FGS95chHcz&disable_ poly-
mer=true
https://www.datacamp.com/community/tutorials/tutorial-jupyter-notebook
https://archive.ics.uci.edu/ml/datasets.html
97
Enlaces de interés
Internacional
de Valencia
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/
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
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/
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
Internacional
Reservados todos los derechos© de Valencia
Universidad Internacional de Valencia - 2020