Wirtualna kolumna
W relacyjnych bazach danych kolumna wirtualna to kolumna tabeli , której wartość jest automatycznie obliczana na podstawie wartości innych kolumn lub innego wyrażenia deterministycznego. Kolumny wirtualne są zdefiniowane w SQL:2003 jako wygenerowana kolumna i są implementowane tylko przez niektóre systemy DBMS , takie jak MariaDB , SQL Server , Oracle , PostgreSQL , SQLite i Firebird (serwer bazy danych) (składnia COMPUTED BY).
Realizacja
Istnieją dwa typy kolumn wirtualnych:
- Wirtualne kolumny;
- Stałe kolumny.
wartości kolumn wirtualnych są obliczane na bieżąco , na przykład gdy są zwracane przez instrukcję SELECT. Trwałe wartości kolumn są obliczane po wiersza do tabeli i są zapisywane jak wszystkie inne wartości. Mogą się zmienić, jeśli zmienią się inne wartości. Zarówno kolumny wirtualne, jak i trwałe mają zalety i wady: kolumny wirtualne nie zajmują miejsca na dysku, ale muszą być obliczane za każdym razem, gdy zapytanie do nich się odnosi; trwałe kolumny nie wymagają czasu procesora, ale zajmują miejsce na dysku. Jednak czasami wybór nie jest dostępny, ponieważ niektóre DBMS obsługują tylko jeden typ kolumny (lub żaden z nich).
IBMDb2
IBM Db2 obsługuje kolumnę wirtualną wersji 8 jako kolumnę wygenerowaną.
MariaDB
MariaDB to rozwidlenie MySQL . W drzewie 5.2 dodano kolumny wirtualne.
Wyrażenia, których można użyć do obliczenia kolumn wirtualnych, mają następujące ograniczenia:
- Muszą być deterministyczne.
- Nie mogą zwracać stałych wartości.
- Nie mogą używać funkcji zdefiniowanych przez użytkownika ani procedur przechowywanych .
- Nie mogą zawierać innych kolumn wirtualnych.
- Nie mogą korzystać z podzapytań.
Kolumny trwałe mogą być indeksowane i mogą być częścią klucza obcego , z kilkoma małymi ograniczeniami dotyczącymi wymuszania ograniczeń.
Kolumny wirtualne mogą być używane tylko w tabelach, które korzystają z obsługującego je mechanizmu przechowywania. Silniki pamięci masowej obsługujące kolumny wirtualne to:
Tabele MRG_MyISAM mogą być oparte na tabelach MyISAM, które zawierają trwałe kolumny; ale odpowiednia kolumna MRG_MyISAM powinna być zdefiniowana jako zwykła kolumna.
Składnia
Do dodania kolumny wirtualnej można użyć instrukcji CREATE TABLE lub ALTER TABLE. Składnia używana do definiowania kolumny wirtualnej jest następująca:
<typ> [ GENEROWANE ZAWSZE ] AS ( < wyrażenie > ) [ WIRTUALNE | _ _ TRWAŁY ] [ UNIKALNY ] [ UNIKALNY KLUCZ ] [ KOMENTARZ < tekst > ]
- type to typ danych kolumny.
- wyrażenie jest wyrażeniem SQL, które zwraca wartość kolumny dla każdego wiersza.
- tekst jest opcjonalnym komentarzem kolumny.
MySQL
Obsługa kolumn wirtualnych, znanych w MySQL jako kolumny wygenerowane, zaczęła być dostępna w MySQL 5.7. Różne ograniczenia dotyczące ich stosowania zostały złagodzone w kolejnych wersjach.
Wyrocznia
Od wersji 11g Oracle obsługuje kolumny wirtualne.
Serwer SQL
Microsoft SQL Server obsługuje kolumny wirtualne, ale są one nazywane kolumnami obliczeniowymi.
SQL Server obsługuje zarówno utrwalone, jak i nieutrwalone kolumny obliczeniowe.
ognisty Ptak
Firebird zawsze obsługiwał kolumny wirtualne, podobnie jak jego poprzednik InterBase , o nazwie Computed Columns.
Firebird obsługuje kolumny wirtualne, a nie trwałe, i pozwala na podselekcję, wywoływanie wbudowanych funkcji, funkcji zewnętrznych i procedur przechowywanych w wyrażeniu kolumny wirtualnej.
Składnia
Tworzenie kolumny wirtualnej można wykonać podczas tworzenia tabeli, a podczas dodawania kolumn do istniejącej tabeli składnia używana do definiowania kolumny wirtualnej jest następująca:
nazwa_kolumny [ typ ] COMPUTED BY ( wyrażenie )
lub standard branżowy
nazwa_kolumny [ typ ] GENEROWANE ZAWSZE JAKO ( wyrażenie )
PostgreSQL
Od wersji 12 PostgreSQL obsługuje kolumny wirtualne, zwane kolumnami generowanymi.
SQLite
Od wersji 3.31.0 (22.01.2020) SQLite obsługuje kolumny wirtualne, znane jako kolumny wygenerowane.
Notatki
Linki zewnętrzne
- Wirtualne kolumny w dokumentacji MariaDB.
- MariaDB 5.2: Do czego użyłbyś wirtualnych kolumn? na OpenLife.cc
- Wirtualne kolumny w Oracle Database 11g wydanie 1
- Kolumny obliczeniowe w SQL Server 2008