¿Qué es una base de datos relacional?
Una base de datos relacional es un sistema que organiza la información en tablas, y que establece las relaciones entre esas tablas mediante claves. Es el modelo más usado del mundo, y detrás de casi cualquier sistema que maneje datos —desde el listado de alumnos de una escuela hasta la cuenta de un banco— hay una base de datos relacional.
Su idea central es simple y poderosa: cada tabla guarda datos de una sola cosa, y las tablas se conectan entre sí por referencias en lugar de repetir la información. En lugar de anotar en cada venta el nombre y el teléfono del cliente, se anota un número que apunta a la tabla de clientes, donde ese dato vive una sola vez.
Esa forma de organizar la información tiene un nombre: se dice que los datos están normalizados. Es la base de todo lo que sigue, y tiene su propio tema.
Tablas, filas y columnas
La tabla es la estructura básica del modelo relacional, y se parece bastante a una planilla de cálculo. Tiene dos dimensiones y un nombre único dentro de la base de datos:
- Las columnas —o campos— son los atributos: describen qué se guarda. Cada una tiene un nombre y un tipo de dato.
- Las filas —o registros— son los elementos: cada fila es uno de los elementos de los que habla la tabla.
- Las celdas son las intersecciones: contienen un valor concreto, de una fila y una columna.
| Tabla: CLIENTES | NOMBRE | TELEFONO | CIUDAD |
|---|---|---|---|
| 1 | Ana Gómez | 555-1234 | La Plata |
| 2 | Luis Pérez | 555-9876 | Berisso |
| 3 | María Sosa | 555-4321 | Ensenada |
En esa tabla hay tres columnas (además del identificador) y tres filas. Cada fila es un cliente; cada columna, un dato de todos los clientes. La estructura no cambia cuando se agregan filas: siempre son las mismas columnas, y eso es justamente lo que permite consultarlas de forma ordenada.
Las claves: cómo se relacionan las tablas
Si cada tabla guarda datos de una sola cosa, hace falta un mecanismo que las conecte. Ese mecanismo son las claves, y hay dos que hay que distinguir bien.
Clave primaria
La clave primaria es el campo que identifica de manera única cada fila de la tabla. Es lo que permite decir "este cliente" sin ambigüedad.
Sus dos condiciones no se negocian: no se puede repetir y no puede quedar vacía. Si se pudiera repetir, dos filas distintas serían indistinguibles; si pudiera estar vacía, habría filas imposibles de identificar.
Puede ser un número que el sistema genera solo —lo más común— o un dato que ya existe en la realidad, como el número de documento. En general conviene el número generado: los datos reales cambian, se cargan con errores de tipeo o llegan incompletos.
Clave foránea
La clave foránea es un campo que hace referencia a la clave primaria de otra tabla. Es lo que convierte dos tablas sueltas en un sistema relacionado.
| Tabla: PRESTAMOS | LIBRO (foránea) | CLIENTE (foránea) | FECHA |
|---|---|---|---|
| 1 | 101 | 2 | 3/3 |
| 2 | 101 | 3 | 4/3 |
En esa tabla, LIBRO y CLIENTE no guardan nombres: guardan números que apuntan a la tabla de libros y a la de clientes. De ese modo, el nombre del libro está escrito una sola vez, en su propia tabla. Y si el libro se llamaba mal, se corrige en un solo lugar.
Integridad referencial
La integridad referencial es la garantía de que toda referencia apunta a algo que existe. Dicho de otra forma: no puede haber un préstamo que mencione el libro 999 si ese libro no está en la tabla de libros.
No es una recomendación: es una regla que el gestor hace cumplir. Si se intenta guardar una fila que apunta a un valor inexistente, la operación se rechaza con un error.
Qué protege
- Al cargar. Impide escribir una referencia a algo que no existe. Si el cliente 7 no está cargado, no se le puede asignar un préstamo.
- Al borrar. Si se intenta borrar un cliente que tiene préstamos, el gestor lo impide —o exige decidir qué hacer con esos préstamos— en lugar de dejar registros apuntando al vacío.
El lenguaje SQL
Las bases de datos relacionales se manejan con SQL (Structured Query Language, "lenguaje de consulta estructurado"). Es un lenguaje que se escribe con frases parecidas al inglés, y sus instrucciones se agrupan en cuatro familias según lo que hacen.
| Familia | Para qué | Instrucciones |
|---|---|---|
| Definición (DDL) | Crear y modificar la estructura: tablas, campos, claves. | CREATE, ALTER, DROP |
| Manipulación (DML) | Trabajar con los datos: consultar, insertar, modificar y borrar. | SELECT, INSERT, UPDATE, DELETE |
| Control (DCL) | Administrar quién puede hacer qué. | GRANT, REVOKE |
| Transacciones (TCL) | Agrupar operaciones para que se apliquen todas juntas o ninguna. | COMMIT, ROLLBACK |
Una consulta típica se lee casi como una frase: "traeme el nombre y el teléfono de los clientes que viven en La Plata, ordenados por nombre".
SELECT nombre, telefono
FROM clientes
WHERE ciudad = 'La Plata'
ORDER BY nombre;
Normalización y transacciones
Dentro de las bases de datos relacionales hay dos conceptos del programa que tienen su propia página, porque cada uno es largo y se apoya en lo que se vio acá.
| Tema | Qué se ve |
|---|---|
| Normalización y redundancia | Por qué no conviene repetir datos, las tres anomalías que eso provoca, y las formas normales 1FN, 2FN y 3FN con un ejemplo completo. |
| Transacciones | Qué es una transacción, las propiedades ACID, y por qué dos operaciones simultáneas pueden dejar la base de datos mal. |
Resumen
| Concepto | La idea que hay que recordar |
|---|---|
| Base de datos relacional | Organiza la información en tablas relacionadas por claves. |
| Tabla | Guarda datos de una sola cosa: columnas (atributos) y filas (elementos). |
| Clave primaria | Identifica cada fila. No se repite y no puede estar vacía. |
| Clave foránea | Apunta a la clave primaria de otra tabla. Así se relacionan. |
| Integridad referencial | Toda referencia tiene que apuntar a algo que existe. |
| SQL | El lenguaje de las bases relacionales: definición, manipulación, control y transacciones. |
| Normalización | Evitar la redundancia: cada dato en un solo lugar. Tiene página propia. |
| Transacción | Operaciones que se aplican todas juntas o ninguna. Tiene página propia. |