Coluna virtual - Virtual column

Em bancos de dados relacionais, uma coluna virtual é uma coluna de tabela cujo valor é calculado automaticamente usando outros valores de colunas ou outra expressão determinística. Colunas virtuais são definidas de SQL: 2003 como Coluna Gerada, e só são implementadas por alguns SGBDs , como MariaDB , SQL Server , Oracle , PostgreSQL , SQLite e Firebird (servidor de banco de dados) (sintaxe COMPUTED BY).

Implementação

Existem dois tipos de colunas virtuais:

  • Colunas virtuais;
  • Colunas persistentes.

Os valores das colunas virtuais são calculados instantaneamente quando necessário, por exemplo, quando são retornados por uma instrução SELECT. Os valores das colunas persistentes são calculados quando uma linha é inserida em uma tabela e são escritos como todos os outros valores. Eles podem mudar se outros valores mudarem. As colunas virtuais e persistentes têm vantagens e desvantagens: as colunas virtuais não consomem espaço no disco, mas devem ser calculadas sempre que uma consulta se refere a elas; colunas persistentes não requerem nenhum tempo de CPU, mas consomem espaço em disco. No entanto, às vezes uma escolha não está disponível, porque alguns SGBDs suportam apenas um tipo de coluna (ou nenhum deles).

IBM DB2

O banco de dados Db2 suporta coluna virtual da versão 8 como coluna gerada.

MariaDB

MariaDB é um fork do MySQL . Colunas virtuais foram adicionadas na árvore 5.2.

As expressões que podem ser usadas para calcular as colunas virtuais têm as seguintes limitações:

  • Eles devem ser deterministas.
  • Eles não podem retornar valores constantes.
  • Eles não podem usar funções definidas pelo usuário ou procedimentos armazenados .
  • Eles não podem incluir outras colunas virtuais.
  • Eles não podem fazer uso de subconsultas.

As colunas persistentes podem ser indexadas e podem fazer parte de uma chave estrangeira , com algumas pequenas limitações relacionadas à aplicação de restrição.

As colunas virtuais só podem ser usadas em tabelas que usam um mecanismo de armazenamento que as suporta. Os mecanismos de armazenamento que suportam colunas virtuais são:

As tabelas MRG_MyISAM podem ser baseadas em tabelas MyISAM que incluem colunas persistentes; mas a coluna MRG_MyISAM correspondente deve ser definida como uma coluna regular.

Sintaxe

Uma instrução CREATE TABLE ou ALTER TABLE pode ser usada para adicionar uma coluna virtual. A sintaxe usada para definir uma coluna virtual é a seguinte:

<type>  [GENERATED ALWAYS]  AS   ( <expression> )  [VIRTUAL | PERSISTENT]  [UNIQUE] [UNIQUE KEY] [COMMENT <text>]
  • type é o tipo de dados da coluna.
  • expression é a expressão SQL que retorna o valor da coluna para cada linha.
  • text é um comentário de coluna opcional.

MySQL

O suporte para colunas virtuais, conhecido no MySQL como colunas geradas, começou a se tornar disponível no MySQL 5.7. Várias limitações em seu uso foram relaxadas nas versões subsequentes.

Oráculo

Desde a versão 11g, o Oracle oferece suporte a colunas virtuais.

servidor SQL

O Microsoft SQL Server oferece suporte a colunas virtuais, mas são chamadas de Colunas Computadas.

O SQL Server oferece suporte a colunas computadas persistentes e não persistentes.

Firebird

O Firebird sempre suportou colunas virtuais como seu precursor InterBase o suporta, chamado Computed Columns.

O Firebird suporta colunas virtuais, não persistentes, e permite sub-seleções, chamadas de funções embutidas, funções externas e rotinas armazenadas na expressão de coluna virtual.

Sintaxe

A criação de uma coluna virtual pode ser feita durante a criação da tabela e ao adicionar colunas a uma tabela existente, a sintaxe usada para definir uma coluna virtual é a seguinte:

column_name [type] COMPUTED BY (expression)

ou o padrão da indústria

column_name [type] GENERATED ALWAYS AS (expression)

PostgreSQL

Desde a versão 12, o PostgreSQL suporta colunas virtuais, conhecidas como colunas geradas.

SQLite

Desde a versão 3.31.0 (2020-01-22), o SQLite oferece suporte a colunas virtuais, conhecidas como colunas geradas.

Notas

links externos