SQLite
 sql >> база данни >  >> RDS >> SQLite

Какво е генерирана колона?

Някои системи за управление на бази данни (СУБД) включват функция, наречена генерирани колони.

Известни също като „изчислени колони“, генерираните колони са подобни на нормална колона, с изключение на това, че стойността на генерираната колона се извлича от израз, който изчислява стойности от други колони.

С други думи, стойността на генерираната колона се изчислява от други колони.

Пример

Ето основен пример, за да демонстрирате как работят генерираните колони.

CREATE TABLE Products( 
    Id INTEGER PRIMARY KEY, 
    Name TEXT,
    Qty INT,
    Price INT,
    TotalValue INT GENERATED ALWAYS AS (Qty * Price)
);

Този пример е създаден в SQLite и използва синтаксиса на SQLite за създаване на генерирана колона. Този синтаксис използва GENERATED ALWAYS колона-ограничение.

GENERATED ALWAYS частта е по избор в SQLite, така че можете просто да използвате AS .

Всъщност GENERATED ALWAYS частта също е по избор в MySQL и дори не е дефинирана в TSQL (разширението на SQL за SQL Server), така че AS ключова дума е всичко, от което се нуждаете (заедно с действителния израз).

Изразът е това, което определя действителната стойност, която колоната ще съдържа. В моя пример частта, която гласи (Qty * Price) е изразът, който определя тази стойност.

В този случай това е просто умножаване на количеството (броя на всеки продукт) с цената на всеки продукт.

Следователно тази генерирана колона съдържа общата стойност на всяка наличност в инвентара.

Ако вмъкнем данни и ги изберем, можем да видим изчислената стойност на генерираната колона.

INSERT INTO Products VALUES 
  (1, 'Hammer', 10, 9.99),
  (2, 'Saw', 5, 11.34),
  (3, 'Wrench', 7, 37.00),
  (4, 'Chisel', 9, 23.00),
  (5, 'Bandage', 70, 120.00);

SELECT * FROM Products;

Резултат:

Id     Name        Qty    Price   TotalValue
-----  ----------  -----  ------  ----------
1      Hammer      10     9.99    99.9      
2      Saw         5      11.34   56.7      
3      Wrench      7      37      259       
4      Chisel      9      23      207       
5      Bandage     70     120     8400      

Ако погледнем първия ред, можем да видим, че има 10 чука на цена от 9,99 всеки. Генерираната колона умножава тези две стойности заедно и в крайна сметка получаваме 99.9.

Ако намалим броя на чуковете, тогава генерираната колона ще произведе различна стойност.

Ето един пример.

UPDATE Products 
SET Qty = 5 WHERE Id = 1;

SELECT * FROM Products;

Резултат:

Id     Name        Qty    Price   TotalValue
-----  ----------  -----  ------  ----------
1      Hammer      5      9.99    49.95     
2      Saw         5      11.34   56.7      
3      Wrench      7      37      259       
4      Chisel      9      23      207       
5      Bandage     70     120     8400      

В този случай намалих броя на чуковете до 5 и генерираната колона следователно изчисли стойност от 49,95.

Типове генерирани колони

Има два вида генерирани колони; съхранени и виртуални.

Някои СУБД могат да използват малко по-различна терминология, например SQL Server използва термина „постоянен“ вместо „съхранен“. Така или иначе се отнася до едно и също нещо.

  • VIRTUAL :Стойностите на колоните не се съхраняват, но се оценяват при четене на редове.
  • STORED :Стойностите на колоните се оценяват и съхраняват при вмъкване или актуализиране на редове.

STORED Следователно колоните изискват място за съхранение, докато VIRTUAL колоните не.

Това обаче също означава, че VIRTUAL колоните използват повече цикли на процесора, когато се четат.

Предимства на генерираните колони

Генерираните колони могат да спестят време при писане на заявки, да намалят грешките и да подобрят производителността.

Генерираните колони могат да се използват като начин за опростяване и унифициране на заявките. Сложно условие може да се дефинира като генерирана колона и след това да се препраща от множество заявки в таблицата. Това помага да се гарантира, че всички те използват точно едно и също условие.

Съхранените генерирани колони могат да се използват като материализиран кеш за сложни условия, които са скъпи за изчисляване в движение.

Ограничения на генерираните колони

Генерираните колони обикновено идват с ограничения в сравнение с нормалните колони, въпреки че степента на ограниченията може да бъде определена от СУБД.

Например генерираните колони обикновено могат да изчисляват стойности само от колони в един и същи ред. Това ограничение обаче може да бъде преодоляно (поне в SQL Server) чрез използване на дефинирана от потребителя функция като част от израза на изчислената колона.

Вижте връзките по-долу, за да прочетете повече за внедряването на генерирани колони в различни СУБД.

Официална документация

Ето документацията за някои популярни СУБД, която включва ограниченията на тяхното внедряване на генерирани колони:

  • Изчислени колони в SQL Server
  • Генерирани колони в PostgreSQL (версия 12)
  • Генерирани колони в MySQL (Версия 8.0)
  • Генерирани колони в SQLite


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как мога да добавя нови колони към база данни на SQLite след пускането на приложението за Android?

  2. Стая - Използване на външни SQLites, както и вътрешна DB

  3. Как работи SQLite Trim().

  4. Проблем с паметта на SQLite с единичен подход

  5. Android Room – Как да нулирате автоматично генерирания първичен ключ на таблицата при всяко стартиране на приложение