Generación de Slugs SEO-Friendly en MySQL
Clase 5 de 19 • Curso de SQL y MySQL
Resumen
La generación de columnas en MySQL es una herramienta poderosa que permite transformar y manipular datos de manera eficiente. Estas columnas pueden ser virtuales o almacenadas, dependiendo de nuestras necesidades específicas. Dominar esta funcionalidad nos permite crear bases de datos más inteligentes y optimizadas para aplicaciones web modernas.
¿Cómo crear slugs SEO-friendly con MySQL?
Cuando desarrollamos aplicaciones web, frecuentemente necesitamos crear URLs amigables para el SEO. Estas URLs, conocidas como "slugs", suelen derivarse del título o nombre de un producto, artículo o recurso. En lugar de utilizar un lenguaje de programación externo para generar estos slugs, podemos aprovechar las funciones de MySQL para crearlos directamente en nuestra base de datos.
Observemos nuestra tabla de productos:
SELECT name, slug FROM products LIMIT 10;
El slug almacenado en la tabla convierte espacios en guiones, cambia mayúsculas a minúsculas y elimina caracteres especiales. Por ejemplo, "Heavy Duty Steel Computer" se convierte en "heavy-duty-steel-computer".
¿Cómo transformar texto con funciones de MySQL?
Para generar nuestro propio slug, necesitamos aplicar varias transformaciones al texto:
- Convertir a minúsculas: Utilizamos la función
LOWER()
SELECT name, LOWER(name) AS generated FROM products LIMIT 10;
- Reemplazar espacios por guiones: Podemos usar expresiones regulares con
REGEXP_REPLACE()
SELECT name, REGEXP_REPLACE(LOWER(name), ' ', '-') AS generated FROM products LIMIT 10;
- Eliminar caracteres especiales: Reemplazamos todo lo que no sea alfanumérico en inglés
SELECT name,
REGEXP_REPLACE(
REGEXP_REPLACE(name, '[^a-z[:space:]]', '_'),
'[:space:]', '-'
) AS generated
FROM products LIMIT 10;
Esta expresión regular reemplaza cualquier carácter que no esté entre a-z y no sea un espacio por un guion bajo, y luego reemplaza los espacios por guiones.
¿Columna virtual o almacenada?
Una vez que tenemos nuestra expresión para generar slugs, debemos decidir si implementarla como una columna virtual o almacenada:
- Columna virtual: Se calcula cada vez que se consulta
- Columna almacenada: Se calcula y almacena cuando se inserta o actualiza el registro
Para decidir, debemos considerar la frecuencia de cambio de los datos. En el caso de los slugs, estos solo cambian cuando cambia el nombre del producto, por lo que una columna almacenada es más eficiente:
ALTER TABLE products
ADD COLUMN slug_generated VARCHAR(100)
AS (
LOWER(
REGEXP_REPLACE(
REGEXP_REPLACE(name, '[^a-z[:space:]]', '_'),
'[:space:]', '-'
)
)
) STORED AFTER slug;
Con esta instrucción, creamos una nueva columna que:
- Se genera automáticamente basada en el nombre del producto
- Se almacena físicamente en la tabla
- Se actualiza solo cuando cambia el nombre del producto
Podemos verificar que funciona correctamente actualizando un nombre de producto:
UPDATE products SET name = 'Hola, cómo estás?' WHERE product_id = 9;
SELECT product_id, name, slug, slug_generated FROM products LIMIT 10;
Veremos que slug_generated
se actualiza automáticamente con el valor "hola_como_estas-".
¿Qué otras funciones de manipulación de texto ofrece MySQL?
MySQL proporciona una amplia gama de funciones para manipular texto:
LENGTH()
: Obtiene la longitud de una cadenaSUBSTRING()
: Extrae una parte de una cadenaCONCAT()
: Combina dos o más cadenasTRIM()
: Elimina espacios al inicio y finalREPLACE()
: Reemplaza todas las ocurrencias de una subcadena
La potencia de estas funciones radica en su velocidad de ejecución. Como pudimos observar, procesar 2,358 registros tomó apenas 0.01 segundos, lo que demuestra la eficiencia de MySQL para estas operaciones.
Las columnas generadas nos permiten mantener la consistencia de los datos y evitar cálculos redundantes en nuestra aplicación. Además, al estar integradas en la base de datos, garantizan que todos los clientes que accedan a los datos obtengan los mismos resultados procesados.
El dominio de estas técnicas de manipulación de datos directamente en MySQL puede mejorar significativamente el rendimiento y la mantenibilidad de nuestras aplicaciones. ¿Has utilizado columnas generadas en tus proyectos? Comparte tu experiencia en los comentarios.