Columna virtual - Virtual column

En las bases de datos relacionales , una columna virtual es una columna de tabla cuyo valor se calcula automáticamente utilizando los valores de otras columnas u otra expresión determinista. Las columnas virtuales se definen de SQL: 2003 como columna generada, y solo son implementadas por algunos DBMS , como MariaDB , SQL Server , Oracle , PostgreSQL , SQLite y Firebird (servidor de base de datos) (COMPUTED BY sintaxis).

Implementación

Hay dos tipos de columnas virtuales:

  • Columnas virtuales;
  • Columnas persistentes.

Los valores de las columnas virtuales se calculan sobre la marcha cuando es necesario, por ejemplo, cuando los devuelve una instrucción SELECT. Los valores de columna persistentes se calculan cuando se inserta una fila en una tabla y se escriben como todos los demás valores. Pueden cambiar si cambian otros valores. Tanto las columnas virtuales como las persistentes tienen ventajas y desventajas: las columnas virtuales no consumen espacio en el disco, pero deben calcularse cada vez que una consulta se refiere a ellas; las columnas persistentes no requieren tiempo de CPU, pero consumen espacio en disco. Sin embargo, a veces una opción no está disponible, porque algunos DBMS solo admiten un tipo de columna (o ninguno de ellos).

IBM DB2

La base de datos DB2 da soporte a la columna virtual de la Versión 8 como columna Generada.

MariaDB

MariaDB es una bifurcación de MySQL . Se agregaron columnas virtuales en el árbol 5.2.

Las expresiones que se pueden utilizar para calcular las columnas virtuales tienen las siguientes limitaciones:

  • Deben ser deterministas.
  • No pueden devolver valores constantes.
  • No pueden utilizar funciones definidas por el usuario ni procedimientos almacenados .
  • No pueden incluir otras columnas virtuales.
  • No pueden hacer uso de subconsultas.

Las columnas persistentes se pueden indexar y pueden ser parte de una clave externa , con algunas pequeñas limitaciones relacionadas con la aplicación de restricciones.

Las columnas virtuales solo se pueden usar en tablas que usan un motor de almacenamiento que las admita. Los motores de almacenamiento que admiten columnas virtuales son:

Las tablas MRG_MyISAM pueden basarse en tablas MyISAM que incluyen columnas persistentes; pero la columna MRG_MyISAM correspondiente debe definirse como una columna regular.

Sintaxis

Se puede usar una instrucción CREATE TABLE o ALTER TABLE para agregar una columna virtual. La sintaxis utilizada para definir una columna virtual es la siguiente:

<type>  [GENERATED ALWAYS]  AS   ( <expression> )  [VIRTUAL | PERSISTENT]  [UNIQUE] [UNIQUE KEY] [COMMENT <text>]
  • type es el tipo de datos de la columna.
  • expresión es la expresión SQL que devuelve el valor de la columna para cada fila.
  • el texto es un comentario de columna opcional.

MySQL

El soporte para columnas virtuales, conocidas en MySQL como columnas generadas, comenzó a estar disponible en MySQL 5.7. Varias limitaciones sobre su uso se han relajado en versiones posteriores.

Oráculo

Desde la versión 11g, Oracle admite columnas virtuales.

servidor SQL

Microsoft SQL Server admite columnas virtuales, pero se denominan columnas calculadas.

SQL Server admite columnas calculadas persistentes y no persistentes.

Pájaro de fuego

Firebird siempre ha admitido columnas virtuales como su precursor InterBase lo admite, llamadas Columnas Computadas.

Firebird admite columnas virtuales, no persistentes y permite sub-selecciones, invocando funciones integradas, funciones externas y rutinas almacenadas en la expresión de columna virtual.

Sintaxis

La creación de una columna virtual se puede realizar durante la creación de la tabla y al agregar columnas a una tabla existente, la sintaxis utilizada para definir una columna virtual es la siguiente:

column_name [type] COMPUTED BY (expression)

o el estándar de la industria

column_name [type] GENERATED ALWAYS AS (expression)

PostgreSQL

Desde la versión 12, PostgreSQL admite columnas virtuales, conocidas como columnas generadas.

SQLite

Desde la versión 3.31.0 (2020-01-22), SQLite admite columnas virtuales, conocidas como columnas generadas.

Notas

enlaces externos