Bases de datos relacionales
Una base de datos es el lugar donde las aplicaciones web guardan su información para que no se pierda al apagar el servidor. Piensa en ella como una hoja de cálculo, pero mucho más inteligente, rápida y con la capacidad de relacionar diferentes hojas entre sí. Esto nos permite hacer preguntas complejas sobre los datos de forma muy eficiente.
La tabla: la unidad básica
En una base de datos relacional, la información se organiza en tablas. Cada tabla guarda datos sobre una sola entidad o concepto, como usuarios, productos o pedidos.
Una tabla está formada por columnas (los campos o propiedades) y filas (los registros individuales). Cada columna define qué tipo de información se guarda, mientras que cada fila representa un elemento específico.
Mira este ejemplo con una tabla de usuarios y otra de pedidos:
Tabla Usuario
| ID | Nombre | |
|---|---|---|
| 1 | Ana | ana@correo.com |
| 2 | Luis | luis@correo.com |
Tabla Pedido
| ID | Producto | Total | Usuario_ID |
|---|---|---|---|
| 100 | Teclado | 45.0 | 1 |
| 101 | Ratón | 20.0 | 1 |
| 102 | Monitor | 150.0 | 2 |
La llave principal y la llave foránea
Para que las tablas puedan relacionarse sin confusiones, necesitamos una forma de identificar cada fila de manera única. Aquí es donde entran las llaves.
La llave principal (Primary Key o PK) es un valor único que identifica a un registro dentro de su propia tabla. No pueden existir dos filas con la misma llave principal.
La llave foránea (Foreign Key o FK) es una columna en una tabla que hace referencia a la llave principal de otra tabla. Es el puente que conecta los datos.
Imagina que la llave principal es como tu número de pasaporte: es único en el mundo y te identifica a ti. La llave foránea es como escribir tu número de pasaporte en un formulario de hotel: el hotel usa ese número para referirse a ti sin tener que copiar todos tus datos personales.
En nuestro ejemplo, Ana tiene el ID 1 en la tabla de usuarios (su llave principal). En la tabla de pedidos, vemos que Ana hizo los pedidos 100 y 101, porque ambos tienen un 1 en la columna Usuario_ID (la llave foránea).
Diagramas de entidad-relación (ER)
Para visualizar cómo se conectan nuestras tablas, usamos diagramas. Observa esta relación entre Usuario y Pedido:
En este diagrama, los símbolos en la línea que conecta las tablas nos cuentan la historia de su relación:
- El símbolo
||junto a Usuario significa "exactamente uno". - El símbolo
o{junto a Pedido significa "cero o muchos". - Toda la conexión
||--o{se lee como: "un Usuario puede realizar cero o muchos Pedidos, pero cada Pedido pertenece a exactamente un Usuario".
Tipos de relaciones
Dependiendo de cómo interactúan las entidades en la vida real, las relaciones pueden ser de tres tipos:
Relación 1:1 (Uno a uno)
Ocurre cuando un registro de la Tabla A se relaciona con un solo registro de la Tabla B, y viceversa. Un ejemplo clásico es una persona y su documento de identidad nacional. Una persona tiene un solo documento, y un documento pertenece a una sola persona.
Relación 1:N (Uno a muchos)
Es la más común. Un registro de la Tabla A puede estar asociado a varios de la Tabla B, pero los de la B solo pertenecen a uno de la A. Como un autor que escribe varios libros, pero cada libro (en este escenario simple) tiene un solo autor.
Relación N:M (Muchos a muchos)
Ocurre cuando muchos registros de la Tabla A se relacionan con muchos de la Tabla B. Piensa en estudiantes y cursos: un estudiante toma varios cursos, y un curso tiene varios estudiantes.
Para lograr esto en una base de datos relacional, siempre necesitamos crear una tercera tabla en medio, conocida como tabla puente o intermedia. Esta nueva tabla guarda las conexiones combinando las llaves principales de ambas tablas.
¿Qué tipos de datos puede guardar una columna?
Cada columna debe definir estrictamente qué tipo de información va a almacenar. Esto ayuda a mantener el orden y evitar errores. Estos son los tipos más comunes:
- INT (Entero): Números sin decimales. Perfecto para edades, cantidades o identificadores.
- VARCHAR (Texto variable): Cadenas de texto cortas. Útil para nombres, apellidos o correos electrónicos.
- TEXT (Texto largo): Para guardar grandes cantidades de texto, como el contenido de un artículo de blog o comentarios.
- DATE (Fecha): Almacena fechas. Ideal para la fecha de nacimiento o cuándo se hizo una compra.
- BOOLEAN (Booleano): Solo acepta verdadero o falso. Sirve para saber si un usuario está activo, o si un pedido ya fue enviado.
- FLOAT o DECIMAL (Decimales): Números con fracciones. Indispensable para precios de productos o medidas.
¿Quién administra todo esto? Los RDBMS
Las bases de datos relacionales son gestionadas por programas especializados llamados Sistemas de Gestión de Bases de Datos Relacionales (RDBMS, por sus siglas en inglés).
Existen varias opciones populares en el mercado. Por ejemplo, MySQL es muy común en la web, y SQLite es excelente para aplicaciones móviles o proyectos pequeños porque guarda todo en un solo archivo.
En este curso utilizaremos PostgreSQL. Es un sistema robusto, de código abierto y altamente respetado en la industria por su confiabilidad y características avanzadas.