MÓDULO 1 - BASE DE DATOS I
MÓDULO 1 - BASE DE DATOS I
MÓDULO 1 - BASE DE DATOS I
INGENIERÍA DE SOFTWARE
MODALIDAD A DISTANCIA
UNIVERSIDAD DE CARTAGENA
Los predecesores de los sistemas gestores de bases de datos fueron los sistemas gestores
de ficheros o sistemas de archivos tradicionales.
Coincidiendo con la evolución histórica de las bases de datos éstas han utilizado distintos
modelos:
• Jerárquicos
• En red.
• Relacionales.
• Multidimensionales.
• De objetos.
ACTIVIDAD 1.
• Una base de datos se entenderá como una colección de datos relacionados entre
sí y que tienen un significado implícito.
• Por datos queremos decir hechos conocidos que pueden registrarse y que tienen
un significado implícito.
Ejemplo
Una agenda con los nombres y teléfonos de un conjunto de personas conocidas es una base
de datos, puesto que es una colección de datos relacionados con un significado implícito.
ACTIVIDAD 2
2. Haga una tabla en la que identifiquey señale: dato, campo, Tabla, registro y archivo.
3. Elabore un cuadro comparativo con las ventajas ydesventajas de un SGBD.
Es muy común que los desarrolladores de software estemos en la situación de elegir entre
bases de datos relacionales y no relacionales. No es para verlo como un dilema o pensar
que dependiendo de la decisión vamos a fracasar, en realidad con cualquiera de las dos
opciones, es posible construir nuestro sistema, dependiendo de lo que queramos.
Entonces surgen diferentes interrogantes: ¿Es importante saber las diferencias entre
ambas bases de datos? ¿Cuál deberíamos usar en cada caso? Estas son preguntas
bastante interesantes, puesto que un buen diseño de la base de datos es un factor de alta
influencia con respecto a la calidad del proyecto. Dependiendo de la naturaleza de éste, se
debe elegir la base de datos, ya que las dos tienen diferentes características. Lee: 3 tipos
de análisis de datos para mejorar la toma de decisiones
Para conocer un poco de historia, las bases de datos relacionales se comenzaron a utilizar
en los años 80; a diferencia de las no relacionales que se están empezando a usar y
tuvieron un importante crecimiento entre 2012 y 2015. Sin embargo, hoy sigue siendo más
popular la primera opción.
Las bases de datos no relacionales (NoSQL) son las que, a diferencia de las relacionales,
no tienen un identificador que sirva de relación entre un conjunto de datos y otros. Como
veremos, la información se organiza normalmente mediante documentos y es muy útil
cuando no tenemos un esquema exacto de lo que se va a almacenar.
Con relación a formatos, la información de una base de datos puede ser almacenada en
tablas o documentos. Cuando los datos son organizados en un archivo de Excel, es en
formato tabla, pero cuando simplemente son datos escritos como cartas, fórmulas o
recetas, son datos en formato documento. Esto aplica para los dos tipos de bases de datos.
Habitualmente los datos almacenados en tablas son bases de datos relacionales, porque
existe la posibilidad de enlazar los datos de una tabla con los de otra y los datos
almacenados en documentos son no relacionales, aunque no siempre tiene que ser así.
Para ilustrar una de las diferencias entre bases de datos SQL y NOSQL, vamos a dar un
ejemplo. Imaginemos por un momento una ciudad como Medellín (Colombia), donde todas
las personas hablan el mismo idioma, por tanto es la única forma de que todos los
residentes se comuniquen e interactúen. Si se cambia ese idioma se perjudican todos los
residentes.
Ahora imaginemos otra ciudad como Bogotá (Colombia) y pensemos hipotéticamente que
en cada uno de los hogares se habla un idioma diferente, todos interactúan distinto y no
hay entendimiento entre todos, pero nadie afecta a nadie. Las bases de datos no
relacionales tienen un esquema dinámico, no se requiere la estructura de los datos para su
manipulación. Los datos se pueden almacenar de cualquier manera, columnas,
documentos, gráficos, etc, y cada documento puede tener su propia estructura, sin afectar
los demás, puede agregar más campos a medida que se avanza. Están conformadas por
documentos, campos y datos del documento, además, se almacenan por colecciones.
Tanto SQL como NoSQL son tipos de bases de datos recomendadas para utilizar a la hora
de comenzar con tus proyectos, cada una de ellas con ventajas y desventajas.
Por ejemplo los sistemas contables, o de inventario, son sistemas que requieren
transacciones de varias filas, para este tipo de trabajos la mejor opción son las bases de
datos SQL (MySq). Si los sistemas son de gestión de contenido, aplicaciones móviles,
sistemas de análisis en tiempo real, bases de datos con un crecimiento rápido, con un
esquema descentralizado, la mejor opción son bases de datos NOSQL (MongoDB).
Algunas de las ventajas de SQL: mayor soporte y más variedad de herramientas debido a
que lleva más tiempo en el mercado, es útil para manejar y obtener los datos, permite
Como desventajas de SQL están: No es flexible (antes de ingresar los objetos, deben estar
correctamente validados), mientras más compleja sea la base de datos, requiere mayor
procesamiento y eso se puede ver reflejado en el rendimiento y consumo de recursos.
Ahora, conozcamos algunas de las ventajas de las bases de datos NOSQL: permite una
alta escalabilidad (ayuda a reducir la carga de trabajo), flexible a diferentes tipos de datos,
los datos deben cumplir con el tipo de dato definido, y algunas desventajas: la integridad de
los datos se afecta por el poco soporte, menos seguridad al ejecutar consultas, no existe
estandarización, en la mayoría de los casos son poco compatibles con las bases de datos
SQL, casi todo su mantenimiento se debe realizar por consola debido a que existen pocas
herramientas.
Muchas personas piensan que deben migrar sus bases de datos a tecnologías NOSQL ya
que es lo “nuevo”, pero es un pensamiento errado. NOSQL no es el reemplazo de SQL,
simplemente es un modelo diferente que ofrece ventajas y soluciones a problemas que
poseen las bases de datos relacionales.
Para ilustrar una de las diferencias entre bases de datos SQL y NOSQL, vamos a dar un
ejemplo. Imaginemos por un momento una ciudad como Medellín (Colombia), donde todas
las personas hablan el mismo idioma, por tanto es la única forma de que todos los
residentes se comuniquen e interactúen. Si se cambia ese idioma se perjudican todos los
residentes.
ACTIVIDAD 3
Realice los ejercicios descritos a continuación. Para cada uno de los ejercicios siguientes,
obtener el esquema lógico relacional correspondiente a la especificación de requisitos. Para
algunos ejercicios se ha adjuntado un esquema conceptual. En cada esquema lógico se deben
señalar los atributos que son clave primaria y los que son clave ajena, especificando para
estos últimos si aceptan nulos o no y sus reglas de comportamiento ante el borrado y
modificación de tuplas de la relación a la que referencian.
Ejercicio 1
Se quiere diseñar una base de datos relacional para almacenar información sobre los
asuntos que lleva un gabinete de abogados. Cada asunto tiene un número de expediente
que lo identifica, y corresponde a un solo clientve. Del asunto se debe almacenar el período
(fecha de inicio y fecha de archivo o finalización), su estado (en trámite, archivado, etc.),
así como los datos personales del cliente al que pertenece (DNI, nombre, dirección, etc.).
Algunos asuntos son llevados por uno o varios procuradores, de los que nos interesa
también los datos personales.
Ejercicio 2
Se quiere diseñar una base de datos relacional que almacene información relativa a los
zoos existentes en el mundo, así como las especies animales que éstos albergan. De cada
zoo se conoce el nombre, ciudad y país donde se encuentra, tamaño (en m2) y presupuesto
anual. De cada especie animal se almacena el nombre vulgar y nombre científico, familia a
la que pertenece y si se encuentra en peligro de extinción. Además, se debe guardar
información sobre cada animal que los zoos poseen, como su número de identificación,
especie, sexo, año de nacimiento, país de origen y continente.
Ejercicio 3
Se quiere diseñar una base de datos relacional para gestionar los datos de los socios de
un club náutico. De cada socio se guardan los datos personales y los datos del barco o
barcos que posee: número de matrícula, nombre, número del amarre y cuota que paga por
el mismo. Además, se quiere mantener información sobre las salidas realizadas por cada
Para definir los atributos de una relación y el tipo de dato (dominio) permitido para estos
valores, se utiliza un esquema con esta sintaxis:
Aquí, la relación R comprende de los atributos A1a An y cada atributo corresponde a un tipo
de dato o dominio (D1, D2 , etc.).
A cada atributo le corresponde un tipo de dato, string o integer, lo que indica que hay
atributos que esperan cómo valor una secuencia de caracteres (string) y otros que solo
aceptan números enteros (integer).
Una relación con el esquema explicado arriba podría contener la siguiente tupla (fila):
Las tablas son sistemas de clasificación constituidos por filas horizontales y columnas
verticales que permiten agrupar datos y presentarlos de forma ordenada. Cada fila de una
tabla se denomina tupla. Los valores que contiene cada tupla vienen determinados por los
atributos definidos en el esquema relacional.
En el siguiente ejemplo se muestra una tabla tal como resultaría del esquema anterior:
Esta tabla guarda los datos de la plantilla de una empresa y se compone de cuatro registros,
cada uno de los cuales contiene información sobre un solo empleado.
• Definir derechos: todos los lenguajes de bases de datos proporcionan una sintaxis
que permite otorgar o retirar permisos. En este contexto se habla de Data Control
Language (DCL) o lenguaje de control de datos, un vocabulario integrado en el
lenguaje de bases de datos.
• Definir vistas: las llamadas views son vistas virtuales de un subconjunto de los
datos de una tabla. Para crear una vista, el SGBD genera una tabla virtual (relación
lógica) sobre la base de las tablas físicas. En estas vistas pueden emplearse las
mismas operaciones que se utilizarían en tablas físicas. Según la función de la vista
de datos pueden distinguirse distintos tipos de vista. Las más habituales son
aquellas que filtran determinadas filas (consulta de selección) o columnas (vista de
columnas) de una tabla, así como las que conectan diversas tablas entre sí (vista
de conjunto).
Las operaciones típicas de las BD como consultar, crear, actualizar o borrar datos se
realizan por medio de las llamadas sentencias SQL (SQL statements), una combinación
de órdenes SQL, semánticamente vinculadas al inglés y por este motivo bastante
elocuentes. La siguiente tabla contiene términos fundamentales del modelo de datos
relacional y su equivalente en terminología SQL:
Utilizamos SELECT en primer lugar para ordenar al SGBD relacional que consulte ciertos
datos. A continuación definimos los datos que queremos consultar proporcionando tanto la
tabla como la columna que deseamos seleccionar. Con WHERE integramos una condición
en la sentencia SQL porque no queremos abrir todos los valores en esta columna, sino solo
el valor de un determinado registro.
Volviendo a nuestra tabla “Empleados”, esta sentencia SQL podría resultar así:
Como resultado, la base de datos entrega el valor 25 091225 46, el número de la seguridad
social de Gonzalo Expósito Hernández, el empleado identificado con el número 3.
Normalización
Cuando se trabaja con bases de datos relacionales, rara vez se hace con una única tabla.
Normalmente se manejan arquitecturas en las cuales los datos se clasifican en tablas
separadas en función de su significado. La necesidad de hacer consultas cruzadas para
obtener datos guardados en tablas diferentes es la que da origen al concepto que sustenta
el modelo relacional de bases de datos.
Los requisitos de cada una de estas formas normales y la translación de una base de datos
de una forma normal a otra son temas de nuestro artículo sobre la normalización.
En este modelo de datos se llama “relaciones” (relationships) a las relaciones entre tablas
separadas por medio de claves. Estas claves son las que conectan las tablas entre sí y
permiten que los datos de tablas diferentes puedan consultarse o modificarse siempre con
la misma sentencia.
Claves
Las tablas como la de nuestro ejemplo permiten consultar valores o registros de distintas
formas, pero en todas ellas el componente principal son las claves. En el modelo relacional
se conoce como claves a los atributos que sirven para identificar un registro de forma
inequívoca.
Volviendo a nuestra tabla “Empleados”, la siguiente clave permite identificar una tupla:
Con los datos de la tabla, la siguiente clave serviría para identificar de forma única el registro
del empleado Gonzalo Expósito:
A estas llaves se las conoce como superclaves, si bien en la práctica tienen poca
relevancia, entre otras cosas porque a menudo contienen más atributos de los necesarios.
En cambio, en el contexto de las bases de datos relacionales, acostumbra a trabajarse con
los fragmentos más pequeños de una superclave, los llamados candidatos a clave. Una
tabla puede contener varios candidatos a clave que identifican a las tuplas
inequívocamente.
Como hemos visto en nuestra consulta anterior, los registros de la tabla “Empleados”
pueden identificarse solo con el número de identificación (e_ID). Otro candidato a clave
podría ser el número de la seguridad social (nº SS). Una clave como {apellido, nombre}, en
cambio, no sería un buen candidato, ya que esta pareja de atributos no puede asignarse
Así, para nuestra tabla pueden definirse los siguientes candidatos a clave:
Las bases de datos relacionales suelen estructurarse de tal forma que uno de los posibles
candidatos a clave indique el orden de los registros. Este candidato a clave se convierte
entonces en clave primaria (primary key) y suele tratarse de números identificativos
consecutivos. En nuestra tabla sería e_ID.
Por su capacidad para identificar los registros en las bases de datos relacionales, las claves
se ajustan a la perfección para interconectar las diferentes tablas que componen una BD.
Para hacerlo, la clave primaria de una tabla se convierte en la clave ajena (foreign key) de
otra.
La tabla que presentamos a continuación contiene los datos que una empresa podría haber
registrado sobre su parque móvil. La clave primaria de la tabla llamada “Vehículos” es
un coche_ID consecutivo:
Ahora, para mostrar el coche que conduce cada empleado debería conectarse la tabla
“Vehículos” con la tabla “Empleados”. Una forma de hacerlo sería integrando la clave
primaria de la tabla del automóvil (coche_ID) como clave ajena en la tabla con los datos
sobre la plantilla:
JOIN
JOIN puede traducirse como la acción de “unir” o “combinar” y en este contexto hace
referencia a una operación que permite consultar varias tablas de
datos simultáneamente. Los datos que se extraen de las tablas seleccionadas se agrupan
en un subconjunto con todos los posibles resultados (espacio de muestreo en matemáticas)
y se entregan en función de las condiciones que se han definido.
El fundamento matemático del JOIN de SQL lo componen dos operaciones del álgebra
relacional: el producto cartesiano y la selección. Los usuarios deciden con la elección del
tipo de JOIN y con ayuda de una condición de selección qué datos se extraen de las
tablas.
En nuestro artículo sobre los JOIN de SQL conocerás cómo funcionan los JOIN de
SQL en las tablas de bases de datos relacionales y qué has de tener en cuenta al escoger
el tipo de JOIN.
Las bases de datos relacionales basadas en SQL se diferencian de los conceptos que
rompen con la estructura fija de las tablas y persiguen un enfoque alternativo a la hora de
organizar los datos. Entre los más importantes se encuentran las bases de datos
orientadas a objetos y los sistemas basados en documentos.
Con las bases de datos orientadas a objetos (BDOO) entra en escena a finales de la década
de 1980 un nuevo modelo que retoma elementos de la programación orientada a objetos y
permite el almacenamiento de los datos en forma de objetos. Aunque este principio no logra
consolidarse, algunas de sus ideas consiguen colarse en el desarrollo de sistemas de bases
de datos relacionales. El resultado son productos con extensiones objeto-relacionales que
facilitan el almacenamiento de tipos abstractos de datos en el modelo relacional de base de
datos.
Con los cambios en el uso de Internet que trajo consigo el nuevo siglo y la web 2.0, el
modelo relacional volvió a ser objeto de críticas. En el marco del movimiento NoSQL (Not
only SQL), cuyo objeto era crear sistemas de BD de gran rendimiento aptos para
aplicaciones con un uso masivo de datos, comienzan a desarrollarse entonces modelos
Un objeto es, así, una combinación de datos en la cual también se define el punto de acceso
a estos datos. Los objetos se consideran tipos abstractos de datos.
Otra característica del modelo orientado a objetos es el aislamiento de los datos: la única
forma de acceder a los datos guardados es utilizando los métodos que el usuario ha definido
previamente. Esto protege a los datos de cambios procedentes de puntos de acceso no
definidos.
Por otro lado, las estructuras de bases de datos se definen aquí por medio de un sistema
de clases jerárquico. En el contexto de la programación orientada a objetos, una clase es
un conjunto de objetos que poseen las mismas propiedades y a cada clase de objetos le
subyace una definición de clases. Este esquema prescribe los atributos y los métodos de
todos los objetos de la misma clase, determinando así cómo se crean y se modifican.
Para interactuar con el sistema gestor de estas bases de datos, los usuarios utilizan un
lenguaje de consultas inspirado en SQL, el lenguaje de consultas a objetos u
OQL (Object Query Language). El resultado de una consulta OQL no es, como en SQL, un
espacio de resultados posibles, sino una lista de todos los objetos que satisfacen las
condiciones de la declaración OQL.
Algunas implementaciones conocidas del modelo de BDOO son Realm, ZODB y Perst.
Pese a todo, los programadores de aplicaciones que no quieran prescindir de las ventajas
del modelo relacional tienen la posibilidad de compensar estas incompatibilidades con
ayuda del mapeo objeto-relacional (O/R mapping o object-relational mapping, ORM).
Las funcionalidades para la representación objeto-relacional se implementan con
bibliotecas que crean una capa de abstracción entre la aplicación orientada a objetos y los
datos guardados en las tablas.
Asimismo, hay muchos fabricantes de sistemas relacionales que equipan sus productos
con funciones para compensar estas incompatibilidades con la programación orientada a
objetos. Estos sistemas se conocen como objeto-relacionales.
Los sistemas mixtos son sistemas de bases de datos relacionales que se han ampliado
con conceptos del modelo orientado a objetos. De este modo los principios probados
del modelo relacional se ampliarían a tipos abstractos de datos como los objetos.
Para poder gestionar estos tipos abstractos de datos, las bases de datos objeto-relacionales
amplían las bases de datos relacionales con:
Si en las bases de datos relacionales los datos se almacenan en tablas, el modelo orientado
a documentos se basa en un conjunto heterogéneo de datos compuesto por documentos,
que pueden ser estructurados, como archivos JSON, YAML o XML, o no estructurados,
como Binary Large Objects (BLOB) –archivos de imagen, vídeo o audio.
Un documento en formato JSON para almacenar los datos de nuestra plantilla podría tener
esta construcción:
Las consultas tienen lugar utilizando funciones, lo que puede hacerse con JavaScript. Los
SGBD que trabajan orientados a documentos otorgan un ID único a cada documento, pero,
a diferencia de como ocurre en el modelo relacional, aquí no existe ningún esquema que
abarque a la base de datos por completo. Los documentos en una base de datos basada
en documentos no han de observar ninguna forma normal ni existen propiedades
estructurales que hayan de cumplirse en todos los documentos. En principio, cada
documento puede tener una estructura diferente. Pese a todo, en lo que hace al desarrollo
de aplicaciones, se recomienda crear los documentos en uno de los esquemas adecuados
a la aplicación para lograr los requisitos necesarios para poder realizar consultas.
Los sistemas relacionales controlan en todo momento que se cumplan las condiciones
indicadas en las definiciones de las tablas, lo que, al procesar grandes volúmenes de datos,
conduce a una menor velocidad de escritura. Los sistemas NoSQL no presentan unos
requisitos de consistencia de datos tan estrictos, condición que los hace adecuados para
grandes arquitecturas en las cuales se han de gestionar de forma paralela muchas
instancias de base de datos.
También las aplicaciones web recurren con frecuencia creciente a las bases de datos
orientadas a documentos. Pero si se requiere una fuerte interconexión, el almacenamiento
basado en documentos va ligado a un esfuerzo mucho mayor. En este caso sería más
conveniente utilizar sistemas relacionales.
Algunos ejemplos de bases de datos orientadas a documentos son BaseX, CouchDB, eXist,
MongoDB y RavenDB.
ACTIVIDAD 4
Realice los ejercicios descritos a continuación. Para cada uno de los ejercicios siguientes,
obtener el esquema lógico relacional correspondiente a la especificación de requisitos. Para
algunos ejercicios se ha adjuntado un esquema conceptual. En cada esquema lógico se deben
señalar los atributos que son clave primaria y los que son clave ajena, especificando para
estos últimos si aceptan nulos o no y sus reglas de comportamiento ante el borrado y
modificación de tuplas de la relación a la que referencian.
Ejercicio 4
Se desea diseñar una base de datos relacional que almacene la información sobre los
préstamos de las películas de un vídeo club. En la actualidad la gestión de esta información
se lleva cabo del siguiente modo: Cuando se hace un préstamo se rellena una ficha en la
que se anota el socio que se lleva la película, la fecha y el número de la cinta que se lleva,
que es único (de cada película hay varias copias en cintas distintas). Esta ficha se deposita
en el archivador de películas prestadas. Cuando el socio devuelve la cinta, la ficha se pasa
al archivador de películas devueltas. El vídeo club tiene, además, un archivador con fichas
de películas ordenadas por título; cada ficha tiene además el género de la película
(comedia, terror, ...), su director y los nombres de los actores que intervienen. También se
tiene un archivador con las fichas de los socios, ordenadas por el código que el vídeo club
les da cuando les hace el carné; cada ficha tiene el nombre del socio, su dirección y
teléfono, los nombres de sus directores favoritos, los nombres de sus actores favoritos y los
géneros cinematográficos de su preferencia. Cuando un socio quiere tomar prestada una
película de la que no hay copias disponibles, se le puede anotar en la lista de espera de
esa película. Cada vez que se devuelve una película, se comprueba si hay alguien en su
lista de espera, y si es así se llama por teléfono al primer socio de la lista para decirle que
ya puede pasar a recogerla, borrándolo después de la lista.
Algunas aclaraciones que el servicio de estudiantes nos ha hecho son las siguientes: en
cada departamento hay varias áreas de conocimiento, cada una de las cuales imparte una
serie de asignaturas distintas en una o varias titulaciones. Cada profesor pertenece a un
único área de conocimiento de un departamento e imparte clases en una o varias
asignaturas de ese área.