ProgramlamaVeri Mühendisi

SQL'de türev hesaplanan sütunların (Computed Columns) otomatik olarak oluşturulması ve güncellenmesi nasıl gerçekleştirilir? Tablo düzeyinde ilan edilmesi ile sorgulardaki hesaplamalar arasındaki fark nedir ve hangi zorluklar ortaya çıkabilir?

Hintsage yapay zeka asistanı ile mülakatları geçin

Cevap.

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:

  • Sanal sütunlar fazlalığı azaltır ama sorgulama hızını düşürür.
  • Fiziksel olarak kaydedilenler otomatik olarak güncellenir ama alan ve kaynak tüketir.
  • Bazı ifadeler yasaktır: hesaplanan sütunlarda yinelenemeyen işlevler veya alt sorgular kullanılamaz.

Kandırmaca Sorular.

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));

Yaygın Hatalar ve Anti-Desenler

  • Gereksiz yere çoğaltılmış türev değerlerini saklamak, bu da hacmin artmasına yol açar.
  • Çalışmayı yavaşlatan karmaşık, indekslenemeyen ifadeler kullanmak.
  • Uygulama düzeyine taşınmış hesaplamalarda tutarsız güncellemeler.

Hayattan Bir Örnek

Olumsuz Durum

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:

  • Hızlı okuma

Eksiler:

  • Veri tutarsızlığı, yeniden hesaplama zorlukları.

Olumlu Durum

Son toplam sanal bir sütun olarak ilan edilmiştir. Her zaman doğrudur, kaynak değerlerle çelişmez.

Artılar:

  • Senkronizasyon sorunu yok
  • Veritabanıyla çalışma kodunu basitleştirir

Eksiler:

  • Çok sayıda hesaplama olduğunda karmaşık formüllerde çok hafif bir yavaşlama.