Aynı uygulamayı birden fazla firmaya sunduğunuzda ilk mimari sorulardan biri şudur: her firmanın verisi nerede duracak? Üç yaygın yaklaşım vardır.
1. Ortak veritabanı, ortak şema
Tüm firmaların kayıtları aynı tablolarda durur; her satırda bir TenantId sütunu bulunur ve her sorgu bu değere göre süzülür.
- Artısı: En ucuz ve işletmesi en kolay seçenektir. Tek şema, tek migration.
- Eksisi: İzolasyon tamamen kodun doğruluğuna bağlıdır. Tek bir unutulmuş filtre, başka firmanın verisinin görünmesi demektir. Bir firmanın verisini yedeklemek, taşımak ya da silmek zordur.
2. Ortak veritabanı, kiracı başına şema
Her firma için ayrı bir şema açılır. İzolasyon veritabanı katmanında başlar, ama migration'lar şema sayısı kadar çalıştırılmalıdır.
3. Kiracı başına veritabanı
Her firmanın kendi veritabanı vardır. Uygulama, isteğin hangi firmaya ait olduğunu çözer ve doğru bağlantıya yönelir.
- Artısı: Güçlü izolasyon. Bir firmanın yedeği, geri dönüşü, taşınması ve silinmesi tek veritabanı işlemidir. Büyük bir firma diğerlerini yavaşlatmaz.
- Eksisi: Operasyon yükü. Çok sayıda veritabanının migration'ı, izlenmesi ve yedeklenmesi otomatikleştirilmelidir.
Hangisini seçmeli?
| Soru | Eğilim |
|---|---|
| Firmalar küçük, sayıları çok, veri hassasiyeti düşük mü? | Ortak şema |
| Müşteriler verilerinin ayrı olduğunu güvence olarak istiyor mu? | Kiracı başına veritabanı |
| Firma bazında geri yükleme ya da taşıma gerekecek mi? | Kiracı başına veritabanı |
| Operasyon ekibi küçük mü? | Ortak şema ya da şema başına |
Kiracıyı çözmek: asıl kritik nokta
Hangi yaklaşım seçilirse seçilsin, isteğin hangi kiracıya ait olduğu bir kez, merkezi bir yerde (ASP.NET Core'da genellikle bir middleware) belirlenmeli ve kod boyunca taşınmalıdır. İki ilke önemlidir:
- Sessiz geri dönüş (fallback) yoktur. Kiracı çözülemezse veya karşılık gelen veritabanı bulunamazsa istek reddedilir; "varsayılan veritabanına bağlan" gibi bir davranış, verinin yanlış yere yazılması riskini doğurur.
- Kiracı bilgisi kullanıcının kontrol ettiği bir değerden değil, doğrulanmış kimlik bilgisinden (ör. oturum anahtarındaki talep) gelmelidir.
Bizim tercihimiz
Deha ERP'de her firma kendi veritabanında çalışır ve kiracı çözümleyici isteği doğru veritabanına yönlendirir. Bunun nedeni verinin firmalar arasında net biçimde ayrılması ve firma bazında yedekleme ve geri dönüşün kolay olmasıdır. Bunun karşılığında migration ve yedekleme süreçlerini otomatik tutmak gerekir. Ayrıntılar için Deha ERP güvenlik dokümanına bakabilirsiniz.