Hace mucho tiempo, cuando los dinosaurios eran enormes... bueno, en realidad en 1970, un tipo llamado Edgar Codd decidió que el caos en los datos ya no era un desorden creativo, sino más bien un agujero negro que se tragaba tiempo y recursos. Edgar le dio muchas vueltas y se inventó una forma de poner orden en todo, y de paso — sentó las bases de un mundo entero donde los datos se organizan en tablas ordenaditas, como libros en la estantería de una biblioteca perfecta. Filas, columnas, orden — y nada de "ya está bien así" o "bueno, se entiende igual".
El modelo relacional se basa en representar los datos en forma de tablas, donde cada tabla está compuesta por filas y columnas. Es bastante intuitivo: las filas son registros, las columnas son propiedades o atributos del registro. Este enfoque facilita el procesamiento y la manipulación de los datos.
Imagina que haces un pedido en una tienda online. Para que ese pedido se procese y entregue correctamente, el sistema tiene que tener en cuenta un montón de detalles: quién eres (el comprador), qué servicio de entrega elegiste, a dónde enviar el pedido y cómo rastrear el estado del paquete.
Si toda esa información estuviera guardada en una sola tabla gigante, sería un caos: los datos se duplicarían, sería difícil actualizarlos y aún más complicado encontrar rápidamente la información que necesitas. El enfoque relacional ayuda a poner orden, dividiendo la información entre tablas que pueden intercambiar datos entre sí.
En este esquema puedes ver un ejemplo de cómo se organizan los datos para el proceso de seguimiento de entregas:
- Clientes - aquí se guarda la info de cada cliente – con un Número de Cliente único.
- Servicios de entrega - esta tabla contiene la lista de servicios que pueden hacer entregas, con su Número de Servicio único.
- Entrega de pedido - esta es la tabla central, la que conecta todo. Cada fila aquí es una entrega concreta. Tiene su propio Número de Entrega, y además referencia al cliente, al servicio de entrega, puede referenciar al pedido concreto, la fecha y el estado actual.
Las flechas muestran cómo los registros de la tabla Entrega de pedido están relacionados con los registros de las tablas Clientes y Servicios de entrega.
Ejemplo de tabla Entrega de pedido:
| Número de Entrega | Número de Cliente | Número de Servicio | Número de Pedido | Fecha de creación | Estado de entrega |
|---|---|---|---|---|---|
| 121 | 101 | 1 | 1569 | 2025-03-23 | Entregado |
| 122 | 234 | 3 | 1570 | 2025-03-24 | Entregado |
| 123 | 1011 | 2 | 1571 | 2025-03-25 | Activo |
| 124 | 1011 | 2 | 1572 | 2025-03-25 | Pendiente |
Ventajas de este enfoque:
- La información sobre clientes o servicios de entrega se guarda una sola vez, así se evitan repeticiones en cada registro de entrega.
- Las relaciones a través de números únicos (también llamados claves) ayudan a garantizar que no habrá, por ejemplo, entregas sin un cliente existente o usando un servicio que no existe.
- Es fácil combinar datos de diferentes tablas para obtener informes complejos o selecciones concretas.
- Si cambias un dato, lo haces en un solo sitio y se actualiza para todas las operaciones relacionadas (por ejemplo, el teléfono del servicio de entrega).
Estructura de una base de datos relacional
El núcleo de una base de datos relacional son las tablas. Cada tabla tiene:
- Nombre (Table Name) para poder identificarla — por ejemplo, customers.
- Conjunto de columnas (Columns/Attributes), que definen las propiedades del objeto.
- Al nombrar columnas que sirven como números únicos (claves primarias), solemos usar el patrón
nombre_id. El sufijo_idaquí significa "identificador". Ejemplo:Número de Clientese convierte encustomer_id. - Por ejemplo, para la tabla customers: pueden ser
customer_id,first_name,email, etc.
- Al nombrar columnas que sirven como números únicos (claves primarias), solemos usar el patrón
- Datos en filas (Rows/Records) - una fila en la tabla customers: contendrá toda la info sobre un cliente concreto (101, Alex Song, etc.).
Veamos un ejemplo de tabla — customers:
| customer_id | full_name | phone_number | delivery_address | registration_date | |
|---|---|---|---|---|---|
| 101 | Alex Song | alex.song@example.com | 555-0101 | 123 Main St, Anytown | 2023-01-15 |
| 234 | Maria Garcia | maria.g@example.org | 555-0102 | 456 Oak Ave, Otherville | 2022-11-30 |
| 1011 | David Lee | david.lee@example.net | 555-0103 | 789 Pine Ln, Sometown | 2023-03-01 |
Claves de las tablas
Para identificar de forma única cada fila en una tabla, se usa la clave primaria (Primary Key, PK). Es una columna (o varias) cuyos valores son únicos para cada fila y no pueden estar vacíos. Piensa en ella como el número único de cada registro, por ejemplo, customer_id en nuestra tabla customers: identifica sin dudas a cada cliente.
La clave primaria es como un pasaporte, o mejor dicho, como su número: es única para cada objeto. Y ayuda a evitar problemas con filas que tienen el mismo nombre.
Para establecer relaciones entre tablas se usa la clave foránea (Foreign Key, FK). Es una columna en una tabla que referencia la clave primaria de otra tabla. Las claves foráneas son "puentes" entre tablas. Muchas veces el nombre de la columna de la clave foránea coincide con el nombre de la clave primaria a la que apunta. Por ejemplo, en la tabla deliveries la columna customer_id será una clave foránea, guardando valores de la columna customer_id de la tabla customers, así conectando la entrega con el cliente.
Este es el esquema que ya conocemos, pero ahora está presentado de forma más realista.
- La tabla customers contiene información sobre los clientes; su clave primaria es
customer_id. - La tabla delivery_services guarda datos sobre los servicios de entrega; su clave primaria es
service_id. - La tabla orders (se muestra para completar, ya que tiene la referencia
order_iddesde la tabla de entregas) está pensada para la información sobre pedidos, con la clave primariaorder_id. - La tabla deliveries es la central para el seguimiento de las operaciones de entrega. Tiene:
- Su propia clave primaria:
delivery_id. - Tres claves foráneas para establecer relaciones:
customer_id(FK): conecta la entrega con un cliente concreto de la tabla customers.service_id(FK): conecta la entrega con el servicio elegido de la tabla delivery_services.order_id(FK): conecta la entrega con el pedido correspondiente de la tabla orders.
- El campo
created_dateindica la fecha y hora de creación del registro de entrega.
- Su propia clave primaria:
Este uso de claves primarias y foráneas garantiza la integridad de los datos. El sistema no permitirá crear un registro de entrega si el customer_id o order_id indicado no existe en las tablas correspondientes y permite extraer información relacionada de forma flexible.
Ventajas del modelo relacional
El modelo relacional tiene varias ventajas importantes que lo hacen líder frente a otros enfoques:
- Estructura sencilla. Las tablas con columnas y filas son fáciles de entender y usar.
- Flexibilidad para trabajar con los datos. Puedes añadir o modificar datos fácilmente sin romper la integridad.
- Soporte para consultas complejas. Con SQL puedes sacar datos de muchas tablas, combinarlos, filtrarlos y hacer prácticamente todo lo que tu tarea necesite. Por ejemplo, encontrar todos los estudiantes inscritos en un curso concreto — ¡fácil!
- Integridad de datos mediante claves. El uso de claves primarias y foráneas garantiza que los datos en la base sean coherentes. No puedes, por ejemplo, añadir un registro de estudiante en un curso si ese curso no existe.
El modelo relacional de datos es la base de las bases de datos modernas. Es sencillo, potente y perfecto para guardar datos estructurados. Como dijo Edgar Codd: "¡Organízate o muere!" (bueno, lo dijo de otra forma, pero la idea era esa...). En la próxima lección veremos en qué se diferencia el modelo relacional de otros tipos de bases de datos (por ejemplo, NoSQL) y cuándo conviene usar cada uno.
GO TO FULL VERSION