Hesaplanan sütunlar, değerlerinin tabloda diğer sütunlara dayalı olarak otomatik olarak oluşturulduğu sütunlardır. Bu kavram, her sorguda formüllerin tekrarlanmasını önlemek için tipik hesaplamaların sonuçlarına erişimi kolaylaştırmak amacıyla ortaya çıkmıştır. Sanal (değerler her seçimde hesaplanır) veya fiziksel olarak saklanan (veri güncellendiğinde fiziksel olarak kaydedilir) olarak ilan edilebilirler.
Sorun şu ki, tüm ifadelerin tablo düzeyinde hesaplanması mümkün değildir (işlevlerin türleri ile ilgili kısıtlamalar) ve fiziksel türev veri depolamak alan kaplar ve UPDATE sırasında güncel tutulması gerektirir.
Çözüm: Hesaplanan sütunları DDL düzeyinde ilan etmek mümkün olduğunda veya verilerin saklanması gerekiyorsa tetikleyiciler/prosedürler aracılığıyla güncelleme mantığını uygulamak veya toplu işlemler kullanmak.
Kod örneği (MS SQL Server):
ALTER TABLE orders ADD total_sum AS (quantity * price); -- sanal ALTER TABLE orders ADD total_sum_persisted AS (quantity * price) PERSISTED; -- fiziksel
Anahtar özellikler:
Hesaplanan sütuna indeks oluşturmak mümkün mü?
Eğer sütun PERSISTED (fiziksel olarak saklanan) olarak ilan edilmişse, indeks oluşturulabilir. Sanal olanlar için her zaman mümkün olmayabilir, bu veri tabanı yönetim sistemine bağlıdır.
CREATE INDEX ix_total_sum ON orders (total_sum_persisted);
Hesaplanan sütunlar, kaynak sütunlar değiştiğinde otomatik olarak güncellenir mi?
Evet, kaynak veriler eklenip/düzenlendiğinde, sütun tablo düzeyinde hesaplanan sütun olarak ilan edilmişse yeni bir değer otomatik olarak hesaplanır.
Eğer hesaplanan sütun NULL'a referans verirse ne olur?
Çoğu veri tabanı yönetim sistemi, en az bir operatör NULL ise NULL döndürür — olası NULL değerini COALESCE/ISNULL ile işlemek zorunludur.
ALTER TABLE orders ADD total_with_discount AS (COALESCE(quantity * price, 0));
Veritabanında ayrı alanlar olarak ürün fiyatı ve toplamı saklanır, ve ayrıca - total. Ürün güncellenirken total'i güncellemeyi unutur.
Artılar:
Eksiler:
Son toplam sanal bir sütun olarak ilan edilmiştir. Her zaman doğrudur, kaynak değerlerle çelişmez.
Artılar:
Eksiler: