Documentos de Académico
Documentos de Profesional
Documentos de Cultura
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.
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:
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:
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.
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.
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 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í:
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
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
SELECT *
FROM People
¿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
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:
SELECT *
FROM People
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
SELECT *
FROM People
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
Conclusiones Clave
https://laurent-audibert.developpez.com/Cours-BD/?page=introduction-bases-de-
donnees#L1-1-2
https://openclassrooms.com/en/courses/2071486-retrieve-data-using-sql/
5759027-execute-queries-with-select-from-and-where-clauses
https://www.w3schools.com/sql/default.asp
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