2011-07-12 2 views
0

私は 'business_owners'と 'customers'を持つデータベースを設定しています。私は数日後にこれを設定することができましたが、あなたの意見がベストプラクティスであるかを見たいと思っていました。私は2つのテーブル、「business_owners」と「顧客」、名前、電子メールなどや...'business_owners'と 'customers'のデータベースを設定する

とそれぞれを持っている可能性が

私は1つのテーブル「ユーザーの操作を行うと「business_owner」としてUSER_TYPEを持つことができますか'顧客'を選択し、そのタイプを使用して何を表示するかを決定します。

私は第2の選択肢が最も良いと思いますが、フィードバックはありますか?親指の

答えて

2

ルール:

あなたが同じ(または同一に近い)の列を持つ複数のテーブルを持っている場合は

、彼らは、単一のテーブルに凝縮されなければなりません。タイプコード/ etcを使用して、必要に応じて区別し、タイプコードに依存するカラムのビジネスルールを設定します。

回答:

2番目の方法が最適です。最もスケーラビリティがあり、ビジネスオーナーの両方とも&の顧客を含む結果セットを使用する必要がある場合は、最も簡単に作業できます。

+0

ありがとうございます。 – dzm

0

2つのタイプの違いによって、「ユーザー」または「ビジネスオーナー」の役割以外の属性とまったく同じ属性を共有する場合は、2つ目のオプションで過度の同一の列を2つの別々の表に有する。

0

これをオブジェクトモデルでどのようにモデル化しますか?単一のスーパークラスを設定し、それを「利害関係者」と呼んで、ビジネスオーナーと顧客の両方のプロパティを取得しますか?ステークホルダーの定義を拡張する特殊なサブクラス「ビジネスオーナー」と「顧客」を設定しますか?そうなら、読んでください。

あなたのケースは、Gen-Specデザインパターンのインスタンスのようです。 Gen-specは、スーパークラス - サブクラス階層を介してオブジェクト指向のプログラマーにはよく知られています。残念ながら、リレーショナル・データベース設計の導入は、Gen-Spec状況のための表の設計方法をスキップする傾向があります。幸いにも、それはよく理解されています。 "Relational database generalisation specialization"に関するWeb検索では、その件に関するいくつかの記事が得られます。あなたのヒットのいくつかはここで以前の質問になります。 Gen-Specについて、Object Relational Mappingで論じている記事があります。

トリックは、サブクラス(専用)テーブルのPKが割り当てられる方法です。それは何らかのオートナンバー機能によって生成されるものではありません。代わりに、それはスーパークラス(一般化された)テーブルのPKのコピーであるため、FKへの参照です。

したがって、ケースが車両、トラック、セダンであった場合、すべてのトラックまたはセダンは車両テーブルにエントリを持ちますが、トラックには対応するPKのコピーであるPKがトラックテーブルにも入ります車両テーブルに表示されます。セダンとセダンのテーブルも同様です。車をトラックやセダンにするかどうかは、単にジョインするだけで簡単に分かります。通常は、そのようなクエリでデータに参加したいと思うのです。

関連する問題