0% encontró este documento útil (0 votos)
7 vistas8 páginas

Los 4 Pilares: Sentencias DML (Data Manipulation Language)

SQL es el lenguaje fundamental para interactuar con bases de datos, y su comprensión es crucial para desarrolladores que utilizan Laravel. El documento detalla los pilares de SQL, incluyendo sentencias DML, relaciones mediante JOINs, agregaciones, índices, y transacciones, así como la comparación entre SQL y Eloquent en Laravel. También se abordan buenas prácticas y optimizaciones para mejorar el rendimiento de las consultas y la estructura de la base de datos.
Derechos de autor
© All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
7 vistas8 páginas

Los 4 Pilares: Sentencias DML (Data Manipulation Language)

SQL es el lenguaje fundamental para interactuar con bases de datos, y su comprensión es crucial para desarrolladores que utilizan Laravel. El documento detalla los pilares de SQL, incluyendo sentencias DML, relaciones mediante JOINs, agregaciones, índices, y transacciones, así como la comparación entre SQL y Eloquent en Laravel. También se abordan buenas prácticas y optimizaciones para mejorar el rendimiento de las consultas y la estructura de la base de datos.
Derechos de autor
© All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

SQL (Structured Query Language) es el lenguaje universal para hablar con las bases

de datos. Si Laravel es el motor y React es la carrocería, SQL es el almacén donde se


guarda absolutamente todo de forma estructurada.

Para un desarrollador que trabaja con Laravel, entender SQL es vital porque, aunque
uses Eloquent (el ORM), habrá momentos donde necesites optimizar consultas
pesadas o entender qué está pasando "bajo el capó".

1. Los 4 Pilares: Sentencias DML (Data Manipulation


Language)
Casi todo lo que harás en SQL se resume en el acrónimo CRUD:

CREATE (INSERT): Para añadir registros.​


SQL​
INSERT INTO usuarios (nombre, email, created_at)
VALUES ('Christian', 'correo@[Link]', NOW());
●​

READ (SELECT): Para consultar datos.​


SQL​
SELECT nombre, email FROM usuarios WHERE id = 5;
●​

UPDATE: Para modificar información existente.​


SQL​
UPDATE usuarios SET nombre = 'Christian H.' WHERE id = 5;
●​

DELETE: Para borrar registros.​


SQL​
DELETE FROM usuarios WHERE id = 5;
●​

2. Relaciones: El Poder de los JOINs


En las bases de datos relacionales (como MySQL o PostgreSQL), la información se
divide en tablas para evitar redundancia. Los JOINs sirven para volver a unir esa
información en una consulta.

●​ INNER JOIN: Trae solo los registros que tienen coincidencia en ambas tablas.
(Ej: Usuarios que tienen al menos un post).
●​ LEFT JOIN: Trae todos los registros de la tabla izquierda, aunque no tengan
coincidencia en la derecha. (Ej: Todos los usuarios, tengan o no tengan posts).

SQL
SELECT [Link], [Link]
FROM users
INNER JOIN posts ON [Link] = posts.user_id;

3. Agregaciones y Agrupamiento
SQL no solo entrega datos, también sabe calcular. Esto es fundamental para reportes o
estadísticas:

●​ COUNT(): Cuenta registros.


●​ SUM(): Suma valores.
●​ AVG(): Saca el promedio.
●​ GROUP BY: Agrupa los resultados por una columna (ej: cuántos usuarios hay
por cada país).

SQL
SELECT pais, COUNT(*) as total_usuarios
FROM usuarios
GROUP BY pais
HAVING total_usuarios > 10;

4. Índices: La Clave del Rendimiento


Cuando una tabla tiene millones de registros, buscar un dato puede tardar segundos
(una eternidad en web). Los índices son como el índice de un libro: permiten a la base
de datos encontrar la información sin leer toda la tabla.

Nota Pro: En Laravel, cuando creas una migración, siempre deberías


añadir ->index() a las columnas que uses frecuentemente en los filtros
where.

5. Transacciones: Todo o Nada


Imagina que estás transfiriendo dinero: le restas 100 a la cuenta A y le sumas 100 a la
cuenta B. Si el sistema falla justo a la mitad, el dinero desaparece.

Las transacciones aseguran que un grupo de operaciones se ejecute por completo. Si


algo falla, se hace un ROLLBACK (se vuelve al estado inicial); si todo sale bien, se
hace un COMMIT.

6. SQL vs. Eloquent (Laravel)


Es importante saber traducir lo que hace Laravel a SQL puro para depurar:

Acción Eloquent (Laravel) SQL Puro

Buscar por User::find(1); SELECT * FROM users WHERE id = 1;


ID

Filtrar User::where('active', SELECT * FROM users WHERE active =


1)->get(); 1;

Contar User::count(); SELECT COUNT(*) FROM users;


Ordenar User::latest()->get(); SELECT * FROM users ORDER BY
created_at DESC;

7. Buenas Prácticas
1.​ Nunca uses SELECT * en producción: Pide solo las columnas que necesitas
para ahorrar memoria.
2.​ Cuidado con el borrado: Antes de ejecutar un DELETE, corre la misma
consulta con un SELECT para estar seguro de qué vas a borrar.
3.​ Normalización: No guardes todo en una sola tabla gigante. Divide la
información lógicamente (Usuarios, Roles, Permisos, Logs).

Para que tu proyecto de pasantía sea un éxito, vamos a aterrizar cómo llevar una
consulta de SQL puro a Laravel y, lo más importante, cómo optimizar esa base de
datos para que soporte el flujo de trabajo real en una empresa.

1. De SQL a Laravel: El problema de las consultas N+1


Este es el error más común que vuelve lentas las aplicaciones. Imagina que quieres
mostrar una lista de proyectos y el nombre del cliente de cada uno.

El error (SQL ineficiente):

Si haces esto en Laravel:

PHP
$proyectos = Proyecto::all(); // Genera 1 consulta: SELECT * FROM proyectos;

foreach ($proyectos as $proyecto) {


echo $proyecto->cliente->nombre; // Genera 1 consulta extra por CADA proyecto.
}

Si tienes 100 proyectos, harás 101 consultas a la base de datos.


La solución (Eager Loading):

En SQL, esto se soluciona con un JOIN. En Laravel, usamos el método with():

PHP
$proyectos = Proyecto::with('cliente')->get();

Esto reduce todo a solo 2 consultas, sin importar si tienes 10 o 10,000 registros.

2. Optimizando la Estructura (Base de Datos)


En un entorno profesional como el que estás ahora, la base de datos debe ser rápida y
segura. Aquí tienes tres claves:

A. Uso de Índices (Indexes)

Si vas a buscar registros por un código de empleado o un número de ticket


frecuentemente, ese campo debe tener un índice. Sin él, el motor de SQL tiene que
leer toda la tabla (Table Scan).

En tu migración de Laravel:

PHP
$table->string('codigo_proyecto')->unique()->index();

B. Tipos de Datos Correctos

No uses text para todo.

●​ Si es una descripción corta: string (VARCHAR).


●​ Si es un estado (activo/inactivo): boolean.
●​ Si es un precio o moneda: decimal(10,2) (nunca uses float para dinero, ya
que pierde precisión).

C. Soft Deletes (Borrados Lógicos)


En proyectos empresariales, nunca se borra nada realmente. Si un usuario borra un
proyecto por error, querrás recuperarlo. Laravel ofrece SoftDeletes. Solo añade la
columna deleted_at y el sistema ocultará los registros automáticamente, pero
seguirán en la base de datos.

3. Consultas Complejas: Query Builder vs Eloquent


A veces, Eloquent se queda corto para reportes muy complejos. Ahí es cuando usas el
Query Builder o Raw Expressions.

Ejemplo: Contar proyectos por estado y solo de este año.

PHP
use Illuminate\Support\Facades\DB;

$reporte = DB::table('proyectos')
->select('estado', DB::raw('count(*) as total'))
->whereYear('created_at', date('Y'))
->groupBy('estado')
->get();

4. Ejercicio Práctico: El buscador de proyectos


Imagina que quieres un buscador en tu frontend de React que filtre por nombre del
proyecto o nombre del cliente.

En el controlador de Laravel:

PHP
public function index(Request $request)
{
$query = $request->input('buscar');
$resultados = Proyecto::with('cliente')
->when($query, function ($q) use ($query) {
$q->where('nombre', 'LIKE', "%{$query}%")
->orWhereHas('cliente', function ($qClient) use ($query) {
$qClient->where('nombre', 'LIKE', "%{$query}%");
});
})
->paginate(10); // Siempre usa paginación para no saturar el navegador

return inertia('Proyectos/Index', [
'proyectos' => $resultados
]);
}

5. Tips de Rendimiento Finales


DB Transactions: Si vas a guardar datos en dos tablas al mismo tiempo (ej: crear un
usuario y asignarle un rol), envuélvelo en una transacción:​
PHP​
DB::transaction(function () {
// Operación 1
// Operación 2
});

1.​
2.​ Explain en SQL: Si una consulta es lenta, córrela en tu gestor de base de datos
(HeidiSQL, DBeaver, etc.) anteponiendo la palabra EXPLAIN. Te dirá
exactamente dónde está el cuello de botella.
3.​ Paginación: Nunca envíes miles de registros a React. Usa
$query->paginate(20). Tu frontend te lo agradecerá.

También podría gustarte