最近、私のプロの同僚と私はインターネット(より正確には、ハブレのLAN)で特定のシステムのアーキテクチャについて話し合いましたが、1つの問題について論争がありました。
さまざまな材料が保管されている倉庫があり、材料の受け取りと消費に関する文書があり、「材料、量」という情報が1対多の関係で文書に記録されています。データベースには、倉庫内の材料の現在の可用性に関する情報を含むテーブルが含まれています。ドキュメント用のテーブルとそれらの位置用のテーブルがあります。それらを「current_stocks」、「documents」、「document_positions」と呼びましょう。
テーブル「current_stocks」はデータの非正規化と見なす必要がありますか?
同僚の主張は、「current_stocks」のデータはシステムの存続期間全体にわたってドキュメントから計算できるため、これは非正規化であるというものです。
私の主張は、現在の状態は変更履歴から計算できるため、これは非正規化ではないということです。そうでなければ、「正規化」という用語は意味がありません。具体的には、現在の状態をモデル化することを指します。これらは異なるモデルであり、「current_stocks」はウェアハウスの状態をモデル化し、「document_positions」はドキュメント内のテキスト行をモデル化します。