Está en la página 1de 13

Una Base de datos Relacional

Primero, vale la pena recordar la definición de base de datos:

Una base de datos es una colección organizada de información con un propósito común.
Independientemente del medio utilizado para recopilar y almacenar datos (papel, archivos,
etc.), cuando los datos se recopilan y almacenan de manera organizada para un propósito
específico, se denomina base de datos.

La gestión y el acceso a una base de datos son proporcionados por un conjunto de


programas que conforman el Sistema de Gestión de Bases de Datos (SGBD) o RDBMS en
inglés (Relational Database Management System). Un SGBD debe permitir la adición,
modificación y búsqueda de datos. La mayoría de los SGBD funcionan en modo
cliente/servidor. El servidor (es decir, la máquina que almacena los datos) recibe solicitudes
de varios clientes, las analiza, las procesa y devuelve los resultados a los clientes.

Los principales objetivos han sido fijados para los SGBD desde sus orígenes, con el fin de
solucionar los problemas mencionados anteriormente:

 Acceso a los datos: El acceso a los datos debe realizarse a través de un lenguaje que
interrogará a la base de datos
 Administración de datos centralizada: todos los datos deben estar centralizados
en un único grupo común para todas las aplicaciones
 No redundancia de datos: Para evitar problemas durante las actualizaciones, cada
dato solo debe estar presente una vez en la base de datos
 Consistencia de datos: los datos están sujetos a una serie de restricciones de
integridad que definen un estado consistente de la base de datos
 Intercambio de datos: Esto es para permitir que varios usuarios accedan a los
mismos datos al mismo tiempo de forma transparente. Si este problema es fácil de
solucionar cuando se trata sólo de consultas, ya no lo es cuando se trata de
modificaciones en un contexto multiusuario. De hecho, es necesario permitir que
dos usuarios (o más) modifiquen o consulten los mismos datos al mismo tiempo
 Seguridad de los datos: Los datos deben poder protegerse contra el acceso no
autorizado
 Resistencia a las fallas: Es necesario poder disponer de un mecanismo de
recuperación de una base en estado saludable.

Además del sistema de gestión, el modelo histórico, y todavía muy utilizado hoy en día
como base de datos operativa, es el llamado modelo relacional. Edgar Frank Codd,
matemático e investigador de IBM a finales de los años 60, es considerado el padre de este
modelo ya que en esa época investigaba nuevos métodos para manejar grandes cantidades
de datos. En 1970 publicó un artículo donde proponía almacenar datos heterogéneos
en tablas, permitiendo establecer relaciones entre ellos.

¡Detengámonos un momento en estas dos nociones que constituyen los fundamentos de este
modelo!
Una Tabla

Los distintos tipos de información de una base de datos estarán organizados en tablas, es
decir, organizados en forma de tablas donde las columnas corresponden a categorías de
información (una columna puede almacenar números de teléfono, otra nombres…) y las
filas a registros, también llamados entradas. A continuación se muestra un ejemplo de una
tabla a la que llamaremos buyers:

La tabla buyers contiene tres columnas para la identificación del comprador, el nombre y
el apellido.

Cada línea corresponde a un y sólo un usuario. Por ejemplo, la primera línea describe al
usuario que tiene el id 1, nombre Paul y apellido Mochkovitch.

Cada fila de una tabla debe poder determinarse de forma única. Es por esto que siempre hay
una o más columnas que desempeñan el papel de identificador único y que permiten hacer
referencia a cada una de las filas de esta tabla, se llama clave primaria (también conocida
como llave primaria o clave principal).

En el ejemplo anterior, la columna id juega precisamente este papel, observa que no hay
dos filas con el mismo id.

¡Recuerda que una tabla no puede tener dos filas con la misma clave primaria!

Si agregamos un nuevo usuario en la tabla, este se agregará al final de la lista. Por ejemplo,
si agregamos un nuevo usuario Arthur Limon, la tabla se verá así:
Nota que la identificación del nuevo usuario se ha convertido en 4. Hay 2 tipos de
identificación para una tabla:

 O es autoincremental y simplemente toma el valor máximo del id de la columna + 1


 O no es incremental y puede ser cualquier columna o conjunto de columnas siempre
que se respete el criterio de unicidad..

Es más común ver identificadores incrementales en las tablas.

Cada tabla puede contener una (que sería el id) o varias columnas. Cada columna tiene su
propio tipo que puede ser diferente de otras columnas. Un tipo es la naturaleza de los datos
que se almacenan. Por ejemplo, distinguiremos entre el tipo para almacenar texto y el tipo
para almacenar números.

Los nombres de los diferentes tipos que te puedes encontrar dependerán del SGBD que
vayas a utilizar, pero su naturaleza sigue siendo la misma. A continuación ponemos los
tipos más clásicos que te encontrarás con el SGBD de Bigquery que usaremos en el resto de
esta formación:

 STRING: Para designar datos de tipo texto


 INTEGER: Para indicar datos de tipo entero
 FLOAT: Para designar datos de tipo decimal
 DATETIME: Para designar datos de tipo fecha
 TIMESTAMP: Para designar datos tipo fecha pero con detalle de horas, minutos,
segundos…

Puedes encontrar todos los tipos posibles


[aquí].(https://cloud.google.com/bigquery/docs/reference/standard-sql/data-types)

¿Te suena desconocida la organización de tablas en filas y columnas? En realidad se parece


a Excel, pero es Excel el que se ha hecho cargo de la organización del modelo relacional y
no al revés. ¡Esta estructura ha inspirado desarrollos futuros y es, hoy, la más natural para
nosotros!
La ventaja de esta estructura es, en particular, que se pueden vincular varias tablas.

Una Relación

Imaginemos que tenemos datos de las compras realizadas por cada uno de estos
compradores en nuestra web. Entonces podríamos imaginarnos agrupar la información en
una única tabla de compras como la que se muestra a continuación:

Ten en cuenta el hecho de que el mismo comprador puede aparecer varias veces sin violar
la regla de unicidad porque es la columna del id de compra la que desempeña el papel de
identificador aquí. Tenemos en esta tabla la unicidad de las compras. Luego 4 columnas
para el nombre y apellido de la persona que realizó la compra así como la fecha de compra
y el producto adquirido.

Entonces, ¿qué no es óptimo en esta tabla? El nombre y apellido de los compradores se


repiten tantas veces como compras hayan realizado. Esto viola el principio de no
redundancia de datos que describimos anteriormente.

Si ahora no definimos una sola tabla sino dos tablas, la tabla de compradores llamada
buyers desde el principio y una nueva tabla de compras llamada purchases :

Tabla buyers
Tabla purchases
En la tabla purchases, tenemos el id único de cada compra en la columna del id de compra.
Pero esta vez, en lugar de tener el nombre y apellido de cada comprador, tenemos su id
único en la columna de identificación del comprador. Existe una correspondencia entre la
columna del id del comprador de la tabla purchases y la columna del id de la tabla buyers.
Así podremos conservar la información de cada comprador una vez sin perder un solo dato.
¡Hemos definido una relación entre las dos tablas purchases y buyers!

El modelo relacional utiliza múltiples tablas unidas entre sí por múltiples relaciones para
garantizar las reglas definidas para un SGBD. Esto es genial, ¿no? No hay pérdida de
información y no hay redundancia. El esquema de una base de datos es el conjunto de
tablas que la componen con sus relaciones.

Existen varios SGBD conocidos y utilizados globalmente:

 mysql
 PostgreSQL
 SQLServer

La mayor parte del tiempo, si no casi siempre, el data warehouse será una base de datos
relacional. ¡Es genial, porque ahora conocemos los principios! Pero ¿cómo podemos
interrogarlo?

El Lenguaje SQL

SGBD no debe confundirse con SQL (Structured Query Language), que significa lenguaje
de consulta estructurado. El primero designa el sistema de gestión de la base de datos
mientras que el segundo designa el lenguaje utilizado para consultar los datos.

A fuerza de crear desarrollos específicos para cada uno de sus programas de gestión, los
SGBD han acabado desarrollando sus propias versiones de SQL, muy similar al SQL
original (SQL estándar).

Por eso no es raro escuchar confusión entre ambos.

Por ejemplo, MySQL es un SGBD basado en el lenguaje SQL. Si observas la lista de los
SGBD más conocidos, notarás que todos tienen SQL en sus nombres, porque de hecho es el
lenguaje detrás de todo. Es la sintaxis básica, estandarizada e independiente de cualquier
base de datos.

SQL es el primer lenguaje comercial que utilizó el modelo relacional de Edgar F. Codd tal
como lo define en su artículo. Luego fue declarado oficialmente el lenguaje estándar para
consultar bases de datos relacionales.

Por lo tanto, para consultar una base de datos, debes escribir una consulta en SQL. Una
consulta es una declaración que contiene una o más cláusulas. Una cláusula es una
operación elemental que dicta una operación a realizar sobre los datos. A continuación,
enumeramos las cláusulas más comunes del lenguaje.

Para escribir nuestras primeras consultas, considera la siguiente tabla única de personas
llamada People:

Tabla People
SELECT FROM
Como su nombre lo indica, esta cláusula se utiliza para seleccionar una o más columnas
(SELECT) de una tabla (FROM). Por ejemplo:

SELECT name

FROM People
Esta consulta seleccionará la columna name de la tabla People y solo esa. Por tanto, el
resultado devolverá una única columna pero con todas las filas. Fíjate que las cláusulas
están en mayúsculas y que nos hemos ido a la línea entre SELECT y FROM. No cambia
nada para SQL, pero son buenos hábitos que se pueden adoptar para que tus consultas sean
fáciles de leer.

Si quisieras devolver no una sino dos columnas, por ejemplo nombre y apellido, habrías
tenido que modificar la consulta anterior así:

SELECT name, surname

FROM People
El resultado devuelto será de hecho dos columnas y todas las filas. El orden de las
columnas de salida viene dado por el orden de escritura en SELECT (aquí será el nombre y
luego el apellido).

Si deseas seleccionar todas las columnas, debes utilizar el símbolo * (asterisco). Verás más
adelante que en informática el símbolo * designa a menudo “todo”.
LIMIT
La cláusula LIMIT se utiliza para controlar el número de filas del resultado. Si por ejemplo
queremos seleccionar todas las columnas pero devolver solamente 3 filas de resultados,
tendremos que escribir la consulta:

SELECT *

FROM People

LIMIT 3
Tabla People y no 3 extraídas al azar.

WHERE
¿Si ahora no queremos ver las primeras X filas pero sí las filas que coinciden con un
criterio determinado? Es decir, si queremos filtrar las filas de nuestra tabla, necesitamos la
cláusula WHERE. Veamos la siguiente consulta de ejemplo:

SELECT *

FROM People

WHERE name = "Paul"


Devolverá todas las columnas (* en la cláusula SELECT) de la tabla People solo para las
filas que cumplan la condición name = “Paul”, es decir, solo las filas que tengan “Paul”
como valor en la columna name. Las “” alrededor de Paul son simplemente para decirle a
SQL que se trata de un valor que es texto. Dado que en la tabla People solo hay una fila
que tiene “Paul” como valor en la columna name, solo habrá una fila en respuesta a esta
consulta, es decir, la primera fila de la tabla.

La condición en WHERE que se usó aquí es la igualdad, pero hay varias otras condiciones
posibles en SQL:
Condiciones SQL
Puedes combinar varios criterios, pero para ello necesitas conocer dos nuevas
cláusulas AND y OR.

AND, OR
El criterio A AND el criterio B son verdaderos sólo si ambos criterios A y B son
verdaderos. Por el contrario, el criterio A OR el criterio B es verdadero si al menos uno de
los dos criterios A o B es verdadero. Considera las siguientes dos consultas como ejemplo:

SELECT *

FROM People

WHERE name = "Paul" AND number_of_children = 0


Esta consulta devolverá todas las columnas de la tabla People de las filas que tienen el
valor “Paul” en la columna name Y que tienen el valor 0 en la columna
number_of_children. Es decir, la primera fila de la tabla. Eso es completamente diferente a
esta consulta:

SELECT *
FROM People

WHERE name = "Paul" OR number_of_children = 0


Esto devolverá todas las filas que tengan “Paul” en la columna name o 0 como valor en la
columna number_of_children. Hablamos de unión en el caso de una cláusula OR y de
intersección en el caso de una cláusula AND. Este último devolverá dos filas, la primera y
la última porque la primera fila tiene “Paul” en el nombre y la última tiene 0 en
number_of_children. Ten en cuenta que la primera fila de la tabla cumplió ambas
condiciones.

¿Qué pasa si tengo una lista de nombres y quiero devolver todas las filas que contienen un
primer nombre? Con lo que has visto hasta ahora, solo tendrías que hacer una condición en
el WHERE con tantas cláusulas OR como nombres tengas en tu lista, lo que nos haría
repetir cosas innecesariamente. Hay una cláusula IN para esto..

IN
La cláusula IN se utiliza para reemplazar una serie de ORs en la condición. Imagina que
quieres devolver las filas cuyos nombres son Paul, Louis o Clara. Podemos escribir la
consulta así:

SELECT *

FROM People

WHERE name IN ( "Paul" , "Louis" , "Clara" )


¡Mucho más sencillo! De manera similar, si queremos devolver todas las filas que tienen
entre 1 y 4 hijos, podemos evitar las cláusulas OR o AND y solo usar la
condición BETWEEN.

BETWEEN
Así que considera la siguiente consulta:

SELECT *

FROM People

WHERE number_of_children

BETWEEN 1 AND 4
Los límites del BETWEEN son inclusivos, es decir, la condición escrita arriba equivale a:

WHERE number_of_children >= 1 AND number_of_children <= 4


Otra cláusula muy utilizada en la condición WHERE es la cláusula LIKE.
LIKE
La cláusula LIKE (o ILIKE dependiendo de algunos SGBD) te permite buscar en el texto
tratando de encontrar resultados que coincidan con el patrón que le proporcionas. Por
ejemplo:

SELECT *

FROM People

WHERE name LIKE 'C%'


Esta consulta devolverá todas las columnas de las filas que tienen un valor en el nombre
que comienza con C. Hay varios formatos en LIKE:

Tienes, con estas primeras cláusulas, una base que te permite consultar cualquier tabla.
Todavía tenemos que ver cómo cambiar los nombres de las columnas de salida en los
resultados para que sea más fácil de entender.

AS
Imaginemos por un momento que el nombre de la columna number_of_children nos parece
demasiado largo y que nos gustaría que los resultados simplemente tuvieran el término
hijos. Tendremos que utilizar lo que se llama un alias con la cláusula AS. Observa la
siguiente consulta que solo devuelve la columna number_of_children:
SELECT number_of_children AS children

FROM People
El AS, aquí, cambiará el nombre de la columna de salida a children pero no cambiará el
nombre de esta columna en la base de datos. ¡Está solo en los resultados de salida! El
concepto de alias parece superfluo pero es indispensable en SQL y se utiliza ampliamente.
Nota importante: ¡no puedes hacer referencia a aliases SELECT en la
condición WHERE de la misma consulta!

Nos queda una última cláusula que ver en esta introducción: la clasificación de resultados.

ORDER BY
La cláusula ORDER BY se utiliza para ordenar los resultados de una consulta según uno o
más criterios. Puedes ordenar una columna en orden ascendente o descendente o combinar
los criterios de clasificación. Tomemos, por ejemplo, la siguiente consulta:

SELECT *

FROM People

ORDER BY number_of_children DESC


Aquí, ordenamos las líneas de salida disminuyendo number_of_children (debido a la
cláusula DESC que le sigue y que significa descender). El problema es que Paul y David
tienen la misma cantidad de hijos y entonces podríamos querer ordenar por apellido
creciente. Modificaremos la consulta de la siguiente manera:

SELECT *

FROM People

ORDER BY number_of_children DESC, surname ASC


Observaciones:

 Ordenar por una columna que contiene texto equivale a ordenar por orden
lexicográfico
 La clasificación se realiza por orden de aparición en la cláusula ORDER BY. Primero
ordenaremos por número de niños de manera descendente y luego por apellido
ascendente
 La cláusula ASC no es necesaria porque, de forma predeterminada, la clasificación
es ascendente.

Una práctica muy común es hacer referencia a las columnas que se utilizarán para ordenar
por su índice de posición en SELECT. A modo de ejemplo, la consulta anterior es
equivalente a esta:

SELECT
name,

surname,

birth_date,

number_of_children

FROM People

ORDER BY 4 DESC, 2 ASC


Los primeros 4 en la cláusula ORDER BY se refieren al nombre de la cuarta columna
en SELECT, es decir, number_of_children. De manera similar, el 2 se refiere a la columna
de apellidos.

¡El orden de las cláusulas es fundamental!


Siempre debes seguir SELECT, FROM, WHERE, ORDER BY. Si cambias este orden,
se generará un error.

Conclusiones Clave

 Para consultar todos nuestros datos corporativos, necesitamos herramientas más


adecuadas para la volumetría que Excel.
 Existen varios SGBD (sistemas de gestión de bases de datos) pero todos comparten,
para el modelo relacional, el lenguaje SQL. Sólo pueden aparecer algunas
variaciones.
 SQL (Structured Query Language) significa Lenguaje de consulta estructurado es
un lenguaje que permite hacer consultas en bases de datos relacionales
 El modelo relacional consta de tablas que se pueden relacionar entre sí
 Una consulta SQL se compone de cláusulas, que son declaraciones unitarias que le
dicen a la base de datos qué hacer con los datos
 La cláusula SELECT FROM se utiliza para recuperar una o más columnas de una
tabla
 La cláusula LIMIT limita el número de filas devueltas al número especificado
 La cláusula WHERE se utiliza para filtrar las filas que se devolverán según una o
más condiciones
 Las cláusulas AND y OR se utilizan para combinar múltiples criterios
 Las cláusulas IN y BETWEEN se utilizan para evitar tener que utilizar
sucesivamente varias cláusulas AND u OR
 La cláusula LIKE se utiliza para buscar patrones en datos textuales
 La cláusula AS te permite cambiar el nombre de una columna en la lista de
resultados después del hecho, pero no afecta los datos de la base de datos
 Finalmente, la cláusula ORDER BY te permite ordenar la lista de resultados según
uno o más criterios
 El orden de las cláusulas en la consulta es fundamental, de lo contrario se
producirán errores. Debe escribirse en este orden: SELECT, FROM, WHERE,
ORDER BY, LIMIT
 El lenguaje SQL no distingue entre mayúsculas y minúsculas, ni espacios/nuevas
líneas, pero te aconsejamos que marques tus cláusulas en mayúsculas para
distinguirlas y que vayas a la línea en cada cambio de cláusula.

Si deseas obtener más información sobre bases de datos relacionales y


SQL:

Sitio web sobre introducción a las bases de datos:

https://laurent-audibert.developpez.com/Cours-BD/?page=introduction-bases-de-
donnees#L1-1-2

Sitio web sobre la introducción al lenguaje SQL:

https://openclassrooms.com/en/courses/2071486-retrieve-data-using-sql/
5759027-execute-queries-with-select-from-and-where-clauses

Curso online sobre SQL, primeros capítulos:

https://www.w3schools.com/sql/default.asp

Artículo histórico de Codd sobre el modelo relacional:

Codd, Edgar F. (June 1970). “A Relational Model of Data for Large Shared Data
Banks”. Communications of the ACM. 13 (6): 377–87. CiteSeerX 10.1.1.88.646.
doi:10.1145/362384.362685

También podría gustarte