English
MS SQL & PostgreSQL

Projeye Göre Veritabanı Seçimi: SQL Server mı, PostgreSQL mi

İki farklı ilişkisel veritabanı, iki farklı proje grubu.

· Full Stack Developer · Güncellendi:

Hangi projede hangi veritabanının kullanılacağı çoğu zaman dilin kendisiyle değil, ekip ve altyapı tercihiyle ilgili bir karar. SQL Server ve PostgreSQL ikisi de ilişkisel: veriyi tablolar halinde tutuyor, SQL ile sorguluyorsun. Aralarındaki fark günlük kullanımda çoğunlukla lisanslama, araç ekosistemi ve bazı performans ya da özellik detaylarında ortaya çıkıyor; temel CRUD işlemleri açısından birbirine oldukça yakınlar.

Apartman yönetim sistemi ve kurumsal iş yönetim platformunda SQL Server kullanıyorum. YODER bağış platformu ve otel rezervasyon AI asistanında ise PostgreSQL tercih ettim. Proje bazında hangisinin seçildiği genelde altyapı ve ekip tercihiyle ilgili; ikisiyle de EF Core üzerinden çalışıp Clean Architecture'daki repository katmanını aynı şekilde kuruyorum.

PostgreSQL'le ilk ciddi tecrübem üniversitede oldu: dinamik sepet ve sipariş yönetimi olan bir e-ticaret web uygulamasında veritabanı tarafını PostgreSQL üzerine kurmuştum. Sepete ürün eklenmesinden sipariş durumunun güncellenmesine kadar tüm akış, o zaman kendi kurduğum ilişkisel modelleme üzerinden yürüyordu.

İkisi arasında günlük kullanımda asıl fark ettiğim yer string karşılaştırma davranışı oldu: SQL Server varsayılan collation'ıyla büyük/küçük harfe duyarsız çalışırken PostgreSQL varsayılan olarak duyarlı. Yani EF Core üzerinden yazdığın aynı LINQ sorgusu, örneğin bir alana tam eşitlik uygulayan basit bir filtre bile, hangi veritabanına bağlandığına göre farklı sonuç dönebiliyor; bunu migration yazarken değil, testte fark etmek daha maliyetli oluyor.

EF Core'un ORM katmanı bu farkları büyük ölçüde gizliyor ama tamamen yok etmiyor; bir projeyi SQL Server'dan PostgreSQL'e taşımanın 'connection string'i değiştirip bitsin' kadar basit olduğunu düşünmek yaygın bir yanılgı. Case sensitivity dışında, raw SQL kullanılan yerler, sequence/computed column gibi motor özelinde davranan detaylar migration'da elle kontrol gerektiriyor. Bir platformun farklı modüllerini bilinçli olarak farklı veritabanı motorlarında tutmak da nadiren tercih ettiğim bir şey; iki ayrı yedekleme ve izleme kurulumu yönetmek, ekip ya da altyapı gerçekten zorlamıyorsa fazladan operasyonel yük demek.