sql >> Base de Datos >  >> RDS >> SQLite

¿Qué es una columna generada?

Algunos sistemas de gestión de bases de datos (DBMS) incluyen una función denominada columnas generadas.

También conocidas como "columnas calculadas", las columnas generadas son similares a una columna normal, excepto que el valor de una columna generada se deriva de una expresión que calcula valores de otras columnas.

En otras palabras, el valor de una columna generada se calcula a partir de otras columnas.

Ejemplo

Aquí hay un ejemplo básico para demostrar cómo funcionan las columnas generadas.

CREATE TABLE Products( 
    Id INTEGER PRIMARY KEY, 
    Name TEXT,
    Qty INT,
    Price INT,
    TotalValue INT GENERATED ALWAYS AS (Qty * Price)
);

Este ejemplo se creó en SQLite y usa la sintaxis de SQLite para crear una columna generada. Esta sintaxis usa el GENERATED ALWAYS restricción de columna.

El GENERATED ALWAYS la parte es opcional en SQLite, por lo que podría usar AS .

En realidad, el GENERATED ALWAYS La parte también es opcional en MySQL, y ni siquiera está definida en TSQL (la extensión SQL para SQL Server), por lo que AS la palabra clave es todo lo que necesita (junto con la expresión real).

La expresión es lo que determina el valor real que contendrá la columna. En mi ejemplo, la parte que dice (Qty * Price) es la expresión que determina ese valor.

En este caso, es simplemente multiplicar la cantidad (número de cada producto) por el precio de cada producto.

Por lo tanto, esta columna generada contiene el valor total de cada stock en el inventario.

Si insertamos datos y los seleccionamos, podemos ver el valor calculado de la columna generada.

INSERT INTO Products VALUES 
  (1, 'Hammer', 10, 9.99),
  (2, 'Saw', 5, 11.34),
  (3, 'Wrench', 7, 37.00),
  (4, 'Chisel', 9, 23.00),
  (5, 'Bandage', 70, 120.00);

SELECT * FROM Products;

Resultado:

Id     Name        Qty    Price   TotalValue
-----  ----------  -----  ------  ----------
1      Hammer      10     9.99    99.9      
2      Saw         5      11.34   56.7      
3      Wrench      7      37      259       
4      Chisel      9      23      207       
5      Bandage     70     120     8400      

Si nos fijamos en la primera fila, podemos ver que hay 10 martillos a un precio de 9,99 cada uno. La columna generada multiplica estos dos valores y terminamos con 99,9.

Si reducimos el número de martillos, la columna generada produciría un valor diferente.

He aquí un ejemplo.

UPDATE Products 
SET Qty = 5 WHERE Id = 1;

SELECT * FROM Products;

Resultado:

Id     Name        Qty    Price   TotalValue
-----  ----------  -----  ------  ----------
1      Hammer      5      9.99    49.95     
2      Saw         5      11.34   56.7      
3      Wrench      7      37      259       
4      Chisel      9      23      207       
5      Bandage     70     120     8400      

En este caso, reduje el número de martillos a 5 y, por lo tanto, la columna generada calculó un valor de 49,95.

Tipos de columnas generadas

Hay dos tipos de columnas generadas; almacenados y virtuales.

Algunos DBMS pueden usar una terminología ligeramente diferente, por ejemplo, SQL Server usa el término "persistente" en lugar de "almacenado". De cualquier manera, se refiere a lo mismo.

  • VIRTUAL :Los valores de las columnas no se almacenan, pero se evalúan cuando se leen las filas.
  • STORED :los valores de columna se evalúan y almacenan cuando se insertan o actualizan filas.

STORED por lo tanto, las columnas requieren espacio de almacenamiento, mientras que VIRTUAL las columnas no.

Sin embargo, esto también significa que VIRTUAL las columnas usan más ciclos de CPU cuando se leen.

Beneficios de las columnas generadas

Las columnas generadas pueden ahorrar tiempo al escribir consultas, reducir errores y mejorar el rendimiento.

Las columnas generadas se pueden utilizar como una forma de simplificar y unificar las consultas. Una condición compleja puede definirse como una columna generada y luego consultarse desde múltiples consultas en la tabla. Esto ayuda a garantizar que todos usen exactamente la misma condición.

Las columnas generadas almacenadas se pueden usar como un caché materializado para condiciones complicadas que son costosas de calcular sobre la marcha.

Limitaciones de las columnas generadas

Las columnas generadas generalmente vienen con limitaciones en comparación con las columnas normales, aunque el DBMS puede determinar el alcance de las limitaciones.

Por ejemplo, las columnas generadas generalmente solo pueden calcular valores de columnas dentro de la misma fila. Sin embargo, esta limitación se puede superar (al menos en SQL Server) mediante el uso de una función definida por el usuario como parte de la expresión de la columna calculada.

Consulte los enlaces a continuación para obtener más información sobre la implementación de columnas generadas en varios DBMS.

Documentación Oficial

Aquí está la documentación de algunos DBMS populares que incluye las limitaciones de su implementación de columnas generadas:

  • Columnas calculadas en SQL Server
  • Columnas generadas en PostgreSQL (Versión 12)
  • Columnas generadas en MySQL (Versión 8.0)
  • Columnas generadas en SQLite