|
2004年5月13日
『テーブル設計は、悩みます』
制御系の収集されたデータを SQL Server で管理するシステムを先日作りました。
20 個ぐらいの小規模なテーブルから構成されるものですが、1 つのテーブルに記録されるレコードは膨大になってきます。
収集されたデータは、加工を施して、IIS を使って Web で閲覧表示を行います。
通常のビジネスアプリケーションであれば、テーブルを正規化させて、将来変更に耐えられるような設計をするところです。
ところが、制御系でそのような設計をすると、とんでもなく遅いシステムになることがあります。
参照整合性を利用し、複数のテーブルを連結させて、データを表示する。
このような当たり前の処理が、時として命取りになることもありますし、さらにロック解除待ちが発生すると、データ収集へ悪影響が出ることもあります。
データベースの教科書を見ると、第 1 正規化、第 2 正規化、第 3 正規化などのような解説がでています。
初心者の方は、何が何でも教科書に沿ったテーブル設計をしなければいけないと考えてしまいます。
しかし本当に大事なことは、システムが要求している仕様を満たすためには、何をすべきなのだろうか? という見極めです。
システムのモデル化をしたテーブルを作り、データを自動生成させるシステムを用意し、SQL Server に実際にデータを食わせて、SQL Server の挙動を監視してみて下さい。思わぬ問題が見つかることがあります。
そのような問題を解決するときには、正規化にこだわってはいけません。
無駄と思われるかもしれませんが、同じような列を用意したり、テーブルの連結を避けたりします。またインデックスの定義も変更する必要があることもあります。
テーブル設計の基本は正規化ですが、それがすべてではありません。
時と場合に応じて、柔軟な発想ができるようにしましょう。
|