Виртуальный столбец

Виртуальный столбец - это столбец таблицы, который относится к реляционным базам данных, значение которого автоматически вычисляется с использованием значений других столбцов или другого детерминированного выражения. Виртуальные столбцы не являются частью какого-либо стандарта SQL и реализуются только некоторыми СУБД, такими как MariaDB, SQL Server, Oracle и Firebird (сервер баз данных).

Реализация

Существует два типа виртуальных столбцов:

  • Виртуальные столбцы;
  • Постоянные столбцы.

Значения виртуальных столбцов вычисляются непосредственно тогда, когда это необходимо, то есть, сразу, например, когда они возвращаются оператором SELECT. Постоянные значения столбцов вычисляются, когда строка вставляется в таблицу, и записываются, как и все другие значения. Они могут измениться, если другие значения изменятся. Как виртуальные, так и постоянные столбцы имеют свои преимущества и недостатки: виртуальные столбцы не занимают место на диске, но они должны вычисляться каждый раз, когда запрос обращается к ним; постоянные столбцы не требуют процессорного времени, но занимают место на диске. Однако иногда выбор типа столбцов невозможен, поскольку некоторые СУБД поддерживают только один тип столбца (или ни один из них).

MariaDB

MariaDB - это ответвление MySQL. Виртуальные столбцы были добавлены в версии 5.2. [1]

Выражения, которые можно использовать для вычисления виртуальных столбцов, имеют следующие ограничения:

  • Они должны быть детерминированными.
  • Они не могут возвращать постоянные значения.
  • Они не могут использовать пользовательские функции или хранимые процедуры.
  • Они не могут включать другие виртуальные столбцы.
  • Они не могут использовать подзапросы.

Постоянные столбцы могут быть проиндексированы и могут быть частью внешнего ключа, с некоторыми небольшими ограничениями.

Виртуальные столбцы можно использовать только в тех таблицах, которые используют механизм хранения, который их поддерживает.

Механизмы хранения, поддерживающие виртуальные столбцы:

  • InnoDB
  • MyISAM
  • Aria

Таблицы MRG_MyISAM могут основываться на таблицах MyISAM, которые содержат постоянные столбцы; но соответствующий столбец MRG_MyISAM должен быть определен как обычный столбец.

<type> [GENERATED ALWAYS] AS ( <expression> ) [VIRTUAL | PERSISTENT] [UNIQUE] [UNIQUE KEY] [COMMENT <text>]
  • type - это тип данных столбца.
  • expression - это выражение SQL, которое возвращает значение столбца для каждой строки.
  • text является необязательным комментарием столбца.

MySQL

Поддержка виртуальных столбцов, известных в MySQL как сгенерированные столбцы, стала доступна в версии 5.7. Различные ограничения на их использование были снижены в последующих версиях. [2]

Oracle

Начиная с версии 11g, Oracle поддерживает виртуальные столбцы. [3]

SQL Server

Microsoft SQL Server поддерживает виртуальные столбцы, но они называются вычисляемыми столбцами. [4]

SQL Server поддерживает как постоянные, так и непостоянные вычисляемые столбцы.

Firebird

Firebird всегда поддерживал виртуальные столбцы, так же как и его предшественник InterBase поддерживает их. Они называются вычисляемыми столбцами. [5]

Firebird поддерживает виртуальные столбцы, а не постоянные, и позволяет выполнять подвыборы, вызывая встроенные функции, внешние функции и хранимые подпрограммы в выражении виртуального столбца.

Синтаксис

Создание виртуального столбца можно выполнить во время создания таблицы, синтаксис определения виртуальных столбцов при добавлении их в уже существующую таблицу будет иметь следующий вид:

column_name [type] COMPUTED BY (expression)

или

column_name [type] GENERATED ALWAYS AS (expression)