2010-12-14 11 views
0

私は現在アプリケーションを設計しており、どのように定数パラメータテーブルを設計するべきかを知る必要があります。また、アプリケーションでこのテーブルを使用する方法も知りたいです。 たとえば、システム内のセックス(MまたはF)パラメータの場合、それはそれ自身のテーブルにあるか、特別なテーブルに他のパラメータを持つ方がよいでしょうか?後続のレイヤーでパラメータを「エンベロープ」するにはどうすればよいですか?(パラメータとその主キーを持つ定数クラスを使用します)bussinessesとGUIレイヤーで設計され、使用されるパラメータテーブルはどのように表示されますか?

特別な「DBパターン」やスキーマがこの単一のパラメータテーブルをリレーするためのスキーマを持つようなテーブルを作成する一般的な方法について聞いたことがあります。これはどのように呼ばれているのですか?

また、この問題に関する良い参考文献をお勧めしますか?

答えて

0

私はParameter Enumeration Tablesと何度も組み立てて使用しています。 moduleは私のZXAF opensource frameworkの一部です。

基本的な設計は簡単です。Parametersテーブルは、パラメータ化されたフィールドを必要とする各テーブルと1対多の関係にあります。我々はstatusフィールドが含まれているusersテーブルで作業している実際の例を、提供するために、この上で拡大

alt text

:それは次のようになります。フィールドはの制約を介してparamsテーブルにインデックス付けしてリンクします。

INDEX `FK_user_status` (`status`), 
CONSTRAINT `FK_user_status` FOREIGN KEY (`status`) REFERENCES `params` (`id`) 
      ON UPDATE CASCADE ON DELETE CASCADE 

注:私はあなたがこれは私たちに次のスキーマを提供します。この

を行うにはしたくない回があり、ここでCASCADEを使用しています。

alt text

これの重要な概念は、データベースが参照整合性を維持し、コード内のデータモデルと統合パラメータ化データを含むようにできるようにすることです。このコードは、エンティティがどのように関連しているか、そして特定のフィールドの有効な値がどのようなものかなど、データベースに問い合わせることで調べることができます。

Parameter Enumeration Tables sample schema

最後に私がパラメータTuplesの概念を導入し、説明したいと思います。これは、1組のパラメータ(タプル)を値に関連付けることを可能にする別のテーブルです。これはデータの中立的な意味で、PETを拡張してルックアップと期待値を提供することができます。これは、新しい列挙を追加することが可能な拡張可能モデルに最も適していますが、それらに値を含める必要があります。

Parameters schema with Tuples

* *関係でこれを行うほうが良い私はfavour of enums in databasesではないんだけど、これが唯一の私の意見であり、それはあなたがして満足しているものになることがあります。

0

ほとんどのアプリケーションは「列挙」を使用します。これらの列挙型をどのように使用するかは、アプリケーションの実装方法に全面的に依存します。

"M"と "F"性別以上のケータリングをしていない限り、私はこれらの2つのオプションをそれぞれのテーブルに入れています。

バインディングを作成することによって、後続のレイヤーのパラメータをエンベロープすることになります。これは、ある種のマーシャリングを使用する場合と使用しない場合があります。これはアプリケーションの実装方法に全面的に依存します。

+0

バインディングとマーシャリングはどのように行われますか?一般的なパラメータテーブル(つまり、すべてのパラメータを1つのアプリケーションに含める)を設計するための「パターン」または「一般的なプラクティス」を知っていますか? – JPCF

+0

マーシャリングまたはアンマーシャリングプロセスを自動化できますか?実行時にDBテーブルからパラメータを生成するか?または、どのパターンが定数をバインドするのに役立つのでしょうか? – JPCF

+0

それはあなたの言語とフレームワークが提供するツールに完全に依存します。 Pythonでは、ほぼ完全に自動化できます。 C#(およびその他の.NET言語)は、いくつかの自動化を提供するいくつかのツールを提供します。フレームワークが透明なマーシャルサポートを含むように特別に設計されていない限り、Cなどの他のものは安全な自動マーシャリングのための機会を提供しません。 – Arafangion

1

私はRichard Harrisonが投稿したものと似た性質のモデルを使用します。 Design

コード表では、表のサブセットに固有の状態がいくつかある場合は問題を簡素化できますが、これらの状態がデータベースの他の部分で共有または必要でない場合は、 1つの場所にすべてを格納することによって、より混乱します。これは自分で判断しなければならない判断の呼び出しです。私の現在のアプリケーションでは、データベースが非常に小さいため、1つの集中コードテーブルを使用します。

ここに保存する内容:ビジネスニーズに応じて変更される可能性のあるデータのデータベースにのみレコードを保存します。これのいくつかの例:

  • 配送先が
  • 注文ステータスコード(あなたは米国のみでのいくつかの州、または特定地域における国の一握りなどに出荷するかもしれません)。
  • アプリケーションの役割。

M/Fから男性、女性、Transgendered(またはそのようなもの、厳密には性別ではなく性別について話していますが)の回答を「性別」の質問に変更する予定がある場合は、または他の性別を収容する場合は、データベースに含めることをお勧めします。それ以外の場合は、入手可能なパーマネントに近いものについては、データベースに保存しないでください。

0

多分Dimensionというテーブルを探しているかもしれません。これはSCDに関連しています。これらのうちの1つは、「単一パラメータテーブル」になります。時間の経過とともに、複数のテーブル(性別、場所など)を持つ方が良いかもしれません。

関連する問題