Olay kaynaklı verileri depolamak için bir RDBMS (örn. SQL Sunucusu) kullanıyor olsaydım, şema nasıl görünebilirdi?
Soyut anlamda konuşulan birkaç varyasyon gördüm, ama somut hiçbir şey yok.
Örneğin, bir kişinin "Ürün" varlığına sahip olduğunu ve bu üründe yapılan değişikliklerin şu şekilde olabileceğini varsayalım: Fiyat, Maliyet ve Açıklama. Şunu yapıp yapmayacağım konusunda kafam karıştı:
- Bir ürün için tüm alanları içeren bir "ProductEvent" tablosuna sahip olun, burada her değişikliğin o tabloda yeni bir kayıt anlamına geldiği ve buna ek olarak "kim, ne, nerede, neden, ne zaman ve nasıl" (WWWWWH)). Maliyet, fiyat veya açıklama değiştirildiğinde, Ürünü temsil etmek için yepyeni bir satır eklenir.
- Ürün Maliyetini, Fiyatını ve Açıklamasını, yabancı anahtar ilişkisiyle Ürün tablosuna birleştirilmiş ayrı tablolarda depolayın. Bu özelliklerde değişiklik olduğunda, uygun şekilde WWWWWH ile yeni satırlar yazın.
- WWWWWH'yi ve olayı temsil eden serileştirilmiş bir nesneyi bir "ProductEvent" tablosunda depolayın; bu, belirli bir Ürün için uygulama durumunu yeniden oluşturmak için olayın kendisinin yüklenmesi, serileştirilmesi ve yeniden oynatılması gerektiği anlamına gelir .
Özellikle yukarıdaki 2. seçenek için endişeleniyorum. En uç noktaya bakıldığında, ürün tablosu, mülk başına neredeyse bir tablo olacaktır; belirli bir ürün için Uygulama Durumunun nereye yükleneceği, her ürün olay tablosundan o ürün için tüm olayların yüklenmesini gerektirecektir. Bu masa patlaması bana yanlış kokuyor.
Eminim "duruma göre değişir" ve tek bir "doğru cevap" olmasa da, neyin kabul edilebilir olduğu ve neyin tamamen kabul edilemez olduğu konusunda bir fikir edinmeye çalışıyorum. Ayrıca NoSQL'in burada yardımcı olabileceğinin de farkındayım, burada olayların bir toplu köke karşı depolanabileceği, yani nesneyi yeniden oluşturmak için olayları almak için veritabanına yalnızca tek bir istek var, ancak burada bir NoSQL veritabanı kullanmıyoruz. an bu yüzden alternatifler için etrafta hissediyorum.