SQL Server’daki Tüm Tablo Türleri


Microsoft SQL Server sadece klasik tablolardan ibaret değildir.

Modern veri yönetimi ihtiyaçlarına göre geliştirilen 7 farklı tablo türü, performans, güvenlik, esneklik ve geçmiş takibi açısından birbirinden güçlü özellikler sunar.
Bu yazıda SSMS (SQL Server Management Studio) üzerinde yer alan New → Table menüsündeki her tablo türünü tek tek inceleyeceğiz.



1- Klasik “Table” (Kalıcı Tablo)

Bu tablo türü, veri tabanlarının en temel yapı taşıdır.
Veriler disk üzerinde kalıcı olarak saklanır. Sunucu kapatılsa dahi içerik korunur.
Her sütun (column) bir veri tipine sahiptir ve tablolar arası ilişkiler (foreign key) bu yapılar üzerinden kurulabilir.

⚙️ Oluşturma Örneği :

CREATE TABLE Customers (
CustomerID INT PRIMARY KEY IDENTITY(1,1),
FullName NVARCHAR(100),
City NVARCHAR(50),
CreatedDate DATETIME DEFAULT GETDATE()
);

💡 Ne Zaman Kullanılır?

  • Gerçek veri saklama işlemlerinde
  • Uygulama ana tablolarında (Müşteri, Ürün, Sipariş vb.)
  • Raporlama ve analizlerde

📈 Avantajları

  • Veri bütünlüğü (constraints, primary/foreign key)
  • Kalıcılık (diskte saklanır)
  • Transaction destekli güvenilir yapı

2- Memory Optimized Table (Bellek İçi Tablo)

In-Memory OLTP teknolojisiyle çalışan bu tablo türü, verileri RAM üzerinde tutar.
Yani geleneksel tablolara göre çok daha hızlı okuma/yazma performansı sağlar.

Örnek Sorgu :

CREATE TABLE FastOrders (
OrderID INT PRIMARY KEY NONCLUSTERED,
Amount DECIMAL(10,2)
)
WITH (MEMORY_OPTIMIZED = ON, DURABILITY = SCHEMA_AND_DATA);

Detaylar

  • MEMORY_OPTIMIZED = ON → verinin RAM üzerinde tutulacağını belirtir.
  • DURABILITY = SCHEMA_AND_DATA → sistem kapanınca bile verinin diske yazılmasını sağlar.
    Eğer sadece SCHEMA_ONLY seçilirse tablo yapısı kalır ama veriler silinir.

Kullanım Alanları

  • Finans, borsa, oyun gibi gerçek zamanlı sistemlerde
  • Yüksek trafiğe sahip API uygulamalarında
  • Saniyede binlerce işlem yapan sistemlerde

Avantajları

  • Ultra düşük gecikme süresi
  • Lock-free architecture (kilitlenmesiz erişim)
  • Transaction’larda bile çok hızlı performans

3- Temporal Table (Zaman Tabloları)

Temporal tablolar, veri değişikliklerinin geçmiş versiyonlarını otomatik olarak tutar.
Yani her kayıt güncellendiğinde, eski sürümü ayrı bir “history table” içinde saklanır.

Bu sayede “bu kayıt geçen ay nasıldı?” sorusuna anında cevap alabilirsin.

Örnek Sorgu :

CREATE TABLE EmployeeHistory (
EmpID INT PRIMARY KEY,
Name NVARCHAR(100),
Salary DECIMAL(10,2),
ValidFrom DATETIME2 GENERATED ALWAYS AS ROW START,
ValidTo DATETIME2 GENERATED ALWAYS AS ROW END,
PERIOD FOR SYSTEM_TIME (ValidFrom, ValidTo)
)
WITH (SYSTEM_VERSIONING = ON);

Kullanım Senaryoları

  • Personel maaş veya adres geçmişi takibi
  • Finansal kayıt değişimlerinin loglanması
  • Denetim (audit) amaçlı sistemler

Avantajları

  • Otomatik geçmiş saklama
  • Manuel trigger yazmaya gerek kalmaz
  • Zaman bazlı sorgular kolaylaşır

SELECT * FROM EmployeeHistory
FOR SYSTEM_TIME AS OF ‘2025-01-01’;

→ Bu sorgu, 1 Ocak 2025’teki kayıtların nasıl olduğunu getirir.


4- Ledger Table (Defter Tablosu / Blockchain Yapısı)

SQL Server 2022 ile gelen Ledger Table, veri değişikliklerinin kriptografik olarak imzalanarak saklanmasını sağlar. Her satırın değişim geçmişi hash’lenir ve zincir mantığıyla korunur.
Bu yapı, blockchain prensibine çok benzer.

Örnek Sorgu :

CREATE LEDGER TABLE Transactions (
TxnID INT PRIMARY KEY,
Amount MONEY,
CreatedAt DATETIME DEFAULT GETDATE()
);

Kullanım Alanları

  • Finans, muhasebe, denetim kayıtları
  • Sağlık veya kamu sektöründe değişmez veri gereksinimi
  • Veri manipülasyonunun engellenmesi gereken ortamlarda

Avantajları

  • “Bu kayıt sonradan değiştirildi mi?” sorusuna net yanıt
  • Kurumsal güvenlik ve denetim uyumluluğu
  • Manipülasyona karşı kriptografik koruma

5- Graph Table (Graf Tabloları)

Graf tabanlı veritabanı mantığıyla çalışır.
Veri varlıkları düğümler (nodes), aralarındaki ilişkiler ise kenarlar (edges) olarak saklanır.
Yani “kimin kimi tanıdığı”, “hangi ürünün hangi kategoride olduğu” gibi bağlantılar doğal biçimde modellenir.

Örnek Sorgu :

CREATE TABLE Person (
ID INT PRIMARY KEY,
Name NVARCHAR(100)
) AS NODE;

CREATE TABLE Knows AS EDGE;

Kullanım Alanları

  • Sosyal ağ uygulamaları
  • Öneri sistemleri (Netflix, Spotify tarzı)
  • Kurumsal ilişki haritaları (ör. çalışan -> departman)

Avantajları

  • Karmaşık ilişkileri modellemek kolay
  • JOIN işlemleri yerine doğal graph sorguları kullanılabilir :

SELECT Person1.Name, Person2.Name
FROM Person Person1, Knows, Person Person2
WHERE MATCH(Person1-(Knows)->Person2);


6- External Table (Harici Tablo)

External tablo, SQL Server dışındaki veri kaynaklarına (örneğin Azure Blob, Hadoop, CSV) bağlantı kurarak veri sorgulamayı sağlar.
Yani veriyi içeriye taşımadan, dışarıdaki dosyaları sanki SQL tablosuymuş gibi kullanabilirsin.

Örnek Sorgu :

CREATE EXTERNAL TABLE SalesExternal (
ID INT,
Amount MONEY
)
WITH (
DATA_SOURCE = MyAzureStorage,
LOCATION = ‘/salesdata/’,
FILE_FORMAT = MyCSVFormat
);

Kullanım Alanları

  • Büyük veri (Big Data) entegrasyonları
  • Bulut depolama sorgulamaları
  • Veri gölü (data lake) erişimleri

Avantajları

  • Büyük veriyi içeri taşımadan sorgulama
  • Depolama maliyetini düşürür
  • ETL süreçlerinde hız kazandırır

7- File Table (Dosya Tabloları)

FileTable, SQL Server ile Windows dosya sistemini birleştiren özel bir yapıdır.
Yani dosyalar (PDF, JPG, DOCX) fiziksel olarak diskte tutulurken, meta verileri SQL Server’da tablolaştırılır.

Bu sistemin çalışması için FILESTREAM özelliği aktif olmalıdır.

Örnek Sorgu :

CREATE TABLE Documents AS FILETABLE;

Kullanım Alanları

  • Kurumsal belge yönetim sistemleri
  • Dosya arşivleme ve sürüm takibi
  • Uygulama içinden dosyaya erişim (path-based)

Avantajları

  • Dosya sistemi + SQL entegrasyonu
  • Windows Explorer’dan erişim
  • Backup/restore işlemlerinde tam kontrol

Sonuç: Hangi Tablo, Hangi Senaryoda Kullanılır?

Şimdi bir adım geriye çekilip büyük resme bakalım.
SQL Server bize sadece “veri depolamak” için değil, veriyi doğru yerde, doğru biçimde ve doğru hızda yönetmek için bu kadar fazla tablo türü sunuyor. Her bir tablo, farklı bir ihtiyaca hitap ediyor.
Birini performans için, birini geçmiş kayıt takibi için, birini güvenlik için, bir diğerini dış sistemlerle entegre çalışabilmek için kullanıyoruz.

Diyelim ki klasik bir e-ticaret sistemin var.

Sipariş, ürün, müşteri bilgilerini kaydettiğin tablolar elbette normal kalıcı tablolar olacak.
Çünkü bu verilerin sürekli erişilebilir, güncellenebilir ve güvenilir olması gerekiyor.
Ama aynı sistemde, anlık olarak en çok satan ürünleri hesaplayan bir modül varsa — burada memory optimized tablo kullanarak hız kazanabilirsin. RAM üzerinde çalışan bu tablo, her milisaniyenin önemli olduğu yüksek trafikli ortamlarda fark yaratır.

Peki geçmiş veriyi korumak istiyorsan?

Bir müşterinin adresi, bir çalışanın maaşı, ya da bir ürünün fiyatı zamanla değişiyorsa, işte o noktada temporal table devreye giriyor.
Bu tablo türü geçmişi senin adına otomatik olarak saklıyor.
Kısacası “ben o kaydı değiştirdim ama eskisi neydi?” diye düşünmene gerek kalmıyor — SQL Server senin yerine tüm versiyonları tutuyor.

Daha da ileri gidelim:

Kayıtlarının değiştirilemeyeceği, silinemeyeceği bir sistem kurmak istiyorsan,
örneğin bir muhasebe defteri ya da denetim sisteminde, ledger table seni kurtarır.
Bu tablo tıpkı bir blockchain gibi çalışır — verinin bütünlüğünü matematiksel olarak garanti eder.
Kimse geriye dönüp bir satırı gizlice değiştiremez, çünkü her işlem kriptografik olarak zincirlenmiştir.

Eğer sistemin sosyal ağ, bağlantı haritası veya ilişki analizine dayanıyorsa,
yani “kim kimi tanıyor”, “hangi departman kiminle çalışıyor”, “hangi cihaz hangi sensörle iletişimde” gibi ilişkileri incelemek istiyorsan, o zaman graph tabloları tam sana göre.
Burada klasik ilişkisel yapıların sınırlarını aşar, veriyi bir ağ gibi düşünebilirsin.
SQL Server bunu senin için düğümler (node) ve kenarlar (edge) şeklinde saklar.
Karmaşık JOIN’lerle uğraşmadan ilişkileri doğal biçimde sorgularsın.

Büyük veriye geldiğimizde iş değişiyor.
Artık tüm veriyi içeri taşımak mantıklı değil, değil mi?
Milyonlarca satırlık log dosyalarını veya Azure Blob’da duran CSV verilerini SQL Server’a aktarmak yerine,
external table kullanarak bu verileri yerinde sorgulayabilirsin.
Bu hem zaman kazandırır hem de veri transfer maliyetini ortadan kaldırır.

Son olarak, işin dosya boyutuna geldiğimizde karşımıza file table çıkıyor.
Resimler, PDF’ler, belgeler… Hepsini SQL Server’a gömüp veri tabanı dosyasını şişirmek yerine,
diskte tutup SQL içinden yönetebilmek inanılmaz bir kolaylık.
FileTable tam da bunu sağlıyor. Windows dosya sistemiyle SQL’i birleştiriyor;
yani hem Explorer’dan erişebiliyor, hem de SQL sorgularıyla yönetebiliyorsun.

Tüm bu tablo türlerini bir araya getirdiğinde aslında SQL Server’ın ne kadar esnek bir mimariye sahip olduğunu görüyorsun.
Her tablo bir “araç”, ama hangi aracın kullanılacağı senaryoya bağlı.
Bir usta tamirci, her işte aynı tornavidayı kullanmaz — sen de bir DBA olarak her projede aynı tablo türünü kullanmamalısın.

  • Kalıcı tablolar sağlam bir temel sağlar.
  • Bellek içi tablolar hız kazandırır.
  • Zaman tabloları geçmişi güvenle saklar.
  • Ledger tabloları doğruluğu kanıtlar.
  • Graph tabloları ilişkileri anlamlandırır.
  • External tablolar veriyi dış dünyayla buluşturur.
  • File tabloları dosyaları sistemin parçası haline getirir.

SQL Server’da tablo seçimi, bir tasarım kararıdır.
Doğru seçimi yapmak sistemini hızlandırır, ölçeklenebilir hale getirir ve veri bütünlüğünü korur.
Yanlış seçimi yapmak ise yıllar sonra bile seni performans ve bakım sorunlarıyla uğraştırabilir.

🔚 Sonuç olarak:
SQL Server’da tablo türleri sadece seçenek değil, stratejidir.
Bu stratejileri bilmek seni “veri tabanı kullanan biri” olmaktan çıkarır,
“veri tabanı yöneten biri” yapar.
Gerçek fark da zaten burada başlar.

Yazar : Nedim Akıl – DBA

Linkedin : https://www.linkedin.com/in/ndmakl/

Leave a Reply

Your email address will not be published. Required fields are marked *