Blog
Mert Özen'in yazılım geliştirme, backend, frontend ve DevOps üzerine blog yazıları.
Çok Dilli Veri: Ürün Adını TR ve EN Saklamak — Translation Table, JSON Kolon ve Fallback
Kullanıcının yönettiği çok dilli veri için en esnek seçenek, (EntityId, Culture, Name) key'li bir translation tablosu ve en-GB → en → tr gibi tek yerde kurulan bir fallback zinciridir. Yazı dil başına kolon, translation tablosu, SQL Server 2025 json kolonu ve ayrı bir translation service'i karşılaştırıyor; EF Core 10 LeftJoin ile fallback'i ve Türkçe I için collation seçimini gerçek çıktılarla gösteriyor.
Multi-Tenancy'de Veri İzolasyonu: Database-per-Tenant, Shared Schema ve Row-Level Security
Çoğu SaaS için en iyi denge, TenantId kolonlu paylaşılan tablolar, EF Core'da named bir tenant query filter'ı ve onun arkasında SESSION_CONTEXT ile beslenen SQL Server row-level security'dir. Yazı database-per-tenant, schema-per-tenant ve shared table modellerini karşılaştırıyor; tenant çözümlemeyi, background job'ları ve izolasyonu otomatik test etmeyi gerçek çıktılarla gösteriyor.
Settings Tabloları: Global → Tenant → Kullanıcı Override Hiyerarşisi
Çalışırken değişen, tenant ve kullanıcıya göre ezilen ayarlar için en sağlam yol, her ayarın tip, varsayılan, aralık ve en alt override seviyesini taşıyan bir tanımı ile bu tanıma bağlı tipli key-value değerlerdir; öncelik kuralı tek bir service'te, yazma doğrulamalı ve audit'li olur. Yazı EAV, tipli kolonlar, JSON belge ve dış store ile karşılaştırıyor ve EF Core'un nullable unique index'e eklediği gizli IS NOT NULL filtresini gösteriyor.
Para ve Yuvarlama: decimal, Money Value Object, KDV ve Kuruş Dağıtımı
Parayı doğru modellemek için tutarı para birimiyle birlikte taşıyan bir Money value object, C# ile SQL'de aynı açık yuvarlama kuralı ve bölme yerine kuruşu kaybetmeyen Allocate gerekir. Yazı Math.Round ile SQL ROUND'un 0,125'te ayrıştığını, satır ve toplam bazında KDV'nin 1 kuruş farkını, tarihli KDV oranı tablosunu (Kasım 2026 itibarıyla %20, %10, %1), EF Core complex type mapping'ini ve JSON'da string tutarı gerçek çıktılarla gösteriyor.