En las bases de datos relacionales, una columna virtual es una columna de tabla cuyos valores se calculan automáticamente utilizando los valores de otras columnas u otra expresión determinista. Las columnas virtuales se definen en SQL:2003 como Columna generada, [1] y solo las implementan algunos DBMS , como MariaDB , SQL Server , Oracle , PostgreSQL , SQLite y Firebird (servidor de base de datos) (sintaxis COMPUTED BY).
Hay dos tipos de columnas virtuales:
Los valores de las columnas virtuales se calculan sobre la marcha cuando es necesario, por ejemplo, cuando se devuelven mediante una sentencia SELECT. Los valores de las columnas 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 hace referencia a ellas; las columnas persistentes no requieren tiempo de CPU, pero consumen espacio en el disco. Sin embargo, a veces no hay una opción disponible, porque algunos DBMS admiten solo un tipo de columna (o ninguno de ellos).
IBM Db2 admite la columna virtual de la versión 8 como columna generada. [2]
MariaDB es una bifurcación de MySQL . Se agregaron columnas virtuales en el árbol 5.2. [3]
Las expresiones que se pueden utilizar para calcular las columnas virtuales tienen las siguientes limitaciones:
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 utilizar en tablas que utilicen 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.
Se puede utilizar una instrucción CREATE TABLE o ALTER TABLE para agregar una columna virtual. La sintaxis utilizada para definir una columna virtual es la siguiente:
< tipo > [ GENERADO SIEMPRE ] COMO ( < expresión > ) [ VIRTUAL | PERSISTENTE ] [ ÚNICO ] [ CLAVE ÚNICA ] [ COMENTARIO < texto > ]
El soporte para columnas virtuales, conocidas en MySQL como columnas generadas, comenzó a estar disponible en MySQL 5.7. En versiones posteriores se han relajado varias limitaciones en su uso. [4]
Desde la versión 11g, Oracle admite columnas virtuales. [5]
Microsoft SQL Server admite columnas virtuales, pero se denominan columnas calculadas. [6]
SQL Server admite columnas calculadas persistentes y no persistentes.
Firebird siempre ha admitido columnas virtuales como lo hace su precursor InterBase , llamadas Columnas Computadas. [7]
Firebird admite columnas virtuales, no persistentes, y permite subselecciones, llamadas a funciones integradas, funciones externas y rutinas almacenadas en la expresión de la columna virtual.
La creación de una columna virtual se puede realizar durante la creación de una tabla o al agregar columnas a una tabla existente. La sintaxis utilizada para definir una columna virtual es la siguiente:
nombre_columna [ tipo ] CALCULADO POR ( expresión )
o el estándar de la industria
nombre_columna [ tipo ] GENERADO SIEMPRE COMO ( expresión )
Desde la versión 12, PostgreSQL admite columnas virtuales, conocidas como columnas generadas. [8]
Desde la versión 3.31.0 (22/01/2020), SQLite admite columnas virtuales, conocidas como columnas generadas. [9]