RDBMS(SQL Serverなど)を使用してイベントソースデータを格納している場合、スキーマはどのようになるでしょうか?
抽象的な意味で話されているいくつかのバリエーションを見ましたが、具体的なものはありません。
たとえば、「製品」エンティティがあり、その製品への変更は、価格、コスト、説明の形式で発生するとします。私がするかどうかについて私は混乱しています:
- 製品のすべてのフィールドを含む「ProductEvent」テーブルを作成します。各変更は、そのテーブルの新しいレコードを意味し、必要に応じて「誰、何、どこ、なぜ、いつ、どのように」(WWWWWH)を意味します。コスト、価格、または説明が変更されると、製品を表すまったく新しい行が追加されます。
- 製品のコスト、価格、および説明を、外部キー関係を使用してProductテーブルに結合された個別のテーブルに格納します。これらのプロパティに変更が発生した場合は、必要に応じてWWWWWHを使用して新しい行を書き込みます。
- WWWWWHに加えて、イベントを表すシリアル化されたオブジェクトを「ProductEvent」テーブルに格納します。つまり、特定の製品のアプリケーション状態を再構築するために、イベント自体をアプリケーションコードでロード、シリアル化解除、および再生する必要があります。 。
特に上記のオプション2について心配しています。極端に言うと、製品テーブルはプロパティごとにほぼ1テーブルであり、特定の製品のアプリケーション状態をロードするには、各製品のイベントテーブルからその製品のすべてのイベントをロードする必要があります。このテーブル爆発は私に悪臭を放ちます。
「依存している」と私は確信しており、単一の「正解」はありませんが、何が受け入れ可能で何がまったく受け入れられないかを感じ取ろうとしています。また、NoSQLがここで役立つことも知っています。集約ルートに対してイベントを格納できます。つまり、オブジェクトを再構築するためのイベントを取得するためのデータベースへの単一の要求のみですが、ここではNoSQL dbを使用していません。瞬間なので、私は代替案を探しています。