SQL Server’da Computed Columns Nedir?

Herkese merhaba. Bu yazıda SQL Server’da Computed Columns konusunun ne olduğu ve Computed Columns Nedir bununla ilgili bilgi paylaşacağım.

SQL Server’da Computed Columns, bir tabloda saklanmayan ancak tablodaki diğer sütunların değerlerine dayalı olarak hesaplanan bir sütundur. Computed columns, bir formül veya ifade kullanılarak oluşturulur ve tablodaki diğer sütunların değerleri değiştikçe otomatik olarak güncellenir.

Computed columns’lar, tablolardaki verileri analiz etmek, işlemek ve kullanmak için çok kullanışlıdır. Örneğin, bir tabloda müşterilerin doğum tarihlerinin tutulduğunu varsayalım ve yaşlarının hesaplanması gerekiyor. Yaş sütunu, müşterinin doğum tarihi sütununa dayalı olarak bir Computed columns olarak oluşturulabilir. Bu şekilde, her yeni müşteri eklendiğinde veya mevcut bir müşterinin doğum tarihi değiştirildiğinde yaş sütunu otomatik olarak güncellenecektir.

Computed columns’lar, SQL Server’da CREATE TABLE veya ALTER TABLE ifadesi kullanılarak oluşturulabilir. Formüller veya ifadeler, SQL Server tarafından desteklenen herhangi bir işlemci veya fonksiyon kullanılarak oluşturulabilir.

SQL Server’da Computed Columns ile oluşturulan kolonlar fiziksel olarak diskte yer kaplamazlar. Ancak Computed Columns  yani hesaplanmış kolonların diskte yer tutmasını fiziksel olarak diske yazılmasını istiyorsanız; “PERSISTED” ifadesini kullabilirsiniz.

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

SQL Server’da Computed Columns üzerinde INDEX tanımlamanız gerekiyorsa “PERSISTED” özelliğini kullanmalısınız.

SQL Server’da Computed Columns’ları “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.

  • Computed Columns “PERSISTED” olarak tanımlanırsa primary key ve foreign key tanımlayabilirsiniz.
  • “PERSISTED” olarak tanımlasanızda tanımlamasanızda Index ve Unique Constraint oluşturabilirsiniz.
  • Computed Columns’u oluşturan kolonlardan sadece bir tanesi nullable(not null olarak set edilmemişse) ise Computed Columns üzerinde Default Constraint tanımlayabiliyorsunuz. Fakat set ettiğiniz bu default constraint değerini SQL Server Computed Columns’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.
  • Bir Computed Column’u, deterministic olsun veya olmasın içerisindeki veriler güncellenemez. Dolayısıyla hiçbir zaman Insert veya Update cümlesi içerisinde güncellenecek alanlar içerisinde yer alamaz. Computed Column’a Insert ya da Update yapamazsınız.

SQL Server’da Computed Columns ile ilgili aşağıda birkaç örnek göreceksiniz.

CREATE TABLE OrderDetails (
	OrderID INT NOT NULL
   ,ProductID INT NOT NULL
   ,Quantity INT NOT NULL
   ,UnitPrice MONEY NOT NULL
   ,TotalPrice AS Quantity * UnitPrice -- Computed column kullanımı
);

Yukarıdaki örnek, “OrderDetails” adlı bir tablo oluşturur. Tablo, sipariş detaylarını saklar ve toplam fiyatı hesaplamak için Computed Columns kullanır. TotalPrice adlı Computed Columns, Quantity ve UnitPrice sütunlarının çarpımından hesaplanır ve tablodaki diğer sütunların değerlerine dayalı olarak otomatik olarak güncellenir.

Yeni bir sütun oluşturmak için Computed Columns kullanımı örneği ise aşağıdadır.

ALTER TABLE Customers
ADD FullName AS (FirstName + ' ' + LastName); -- Computed column kullanımı

Yukarıdaki örnek, “Customers” adlı bir tabloya FullName adlı yeni bir sütun ekler. FullName sütunu, FirstName ve LastName sütunlarındaki verilerin birleştirilmesiyle hesaplanır. Computed column kullanarak FullName sütunu otomatik olarak güncellenir.

Linkteki kaynağı da okuyabilirsiniz : https://www.sqlservertutorial.net/sql-server-basics/sql-server-computed-columns/

Herkese çalışma hayatında ve yaşamında başarılar kolaylıklar.

144 Kez Okundu

Yavuz Selim Kart

Yazılım ve veri tabanında bildiklerimi anlatmaya gayret ediyorum. Halen birçok programlama dili üzerinde araştırmalar yaparak kendimi geliştiriyorum. Bunlar haricinde Grafik Tasarım ve Wordpress konularına da ilgim bulunmakta. SEO ve Sosyal medya yönetimleri hakkında da bilgim mevcuttur. Kısaca çok çalışmayı seven azimli biriyim.

You may also like...

Yazı kopyalamak yasaktır!