2012-03-21 8 views
1

私の会社で既製のアプリケーションで作業していますが、ベンダーが実装している興味深いデータベース機能があります。私はそれが前に生産で使われているのを見たことがなく、私はそれについてさらにいくつかの情報を得ることを望んでいます。エンティティを識別するためにレコードIDに「エンティティタイプ番号」を使用する

各データベーステーブルは、特定のエンティティタイプを指します。例えば、TBL_Person,TBL_Organisation,TBL_Address。ただし、各表のIDは常に同じ桁の数字で始まります。すべてTBL_Addressのレコードは1401で始まり、すべてTBL_Personのレコードは1500で始まります。その後、ユニークな部分が追加されます。次のように私は、ビューの開発の観点から、あるsheerly見ることができるものから

利点は、以下のとおりです。

  • それは巨大データベース(約600テーブル、150を超える列を持つ多くの)です。したがって、テーブルをスキャンしているときに、WIdRIdLId、またはUnhelpfullyNamed_Idなどの列が見つかった場合、最初の4桁の数字を入力する小さなプログラムのおかげで、すぐにわかります。エンティティは、彼らが同じテーブル内のエンティティのさまざまなバリエーションを保存
  • )とは何か、テーブルにそれを見つけるために - 例えばそれが本当に必要でない限り、このだった場合は、

デメリット(一般的な意味での継承などを使用する必要はありませんので、TBL_Vehicleレコードは、車(1234年)、トラック(2345)、バイク(3456)であるかもしれません他の場所で使用)のようになります。

  • は、テーブルデザインと怠惰を奨励 -
  • 同じテーブルで多くのエンティティタイプを格納した場合に冗長列この
を認識していないが誰であるか、それを見て、開発者の混乱を追加

このデザインパターン/機能の用語はありますか?これを実装する他のよく知られているデータベースはありますか?他の不都合/利点はありますか?このような例では

答えて

1

つのフィールドに2つの情報を統合することで、この「デザイン」はatomicityの原則、したがって、第1正規形に違反します。

論理的に、同じ複合主キー{type, id}を有することによって達成されている可能性があります。私は、タイプとIDを "マージする"という決定は、アプリケーション設計と "シンプル"なキーを持っているという欲求によってもたらされたと推測しています。

1

、最初の場所でNOデータベース設計がしばしばあります。 すべてがアプリケーションレベルで設計され、実装されています(オブジェクト指向の可能性があります)。物事はどこかに格納されます(この場合はデータベースに格納されます)。データベースは単なる「アプリケーションのストレージ」です。

データベース設計が適用される場合には、データ中心のモデルが使用されます。終了したら、データベースは「独立して立つ」ことができます。アプリケーションがデータを意味をなさないようにする必要はありません。

ORMマッパーが関与している場合とそうでない場合がありますので、これらの大きなテーブルについては、単一テーブル継承がマッパーによって実装されている可能性があります。

関連する問題