Hesaplarda toplamak için günlük maliyeti izleyen bir şey yaratmam istendi ve bunu destekleyecek bir veritabanı tablosu şeması bulmaya çalışıyorum.
İşte bildiklerim
- Şirketin 2,5 milyondan fazla hesabı var
- Bunlardan şu anda ayda ortalama 200.000 çalışıyorlar (bu, şu anda düşük olan personel seviyelerine göre değişiyor)
- İzlemek istedikleri 13 farklı maliyet türü var ve gelecekte daha fazlasını ekleyebilecekleri konusunda uyardılar
- Maliyetlerin günlük olarak izlenmesini istiyorlar
- Maliyetler tüm envantere bölünmez. Aylık çalışan hesap sayısı (200.000) arasında bölünürler veya kullanıcılar bir grup hesaba maliyet uygulamak için hesap tanımlayıcıları girebilir veya maliyeti hangi hesaplara uygulayacaklarını belirtebilirler.
İlk düşüncem normalleştirilmiş bir veritabanı idi:
accountid tarih CostTypeId Miktar
Benim sorunum matematik yapmak. Bu masa hızla büyüyecek. 13 maliyet türünün tümünün cari ay için tüm çalışan hesaplara uygulandığı varsayılarak, bu ayda 200k * 13 * N days in month
75-80 milyon kayıt civarında veya yılda bir milyar kayıt civarındadır.
İkinci düşüncem onu biraz denormalize etmekti
accountid tarih Toplam tutar CostType1 CostType2 CostType3 CostType4 CostType5 CostType6 CostType7 CostType8 CostType9 CostType10 CostType11 CostType12 CostType13
Bu yöntem daha denormalize olur ve ayda 6 milyona kadar ( 200k * N days in month
) veya yılda yaklaşık 72 milyon kayıt oluşturabilir . İlk yöntemden çok daha azdır, ancak şirket gelecekte yeni bir Maliyet Türüne karar verirse, başka bir veritabanı sütununun eklenmesi gerekir.
İki yöntemden hangisini tercih edersiniz? Neden? Bunu daha iyi idare edebilecek başka bir alternatif var mı?
En çok hem yazlık hem de ayrıntılı raporlar gibi performans raporlarıyla ilgileniyorum. Masrafları hesaplara yayacak olan iş, etrafta kimse olmadığında gece çalışacaktır. İkincil bir endişe veritabanı boyutudur. Mevcut veritabanı zaten neredeyse 300GB ve diskteki alanın 500GB civarında olduğuna inanıyorum.
Veritabanı SQL Server 2005