2012-04-19 5 views
2

未処理の「下位レベル」テーブルへの変更が必要なシステムで、データベース/理想的には、基礎となるデータに基づいてビューを格納するさまざまな異なるテーブルを自動的に伝播させるためです。ローテーブルが自動的にサマリーテーブルに反映されるようにするための最適なデータベース設計/アーキテクチャ

簡単な例を示します。異なるスーパーマーケット

  • 例えば の食品成分と価格の

    1. 様々なテーブル:

      は、私は以下の表を持っている想像してみてください。
  • 各成分
    • 例えばための最も安価な場所を格納するテーブル{:1.99、バター0.79卵}と、そしてウォルマートテーブル{150:1.19、バターケチャップ}を有するセーフウェイテーブル。 {バター=>ウォルマート:0.79}
  • レシピの最も安い価格でレシピを格納する表(テーブルから食材の最も安い価格から構成される2
    • 例えば{「ketchupy卵。 - 朝食=>トータル:3.97、成分=>バター:0.79、卵:1.99、ケチャップ:1.19
  • いくつかの代替のレシピの中で最も安い朝食レシピを格納するテーブル
  • 今想像私はworがあるkers外出し、テーブル(1)の値を毎時更新する。テーブル1で変更されたものに依存するテーブル2のエントリを強制的に更新するデータベース設計またはアーキテクチャが存在し、同様にテーブル3およびテーブル4に変更を伝播させるでしょう。一連のカスケードジョブがありましたが、あまり複雑ではなく、よりエレガントな方法で作業しているのかどうか疑問に思っていました。

    ありがとうございました。

    答えて

    2

    CQRS patternによく似ています。アイテムを格納するときは、1つのデータソースしか持たないようにしてください。リンク先の記事から

    CQRSはコマンドクエリの責任分掌の略です。それは私が最初にGreg Youngによって記述されたパターンです。その中心は、情報を読み取るために使用するモデルとは異なるモデルを使用して情報を更新できるという単純な概念です。

    CQRSは、1種類の情報(更新モデル)を取り込んで、クエリできるもの(読み取り/クエリモデル)に変換するのに役立ちます。

    +0

    いくつかの明確化。このシステムでは、毎日コア価格を数十万回更新しています。これらの変更を集計や集計(合計/最大/最小)である別のテーブルにエレガントにプッシュ/伝播する方法があるかどうかを理解しようとしています。原価格に基づいています。私は定期的にサマリーテーブルに変更を取り込むことができると私は理解していますが、私は最初の更新の結果としてそれらをプッシュする方法があるのだろうかと思っています。 – andrewl

    +0

    CQRSは定期的に実行しません。 Readモデルを直接変更します。読み取りモデルは、更新モデルに変更が保存されるときにpub/subパターンによって更新される非正規化データベースにすることができます。 – jgauffin

    2

    「エレガントな方法」は、テーブルを適切に正規化することだと思います。

    たとえば、Safeway用のテーブルとWalmart用のテーブルは1つではなく、代わりにSafewayとWalmartの両方をリストする 'Retailer'テーブルが1つあります。 リストに 'Product'卵、ケチャップなど その後、retailer_idが一覧表示されます第三、言う「retail_item」、PRODUCT_ID、価格など

    、あなたは単にあなたが提起したすべての質問を照会することができます...

    関連する問題