Computed Column Nedir ve Nasıl Kullanılır?

Computed Column bir tablodaki bir veya birden fazla kolondan yapılan bir hesaplama sonucu olarak üretilen bir kolon’dur. Örneğin tabloda A,B ve C kolonlarınız var. A ve B kolonlarınızın toplamınında D kolonu olarak tablonuzda yer almasını istiyorsanız bu tabloda computed column oluşturmalısınız.

Aşağıdaki şekilde yukarıda bahsettiğimiz örnekteki gibi computed column’a sahip bir tablo oluşturabilirsiniz.

CREATE TABLE dbo.ComputedColumnTest  
( 
    A int NOT NULL 
  , B int NOT NULL 
  , C int NOT NULL 
  , D AS A + B 
); 

 

Var olan bir tabloya computed column eklemek istersek aşağıdaki gibi ekleyebiliriz.

ALTER TABLE dbo.ComputedColumnTest   ADD D AS (A + B);

 

PERSISTED olarak işaretlenmediği sürece default olarak Computed Column’lar diskte tutulmazlar. Yani aslında sanaldırlar. Veri çekilmek istendiğinde otomatik olarak hesaplanırlar.

PERSISTED olarak işaretlenirse tabloya her kayıt geldiğinde ya da computed column ile ilişkili kolonlar güncellendiğinde hesaplama yapılarak diske yazılma işlemi gerçekleştirilir. Yani PERSISTED olarak işaretlemek INSERT,UPDATE ve DELETE performansını biraz düşüreceği gibi SELECT performansını biraz arttıracaktır. Bu işlemi sisteminizin ihtiyacına göre belirlemelisiniz.

Aşağıdaki şekilde computed column’u PERSISTED olarak işaretleyebilirsiniz.

CREATE TABLE dbo.ComputedColumnTest  
( 
    A int NOT NULL 
  , B int NOT NULL 
  , C int NOT NULL 
  , D AS A + B  PERSISTED
); 

 

Bu kolonlara insert veya update yapılamaz. Aşağıdaki gibi bu kolonlara insert ve update yapmak istersek hata alırız.

Insert yapmak istediğimizde aldığımız hata;

Update yapmak istediğimizde aldığımız hata;

 

Computed Column ile ilgili yaptığım testler sonucunda edindiğim sonuçları aşağıda bulabilirsiniz;

 

Bu sonuçlarda geçen primary key, foreign key unique constraint, default constraint gibi kavramlar hakkında bilgi almak için aşağıdaki makaleleri okuyabilirsiniz.

 

Primary Key ve Foreign Key“,

Unique Constraint,

Primary Key ve Unique Constaint’in farkları“,

Tablodaki Nullable Kolonlar İçin Default Constraint Oluşturmak

 

 

 

  • Computed Column PERSISTED olarak tanımlanırsa primary key ve foreign key tanımlanabilir.
  • PERSISTED olarak tanımlasanızda tanımlamasanızda index ve unique constraint oluşturabilirsiniz.
  • Computed Column’u oluşturan kolonlardan sadece bir tanesi nullable(not null olarak set edilmemişse) ise computed column üzerinde default constraint tanımlayabiliyorsunuz. Fakat set ettiğiniz bu default constraint değerini sql server computed column’u oluşturan nullable değere sahip kolona atıyor.
  • Computed Column’u GETDATE() gibi non-deterministic(her çağrıldığında farklı değerler üreten) fonksiyonları kullanarak oluşturabilirsiniz fakat PERSISTED yapamazsınız ve index oluşturamazsınız.
  • Computed Column’a insert ya da update yapamazsınız.

Loading

Leave Your Comment