Cy Logic Insights

Çok Şirketli ERP Mimarilerinde Maliyet Dağılımı ve SQL Optimizasyonu

Holding yapısındaki işletmelerde ortak giderlerin alt şirketlere otomatik dağıtımı ve veritabanı performansının artırılması için teknik adımlar.

Çok Şirketli ERP Mimarilerinde Maliyet Dağılımı ve SQL Optimizasyonu

Birden fazla tüzel kişiliğe sahip holding yapısındaki işletmelerde, ortak giderlerin ve merkez maliyetlerin alt şirketlere adil ve otomatik olarak paylaştırılması kritik bir süreçtir. Kurumsal Yazılım & ERP çözümlerinde bu süreçlerin veritabanı katmanında doğru kurgulanması, dönemsel kapanışların süresini ve veri bütünlüğünü doğrudan etkiler. Bu teknik rehberde, çok şirket yapıları içinde maliyet dağıtımı süreçlerini ve SQL optimizasyonu yöntemlerini inceliyoruz.

1. Veritabanı Katmanında Çok Şirketli Mimari Tasarımı

Çok şirket yapıları, veritabanı tasarımında iki temel yaklaşımla ele alınır: tek veritabanı içinde tenant tabanlı ayrım veya her şirket için ayrı şemalar. Ortak giderlerin dağıtımı gibi çapraz işlemlerde tek tabanlı veya merkezi bir hesaplama katmanı kullanmak, veri tutarlılığını korumak açısından avantaj sağlar.

  • Tüzel kişiliklerin ana verileri merkezi bir tabloda tutulmalıdır.
  • Dağıtım anahtarları (personel sayısı, ciro, metrekare vb.) periyodik olarak güncellenebilir tablolarda saklanmalıdır.
  • Yabancı anahtar (foreign key) kısıtları, şirketler arası tutarsız finansal hareketlerin girişini engellemek üzere yapılandırılmalıdır.

2. Maliyet Dağıtımı Algoritmalarının SQL ile Kurgulanması

Merkezî maliyetlerin alt şirketlere paylaştırılması, karmaşık matris hesaplamalarını gerektirir. Bu süreç uygulama katmanında (application tier) yürütüldüğünde yüksek ağ trafiğine neden olabilir. Bu nedenle hesaplamaların veritabanı içinde, verinin bulunduğu yerde (in-database processing) yapılması önerilir.

  • Dağıtım oranlarını hesaplayan geçici tablolar (temp tables) veya tablo değişkenleri tanımlayın.
  • İşlem maliyetlerini düşürmek için imleçler (cursors) yerine set-based (küme bazlı) T-SQL sorguları tercih edin.
  • Dağıtım sonuçlarını muhasebe fişlerine dönüştüren adımları tek bir transaction içinde toplayarak ACID kurallarını koruyun.

3. SQL Optimizasyonu ve Dönemsel Kapanış Performansı

Ay sonu veya yıl sonu dönemsel kapanışlarında milyonlarca satırlık finansal veri işlenir. SQL optimizasyonu yapılmamış sorgular, sistem kilitlenmelerine ve timeout hatalarına yol açabilir. Performansı artırmak için aşağıdaki teknikleri uygulayabilirsiniz:

  • Dizinleme (Indexing): Maliyet dağıtım sorgularında kullanılan şirket ID, dönem ve hesap kodu kolonları üzerine uygun non-clustered dizinler ekleyin.
  • İstatistik Güncellemeleri: Büyük hacimli geçici tablolardan sonra UPDATE STATISTICS komutunu kullanarak sorgu optimizerının doğruexecution plan seçmesini sağlayın.
  • Parçalama (Partitioning): Yüksek hacimli yevmiye ve hareket tablolarını dönemsel bazda partition yaparak tarama (table scan) maliyetlerini minimize edin.

4. Veri Bütünlüğü ve Hata Yönetimi

Kurumsal yazılım mimarilerinde dağıtım sırasında oluşabilecek elektrik kesintisi, yetersiz bütçe kalemi veya eksik veri gibi durumlarda sistemin yarı yolda kalmaması gerekir. Stored procedure içinde TRY...CATCH blokları kullanarak hatalı durumlarda tüm veritabanı işlemlerini ROLLBACK edin ve hata loglarını merkezi bir tabloda saklayın.

5. Varsayımsal Çalışma Örneği ve Senaryo Analizi

Holding bünyesinde faaliyet gösteren holding merkezinin 1.200.000 TL tutarındaki IT ve insan kaynakları ortak giderinin, üç farklı alt şirkete (Şirket A, Şirket B, Şirket C) adil bir şekilde paylaştırıldığını varsayalım. Bu senaryoda dağıtım anahtarı olarak personel sayısı, aktif büyüklük ve aylık ciro verilerinin ağırlıklı ortalaması kullanılır. Süreç, veritabanı içerisinde çalışan bir saklı yordam (stored procedure) vasıtasıyla yürütülür. İlk adımda, merkezi maliyet tablosundan ilgili döneme ait toplam tutar çekilir ve geçici bir tablo değişkenine atanır. Ardından, alt şirketlerin güncel dağıtım oranları hesaplanarak küme bazlı bir güncelleme sorgusu çalıştırılır. Trade-off analizi açısından, hesaplamanın veritabanında yapılması ağ trafiğini sıfıra yakın tutarken, veritabanı sunucusunun CPU ve bellek tüketimini geçici olarak artırır. Hata yönetimi tarafında, eğer herhangi bir alt şirketin dağıtım anahtarı sıfır veya eksik girilmişse, sistem işlem hacmini durdurmadan ilgili kalemi manuel inceleme kuyruğuna aktarır ve işlem log tablosuna uyarı kaydı düşer. Bu sayede dönemsel kapanış süreçleri kesintiye uğramadan tamamlanır ve finansal denetim izleri eksiksiz olarak saklanır.

6. Ayrıntılı Uygulama Kontrol Listesi

Maliyet dağıtımı ve SQL optimizasyonu projelerini canlı ortama almadan önce izlenmesi gereken kritik adımları içeren bir kontrol listesi, operasyonel riskleri minimuma indirir. İlk olarak, veri tabanı tasarım aşamasında şirket bazlı şema veya tenant ayrımlarının foreign key kısıtları ile korunduğundan emin olun. İkinci olarak, dağıtım anahtarlarının tutulduğu tablolar üzerinde periyodik veri doğrulama kısıtlamaları tanımlayın. Üçüncü aşamada, yüksek hacimli yevmiye ve hareket tabloları için dönemsel partition stratejilerinin aktif edildiğini ve execution plan testlerinin yapıldığını doğrulayın. Performans optimizasyonu için, sık kullanılan sorgularda doğru non-clustered dizinlerin oluşturulduğunu ve maliyet hesaplama scriptlerinin set-based mantıkla yazıldığını kod incelemesi ile teyit edin. Dördüncü olarak, olası sistem kesintileri veya kilitlenme (deadlock) durumlarına karşı TRY...CATCH blokları ile çevrelenmiş transaction mekanizmalarının ROLLBACK senaryolarını test edin. Beşinci aşamada ise, tüm bu süreçlerin Kurumsal Yazılım & ERP standartlarına uygun olarak belgelendirilmesini ve yetkilendirme matrisinin güncellenmesini sağlayın. Bu disiplinli yaklaşım, uzun vadeli sistem kararlılığını garanti eder.

Kaynaklar