[pgsql-jp: 27747] 継承を使った標準化の是非

Mashiki mashiki @ yanah.com
2002年 10月 25日 (金) 20:17:56 JST


Mashikiです。


あるプロジェクトにてデータベース設計の標準化として、
更新する可能性のあるテーブルには全て、「削除フラグ」
「登録日時」、「更新日時」、「登録者」、「更新者」の
管理情報フィールドを設けるという決めがあったとします。


対象のテーブルのCreate文に必ず

  fDelete BOOL Default false Not Null,
  dtEntry TIMESTAMP Default now() Not Null,
  dtUpdate TIMESTAMP Default now() Not Null,
  idUserEntry CHAR(7) Not Null,
  idUserUpdate CHAR(7) Not Null

が、含まれてきます。


で、以下のちょっとした問題が現れてくるのですが

・これはアプリケーションでは意味の無いのデータなので、
 (fDeleteはアプリケーションでも意味を持ちますが)
 設計書やCreate文の中で現れてくるのが邪魔です。
・テーブルの数が多くなったとき、タイプミスや付け忘れの
 可能性が高くなる


これを、例えば以下のようなテーブルを1つ作っておいて

Create Table StanderdInfo (
  fDelete BOOL Default false Not Null,
  dtEntry TIMESTAMP Default now() Not Null,
  dtUpdate TIMESTAMP Default now() Not Null,
  idUserEntry CHAR(7) Not Null,
  idUserUpdate CHAR(7) Not Null
);

他のテーブルを作るとき必ず継承をさせることで解決で
きそうな気がします。

気になるのは、

・通常のテーブルの中にいちいち定義する場合と比べて
 著しくパフォーマンスを落とすようなことが無いか?
・テーブル設計に通常の継承を使いたい場合、多重継承
 となるがそのことはなにか問題を生じないか
・テーブルにより、登録日のdtEntryにインデックスを
 張る可能性があるが、可能か、または何か問題がないか。

どなたか、このようなことを実際に試してみた方はいらっ
しゃいませんか。これは駄目という意見も歓迎です。



pgsql-jp メーリングリストの案内