Virtuální sloupec - Virtual column
![]() | Tento článek obsahuje seznam obecných Reference, ale zůstává z velké části neověřený, protože postrádá dostatečné odpovídající vložené citace.červenec 2013) (Zjistěte, jak a kdy odstranit tuto zprávu šablony) ( |
V relačním databáze A virtuální sloupec je tabulka sloupec jehož hodnota je automaticky vypočítána pomocí jiných hodnot sloupců nebo jiného deterministického výrazu. Virtuální sloupce jsou definovány SQL: 2003 jako vygenerovaný sloupec [1], a jsou implementovány pouze některými DBMS, jako MariaDB, SQL Server, Věštec, SQLite a Firebird (databázový server) (POČÍTÁ SE podle syntaxe).
Implementace
Existují dva typy virtuálních sloupců:
- Virtuální sloupce;
- Trvalé sloupce.
Vypočítají se hodnoty virtuálních sloupců za běhu v případě potřeby, například když jsou vráceny příkazem SELECT. Trvalé hodnoty sloupců se počítají, když a řádek je vložen do tabulky a jsou zapsány jako všechny ostatní hodnoty. Mohou se změnit, pokud se změní jiné hodnoty. Virtuální i trvalé sloupce mají výhody i nevýhody: virtuální sloupce nezabírají místo na disku, ale musí být vypočítány pokaždé, když se na ně dotaz odkazuje; trvalé sloupce nevyžadují žádný čas CPU, ale zabírají místo na disku. Někdy však volba není k dispozici, protože některé DBMS podporují pouze jeden typ sloupce (nebo žádný z nich).
IBM DB2
Databáze Db2 podporuje virtuální sloupec verze 8 jako vygenerovaný sloupec. [2]
MariaDB
MariaDB je MySQL Vidlička. Ve stromu 5.2 byly přidány virtuální sloupce.[3]
Výrazy, které lze použít k výpočtu virtuálních sloupců, mají následující omezení:
- Musí být deterministické.
- Nemohou vracet konstantní hodnoty.
- Nemohou používat funkce definované uživatelem nebo Uložené procedury.
- Nemohou zahrnovat další virtuální sloupce.
- Nemohou využívat poddotazy.
Trvalé sloupce lze indexovat a mohou být součástí a cizí klíč, s několika malými omezeními týkajícími se vymáhání omezení.
Virtuální sloupce lze použít pouze u tabulek, které používají úložný modul, který je podporuje. Úložiště podporující virtuální sloupce jsou:
Tabulky MRG_MyISAM mohou být založeny na tabulkách MyISAM, které obsahují trvalé sloupce; ale odpovídající sloupec MRG_MyISAM by měl být definován jako běžný sloupec.
Syntax
Pro přidání virtuálního sloupce lze použít příkaz CREATE TABLE nebo ALTER TABLE. Syntaxe použitá k definování virtuálního sloupce je následující:
<typ> [GENEROVÁNO VŽDY] TAK JAKO ( <výraz> ) [VIRTUÁLNÍ | PERZISTENTNÍ] [UNIKÁTNÍ] [UNIKÁTNÍ KLÍČ] [KOMENTÁŘ <text>]
- typ je datový typ sloupce.
- výraz je výraz SQL, který vrací hodnotu sloupce pro každý řádek.
- text je volitelný sloupcový komentář.
MySQL
Podpora virtuálních sloupců, které jsou v MySQL známé jako generované sloupce, začala být dostupná v MySQL 5.7. V následujících verzích byla uvolněna různá omezení jejich použití.[4]
Věštec
Od verze 11g, Věštec podporuje virtuální sloupce.[5]
SQL Server
Microsoft SQL Server podporuje virtuální sloupce, ale nazývají se Vypočítané sloupce.[6]
SQL Server podporuje trvalé i netrvalé vypočítané sloupce.
Fénix
Fénix vždy podporoval virtuální sloupce jako předchůdce InterBase podporuje to, nazývá se Vypočítané sloupce.[7]
Firebird podporuje virtuální sloupce, nikoli perzistentní, a umožňuje dílčí výběr, volání vestavěných funkcí, externích funkcí a uložených rutin ve výrazu virtuálního sloupce.
Syntax
Vytvoření virtuálního sloupce lze provést během vytváření tabulky a při přidávání sloupců do existující tabulky se k definování virtuálního sloupce používá následující syntaxe:
název_sloupce [typ] VÝPOČET PODLE (výraz)
nebo průmyslový standard
název_sloupce [typ] GENEROVÁNO VŽDY TAK JAKO (výraz)
PostgreSQL
Od verze 12, PostgreSQL podporuje virtuální sloupce, známé jako generované sloupce. [8]
SQLite
Od verze 3.31.0 (2020-01-22), SQLite podporuje virtuální sloupce, známé jako generované sloupce. [9]
Poznámky
- ^ Bylo publikováno SQL: 2003
- ^ SQL Reference Volume 2 verze 8
- ^ Virtuální sloupce
- ^ https://dev.mysql.com/doc/refman/5.7/en/create-table-generated-columns.html
- ^ http://www.oracle.com/technetwork/articles/sql/11g-schemamanagement-089869.html
- ^ http://msdn.microsoft.com/en-us/library/ms191250(v=sql.105).aspx
- ^ http://www.firebirdsql.org/refdocs/langrefupd25-ddl-table.html
- ^ https://www.postgresql.org/docs/12/ddl-generated-columns.html
- ^ https://www.sqlite.org/gencol.html