Blog de Gonzalo

COLUMNAS DINÁMICAS EN MYSQL

Las columnas dinámicas en mysql permiten almacenar diferentes conjuntos de columnas para cada fila en una tabla .Funciona almacenando un conjunto de columnas en un tipo de dato blob y teniendo un pequeño conjunto de funciones para manipularlo. Las columnas dinámicas deben utilizarse cuando no es posible utilizar columnas normales. Un claro ejemplo de uso es cuando se necesitan almacenar artículos que pueden tener muchos atributos diferentes (como el tamaño,el color,el peso,etc.),y el conjunto de posibles atributos es muy grande o se desconoce de antemano. En ese caso estos datos se pueden guardar en columnas dinámicas.
Para crear las tablas dinámicas se hace de la siguiente manera:


create table articulos (
  nombre_articulo varchar(32) primary key,
  columnas_dinamicas  blob 
);
El campo que contendrá las columnas dinámicas en nuestra tabla es de tipo blob.
Para insertar datos se hace de la siguiente manera:

INSERT INTO articulos VALUES 
  ('Camiseta', COLUMN_CREATE('color', 'azul', 'talla', 'XL'));
INSERT INTO articulos VALUES
  ('Pantalon', COLUMN_CREATE('color', 'negro', 'precio', 40));
En el ejemplo anterior se puede ver que se han introducido dos valores, usando la función COLUMN_CREATE, con distintas columnas. Ahora si se quiere buscar por alguna de las columnas se hace de la siguiente manera:

SELECT nombre_articulo, COLUMN_GET(columnas_dinamicas, 'color' as char) 
  AS color FROM articulos;
Como se puede ver dentro de la función COLUMN_GET se introduce el nombre que le pusimos al campo que contendrá las columnas dinámicas en nuestra tabla de nuestro ejemplo es "columnas_dinamicas".
También es posible añadir y borrar columnas dinámicas según las necesidades del proyecto:

//Se borra la columna dinámica 'precio'
UPDATE articulos SET columnas_dinamicas=COLUMN_DELETE(columnas_dinamicas, "precio");

//Se borra la columna dinámica 'precio' con condición
UPDATE articulos SET columnas_dinamicas=COLUMN_DELETE(columnas_dinamicas, "precio")
WHERE COLUMN_GET(columnas_dinamicas, 'color' as char)='negro'; 

//Se añade la columna dinámica 'garantia'
UPDATE articulos SET columnas_dinamicas=COLUMN_ADD(columnas_dinamicas, 'garantia', '1 año');

Funciones de las columnas dinámicas

  • COLUMN_CREATE: Devuelve un blob de columnas dinámicas que almacena las columnas especificadas con valores.
  • COLUMN_ADD: Añade o actualiza columnas dinámicas.
  • COLUMN_GET: Obtiene el valor de una columna dinámica por su nombre. Si no existe ninguna columna dinámica con el nombre dado devolverá NULL.
  • COLUMN_DELETE: Elimina una columna dinámica con el nombre especificado.Se pueden dar varios nombres. El valor de retorno es un blob de columna dinámico después de la modificación.
  • COLUMN_EXISTS: Comprueba si una columna con el nombre especificado existe. Si existe devuelve 1 y sino devuelva 1.
  • COLUMN_LIST: Devuelve una lista de nombres de las dinámicas columnas separadas por comas.
  • COLUMN_CHECK: Compruebe si el blob que contiene los datos es un blob de columnas dinámicas empaquetadas válido. El valor de retorno de 1 significa que el blob es válido y si devuelve 0 es que el formato es inváido.
  • COLUMN_JSON: Devuelve una representación JSON de las columnas dinámicas y sus valores

Compartir en twitter