Mod 4 2021
Mod 4 2021
Mod 4 2021
Índice
Introducción
Introducción a Bases de Datos ......................................................2
Organización de una base de datos ..............................................5
Bases de Datos
Base de Datos Relacional .............................................................9
Diseño de Base de Datos ..............................................................22
Normalización de Datos .................................................................27
Programando Bases de Datos
Programando Bases de Datos .......................................................35
Conjuntos y JOINS en Bases de Datos .........................................41
Transacciones en Base de Datos ..................................................51
Bloqueo o Locking en Bases de Datos ..........................................53
A finales de los años sesenta nacen las bases de datos. En estos sistemas se
guardan los datos utilizados por los usuarios. Y los programas que consumían
esos datos no se tenían que preocupar de su mantenimiento ni almacenaje, por lo
que un cambio en la base de datos no tiene por qué afectar en principio a los
programas que la utilizan.
Un dato puede ser una letra, número, símbolo o palabra que por sí solo no tiene
ningún significado, mientras que la información se define como un conjunto de
datos procesados que tienen significado para el usuario.
Cada día nos encontramos con actividades que requieren algún tipo de interacción
con una base de datos (ingreso en un banco, reserva de una entrada para el
teatro, solicitud de una suscripción a una revista, compra de productos, …). Estas
interacciones son ejemplos de lo que se llama aplicaciones tradicionales de bases
de datos que básicamente almacenan información numérica o de texto, aunque los
avances tecnológicos han permitido que también existan: bases de datos
multimedia, sistemas de información geográfica (GIS), sistemas de proceso
analítico on-line. Y ni hablar si tocamos el tema Big Data.
Una base de datos puede ser utilizada por varias aplicaciones y usuarios, y
toda base de datos debe permitir insertar, modificar y borrar datos.
Este ejemplo de agenda de contactos hace referencia a dos elementos para que
un conjunto de datos constituya una Base de Datos:
analizar, etc… datos de estas. Realiza la función concreta de interfaz entre la base
de datos y los usuarios finales o los programas correspondientes, organizando los
datos y permitiendo su acceso. En internet existen versiones gratuitas, de software
libre y software propietario.
En el siguiente esquema podemos ver cómo el usuario interactúa con los datos a
través del DBMS o SGBD:
• Tiene que ser versátil: esto quiere decir que, dependiendo de los usuarios
o las aplicaciones, puedan hacer diferentes cosas o traten a los datos de
formas distintas.
• Tiene que atender con la rapidez adecuada
• Tiene que tener un índice de redundancia lo más bajo posible.
• Tiene que disponer de una alta capacidad de acceso para ganar el
mayor tiempo posible en la realización de consultas.
• Tener un alto índice de integridad, esto significa que al tener muchos
usuarios consultando y escribiendo en una misma base de datos no puede
haber fallos en la inserción de datos, errores por redundancia o lenta
actualización.
Según su variabilidad
Se encuentran las bases de datos estáticas que son aquellas que sus datos no
pueden modificarse, están diseñadas especialmente para la lectura de sus datos.
Por lo general se suelen utilizar para almacenar datos históricos, que no
cambiarán, para realizar proyecciones estadísticas y ayudar a la toma de
decisiones. Por otro lado, las bases de datos dinámicas son aquellas que sus
datos se pueden actualizar, ya sea agregando, modificando o eliminando los
mismos durante el transcurso del tiempo.
Según el contenido
Según el contenido que almacenan las bases de datos se pueden clasificar de la
siguiente forma:
Base de datos
Característica Base de datos NoSQL
SQL
Desempeño (performance) Bajo Alto
Availability (disponibilidad) Pobre Buena
Fiabilidad (reliability) Buena Pobre
Consistencia (consistency) Buena Pobre
Almacenamiento (data Optimizado para grandes
Tamaño medio
storage) datos
Escalabilidad (scalability) Alta pero cara Alta
El lenguaje más habitual para construir las consultas a bases de datos relacionales
es SQL, Structured Query Language o Lenguaje Estructurado de Consultas, un
estándar implementado por los principales motores o sistemas de gestión de bases
de datos relacionales.
Dato.
Modelos de datos
Un modelo de datos es una serie de conceptos que se utilizan para describir un
conjunto de datos y las operaciones para manipularlos.
Hay dos tipos de modelos de datos: los modelos conceptuales y los modelos
lógicos. Los modelos conceptuales se utilizan para representar la realidad a un
alto nivel de abstracción. Mediante los modelos conceptuales se puede construir
una descripción de la realidad fácil de entender. En los modelos lógicos, las
descripciones de los datos tienen una correspondencia sencilla con la estructura
física de la base de datos.
En el diseño de bases de datos se usan primero los modelos conceptuales para
lograr una descripción de alto nivel de la realidad, y luego se transforma el
esquema conceptual en un esquema lógico. El motivo de realizar estas dos etapas
es la dificultad de abstraer la estructura de una base de datos que presente cierta
complejidad. Un esquema es un conjunto de representaciones lingüísticas o
gráficas que describen la estructura de los datos de interés. Los modelos
conceptuales deben ser buenas herramientas para representar la realidad, por lo
que deben poseer las siguientes cualidades:
• Expresividad: deben tener suficientes conceptos para expresar
perfectamente la realidad.
• Simplicidad: deben ser simples para que los esquemas sean fáciles de
entender.
• Minimalidad: cada concepto debe tener un significado distinto.
• Formalidad: todos los conceptos deben tener una interpretación única,
precisa y bien definida. En general, un modelo no es capaz de expresar
todas las propiedades de una realidad determinada, por lo que hay que
añadir aserciones que complementen el esquema.
Modelo Entidad-Relación
Cuando empezamos a pensar o diseñar una base de datos, puede parecer simple
en un principio, pero en la medida que nuestra idea de base de datos crece, el
diseño también crece y necesitamos una forma de poder conceptualizar y
visualizar todos los elementos que la componen, cómo se relacionan y qué
características tienen.
Entonces denominado por sus siglas como: E-R, este modelo representación de la
realidad a través de entidades, que son objetos que existen y que se distinguen de
otros por sus características, por ejemplo: un alumno se distingue de otro por sus
características particulares como lo es el nombre, o el número de control asignado
al entrar a una institución educativa, así mismo, un empleado, una materia, etc.
1. Entidad
2. Atributo
3. Relación
Entidad: Una entidad representa una “cosa”, "objeto" o "concepto" del mundo real.
Algunos ejemplos:
Atributos: Los atributos son las características que definen o identifican a una
entidad. como, por ejemplo, para una entidad Persona tenemos: Edad, género,
peso, altura, etc.
Veamos otro ejemplo: Consideremos una empresa que requiere controlar a los
vendedores y las ventas que ellos realizan; de este problema determinamos que
los objetos o entidades principales a estudiar son el empleado (vendedor) y el
artículo (que es el producto en venta), y las características que los identifican son:
habitación. Además, a esta relación le podemos dar un título: “Se aloja” ya que los
huéspedes se alojan en las habitaciones.
Hay más elementos que se basan en los elementos principales, que son las
entidades débiles, los atributos multivalorados, atributos derivados, relaciones
débiles y relaciones recursivas. A los fines prácticos solamente nos vamos a
centrar en la simbología básica, pero se debe saber que existen más símbolos que
brindar un diagrama más específico. Al final de la sección dejamos 4 tablas
adicionales con descripciones más detalladas para las entidades, las relaciones,
los atributos y las cardinalidades.
Si bien en la próxima sección veremos cómo diseñar el DER, al ser ésta una
herramienta muy intuitiva, podemos tomar la siguiente imagen y entender las
partes ya vistas.
Diagramas DER
• https://app.creately.com/
• https://www.lucidchart.com/
• https://app.diagrams.net/
2. Identifica las relaciones: Las relaciones resaltan cómo las entidades interactúan
entre sí.
En un diagrama ER, los atributos son necesarios para modelar qué características
se incluirán con cada entidad. Siguiendo el ejemplo, los estudiantes tiene un DNI y
una edad, los cursos tienen un número de curso, una cantidad de asientos
disponibles y el nombre del curso. Los profesores por su parte solamente nos
interesa guardar el nombre.
5. Completa el diagrama
Primero nos damos cuenta de que es una base de datos de algún tipo de banco o
empresa, y luego podríamos empezar a desmenuzar sus entidades, atributos y
relaciones.
Ahora en este DER faltan las cardinalidades. ¿Vos qué dirías al respecto?
Tenemos una entidad “Cliente” donde vamos almacenando los datos del cliente, y
una entidad “Cuentas” donde, además de almacenar los datos de la cuenta,
necesariamente debe existir un dato que nos permita conectar ambas tablas.
El siguiente diseño consiste en construir una base de datos que almacene la carta
de un restaurante.
Ejemplo DER
En primer lugar, los DER son fáciles de comprender y no requieren que una
persona reciba una capacitación exhaustiva para poder trabajar con ellos de
manera eficiente y precisa. Esto significa que los diseñadores pueden utilizar los
DER para comunicarse fácilmente con los desarrolladores, los clientes y los
usuarios finales, independientemente de su competencia en TI.
En segundo lugar, los DER son fácilmente traducibles en tablas relacionales que
pueden utilizarse para construir rápidamente bases de datos. Además, los DER
pueden ser utilizados directamente por los desarrolladores de bases de datos
como el plano para implementar los datos en aplicaciones de software
específicas.
Por último, los DER pueden aplicarse en otros contextos, como la descripción de
las diferentes relaciones y operaciones dentro de una organización.
Diseño conceptual
El diseño conceptual parte de las especificaciones de requisitos de usuario y su
resultado es el esquema conceptual de la base de datos. Un esquema conceptual
es una descripción de alto nivel de la estructura de la base de datos,
independientemente del DBMS que se vaya a utilizar para manipularla. Un modelo
conceptual es un lenguaje que se utiliza para describir esquemas conceptuales.
El objetivo del diseño conceptual es describir los datos de la base de datos y no las
estructuras de almacenamiento que se necesitarán para manejar estos datos.
Diseño lógico
Diseño físico
El diseño físico parte del esquema lógico y da como resultado un esquema físico.
Un esquema físico es una descripción de la implementación de una base de datos
en memoria secundaria: las estructuras de almacenamiento y los métodos
utilizados para tener un acceso eficiente a los datos. Por ello, el diseño físico
depende del DBMS concreto y el esquema físico se expresa mediante su lenguaje
de definición de datos.
Tipos de Datos
Conocer y definir los tipos de datos en el diseño físico es muy importante porque
forman parte de las restricciones que sirven para establecer las reglas de una
tabla. Especificando qué tipos de datos se pueden añadir en un registro evita que
se inserten datos incorrectos. Es necesario conocer los tipos de datos de SQL. A
continuación, una sencilla tabla de tipos de datos que manipulan las bases de
datos.
Índice
Para facilitar la obtención de información de una tabla se utilizan índices. El índice
de una tabla desempeña la misma función que el índice de un libro: permite
encontrar datos rápidamente. En el caso de las tablas, localiza registros.
Una tabla se indexa por uno o varios campos, y posibilita el acceso directo y rápido
haciendo más eficiente las búsquedas. Sin índice, se debe recorrer
secuencialmente toda la tabla para encontrar un registro consumiendo más tiempo
y recursos. Entonces el objetivo de un índice es acelerar la recuperación de
información. La desventaja es que consume espacio en el disco ya que requiere
realizar una tarea de indexación. Es una técnica que optimiza el acceso a los
datos, mejora el rendimiento acelerando las consultas y otras operaciones. Es útil
cuando la tabla contiene miles de registros. Es importante identificar el o los
campos por los que sería útil crear un índice, aquellos campos por los cuales se
realizan operaciones de búsqueda con frecuencia.
• Index: Puede haber varios por tabla. Es un índice común. Los valores no
necesariamente son únicos y aceptan valores nulos. Podemos darle un
nombre, si no se lo damos, se coloca uno por defecto. "key" es sinónimo de
"index".
• Unique: Es un índice para los cuales los valores deben ser únicos y
diferentes, aparece un mensaje de error si intentamos agregar un registro
Módulo 4 – Base de Datos 25
2021 Año de homenaje
al premio Nobel de medicina
Dr. César Milstein
Normalización de Datos
La normalización es la técnica de estandarización y validación de datos que se
utiliza para diseñar las tablas y establecer las relaciones entre ellas. Esto nos
permite una mayor organización para eliminar la redundancia de datos y proteger
la integridad de los mismos. Sin la normalización, tendríamos datos redundantes
los cuales traen aparejados problemas de mantenimiento, además de ocupar
espacio en el disco duro, como también, dependencias incoherentes.
En esta tabla, que es la normalidad en la vida cotidiana de las personas, para los
desarrolladores es casi una pesadilla de datos.
Para solucionarlo, podemos crear un registro por cada email o eliminar el atributo
que no cumple dicha condición. En la siguiente imagen vemos cómo quedaría la
tabla si separamos el email y creamos un nuevo registro para cumplir con la
condición. Ahora tenemos un email por registro:
Sin embargo, se nos presenta un nuevo problema. Vemos que JORGE GOMEZ
aparece dos veces, y lo mismo ocurre con PASCUAL VARGAS.
Entonces para cumplir con la primera forma normal eliminando el atributo email,
tendremos que crear una tabla emails que contenga las columnas email, que
funcionara como clave primaria (PK), y una columna Id_Cliente, que funcionara
como Clave Foránea que apunta hacia el id del cliente.
El resultado final es que tenemos una tabla con todos los datos de los usuarios, y
una segunda tabla que nos permite relacionar los emails con los datos de usuario.
Así si un usuario tiene N emails, en esta nueva tabla tendremos N mails
relacionados con el mismo id de usuario.
1. Campos con varios datos. Cada columna ahora contiene un único valor
2. Los procesos de búsqueda y actualización son ineficientes. Por ejemplo, si
quisiéramos buscar reemplazar el email de un usuario como Pascual
Vargas.
1. El sistema es eficiente para buscar usuario por email
2. Si queremos editar, agregar o borrar el email de un usuario
solamente tenemos que realizar la operación sobre la tabla Emails
Al aplicar la segunda forma normal nos quedarían las tablas Clientes, Provincias y
Localidades:
1. Por algún error humano, alguien pudo haber escrito mal el nombre de una
provincia o localidad. Encontrar y solucionar en la base de datos ese
incidente puede ser muy incómodo. Nuevamente este problema se
soluciona editando un único registro, en una única tabla.
Ésta forma normal es considerada como el estándar a cumplir por los esquemas
relacionales.
Siguiendo el ejemplo, tenemos que agregar la tabla Cuentas la cual tiene los
atributos CVU (PK), Id_Estado e Id_Cliente y en la tabla Clientes eliminaremos a
columna CVU y Id_EstadoCuenta quedando las tablas de la siguiente forma:
En este punto podemos observar que una única tabla que teníamos al inicio se ha
convertido en 5 tablas. En cada tabla encontramos datos representativos, de forma
ordenada y relacionada.
Para esto crearemos la tabla Monedas, la cual tendría los atributos Id_Moneda y
Nombre, y una tabla ClientesMonedas que tendrá las columnas Id_Cliente e
Id_Moneda, en donde asignaremos con qué tipos de monedas puede operar cada
cliente:
cliente puede tener muchas monedas, y que una moneda puede ser usada por
muchos clientes (N:M).
Esto quiere decir que si mediante la unión de los campos de las tablas, podemos
recuperar la tabla inicial. Si hacemos el ejercicio de ir conectando todos los id de
las tablas, veremos que es posible reconstruir la tabla inicial.
¿Qué es SQL?
Comandos en SQL
Muchas de las acciones como crear tabla e insertar datos se pueden hacer de
forma visual a través de un Sistema Gestor de Base de Datos, es importante
conocer las principales acciones que podemos hacer con SQL para luego poder
realizar consultas y desarrollos más complejos. Los siguientes comandos los
podremos ir probando en el SQL Server, pero también podemos hacer pruebas
más sencillas con intérpretes online de SQL como los siguientes:
• http://sqlfiddle.com/
• https://www.jdoodle.com/execute-sql-online/
Como ocurre con todo lenguaje, existe una documentación en la cual podemos
encontrar mucha más información y detalle. Siempre es importante consultar más
detalles.
Seleccionando datos
Una de las sentencias más usadas es el SELECT que sirve para obtener los datos
de una tabla. Si queremos seleccionar todos los campos de una tabla aplicamos la
siguiente sentencia:
Insertar datos
El comando para insertar datos en una tabla es INSERT. Deben respetar el orden
de las columnas con los datos que se van a guardar y deben estar separados por
comas las columnas y es posible ignorar los campos que permiten valores nulos.
Actualizando registros
La instrucción UPDATE sirve para actualizar los registros existentes. Es necesario
definir una condición que permita identificar los registros que se quieren actualizar:
Borrar datos
Para borrar registros necesitamos la instrucción DELETE. Nuevamente es
necesario y muy importante tener una condición que nos permita identificar los
registros a eliminar. En caso de que no se defina esta condición es posible que
perdamos todos los registros de nuestra tabla o base de datos. La instrucción
sería:
Operadores
En ejemplos anteriores vimos la cláusula WHERE que nos sirve para definir
condiciones. Es importante explorar las posibilidades que nos da esta cláusula, ya
Ordenando datos
Ya vimos cómo seleccionar datos, pero seguramente nos interesaría que esa
selección venga ordenada por algún campo y bajo algún criterio. Para esa acción
tenemos la instrucción ORDER BY. Se pueden especificar una o más columnas.
La sentencia es la siguiente:
Funciones de Agregación
Una función de agregación es un cálculo sobre un conjunto de valores,
devolviendo un sólo valor, excepto por la función COUNT. Estas funciones
ignoran los valores NULL. Por lo general, debemos combinar las funciones de
agregado con la cláusula GROUP BY. Algunas de ellas son MAX (Máximo), MIN
(Mínimo), AVG (Promedio), SUM (Suma), COUNT (Cantidad) entre otras.
Subconsultas
Una subconsulta es una instrucción SELECT anidada dentro de otra instrucción
SELECT, las cuales pueden contener condiciones como las mencionadas
anteriormente. Para generar una subconsulta debemos tener presente ciertas
reglas como: escribir la subconsulta entre paréntesis, especificar en ella sólo una
columna (si no se utiliza IN, ANY, ALL o EXISTS), que no contenga la cláusula
GROUP BY.
Por un lado, vamos a tener una tabla Empleados que almacenará una lista de
empleados y el id del departamento al que pertenecen. Prestemos atención a un
detalle en la siguiente tabla: al caso de Williams que no tiene un departamento
asignado (NULL).
Y por otro lado, una tabla Departamentos con la lista de departamentos que
existen en la empresa. En esta tabla también hay un detalle importante a tener en
cuenta: El departamento de Marketing no tiene ningún empleado asociado:
INNER JOIN
Esta es la opción predeterminada, también conocida como simplemente JOIN. Si
no se especifica el tipo de unión, se establecerá de manera predeterminada como
la unión interna. Esto implica que, si estamos uniendo dos tablas en una columna
común, sólo retornará los datos que coincidan en ambas tablas.
¿Por qué ocurre esto? Porque como se dijo antes, JOIN muestra como resultado la
intersección de ambas tablas.
También hay que tener en cuenta que, en los resultados vemos 4 columnas. Las 2
primeras se corresponden con la tabla Empleados y las últimas con
Departamentos. Esto ocurre porque estamos seleccionando todas las columnas
con un *. Si queremos, podemos ser específicos y seleccionar sólo 2 columnas,
para eso debemos configurar nuestra consulta para seleccionar dichas columnas:
LEFT JOIN
En este caso empecemos por el diagrama de Venn para luego ver la tabla, y
comprender la lógica desde otro punto de vista. Nuevamente el conjunto A
representa la tabla de empleados y el conjunto B la tabla de Departamentos:
Según el gráfico anterior buscamos obtener todos los elementos del conjunto de la
IZQUIERDA (LEFT), es decir el A (Empleados) con la unión de aquellos elementos
que coincidan con el conjunto B (Departamentos).
Módulo 4 – Base de Datos 45
2021 Año de homenaje
al premio Nobel de medicina
Dr. César Milstein
RIGHT JOIN
Entonces, nuevamente partiendo del gráfico de conjuntos tenemos que ver que el
resultado será: todos los elementos del conjunto B (Departamentos) en unión con
aquellos elementos que coincidan con el conjunto A (Empleados). El resultado es
la siguiente tabla:
FULL JOIN
Mientras que LEFT JOIN muestra todas las filas de la tabla izquierda, y RIGHT
JOIN muestra todas las correspondientes a la tabla derecha, FULL OUTER JOIN
(o simplemente FULL JOIN) se encarga de mostrar todas las filas de ambas tablas,
sin importar que no existan coincidencias (usará NULL como un valor por defecto
para dichos casos).
Más variantes
Si miramos con atención los siguientes diagramas de Venn, vamos a notar que es
posible formar incluso más combinaciones, al momento de seleccionar datos.
Por ejemplo, tenemos el siguiente caso, conocido como LEFT EXCLUDING JOIN:
LEFT_EXCLUDING_JOIN. (n.d.).
Te dejamos a continuación una imagen que sintetiza todos los tipos de JOINS con
sus respectivas consultas:
Ejemplo:
Un ejemplo habitual de transacción es el traspaso de una cantidad de dinero entre
cuentas bancarias. Normalmente se realiza mediante dos operaciones distintas,
una en la que se decrementa el saldo de la cuenta origen y otra en la que se
incrementa el saldo de la cuenta destino. Para garantizar la integridad del sistema
(es decir, para que no aparezca o desaparezca dinero) las dos operaciones deben
ser atómicas, es decir que el sistema debe garantizar que, bajo cualquier
circunstancia (incluso una caída del sistema), el resultado final es: o bien se han
realizado las dos operaciones, o bien no se ha realizado ninguna.
Los bloqueos son parte esencial del requisito de aislamiento de los datos y se
utilizan para bloquear los datos afectados dentro de una operación. En el momento
en que los datos están bloqueados, no se permitirá que otras operaciones lleguen
a realizarse haciendo cambios en los datos que se guardan en los objetos
afectados por el bloqueo que se realiza.
Una vez liberado el bloqueo, al confirmar los cambios o al revertir los cambios al
estado inicial, se podrán realizar otras operaciones que permitirán hacer los
cambios de datos que se requieran.
Esto, traducido al lenguaje de SQL, significa que cuando se realiza una operación,
se antepone el bloqueo en un objeto, el resto de las operaciones que se requieren
para dar el acceso al objeto serán forzadas a esperar hasta la liberación del
bloqueo y que esa espera se registre con el tipo de espera correcto.
Una vez que tenemos nuestra Base de Datos, es normal que los proyectos
evolucionen y el cliente o usuarios del sistema pidan agregar nuevas funciones.
¿Qué pasaría si se nos pide agregar fotos a los libros? El frontend dirá, no hay
problema ponemos un formulario y que suban las fotos. Luego el backend dirá
que, si recibe las fotos desde la web, las guarda en una carpeta y se las manda a
la base de datos Entonces nos llaman a nosotros y nos piden que hagamos el
ajuste en la base de datos, tomate unos minutos para reflexionar la situación.