2017-04-06 5 views
0

私のデータベースに登録されているユーザーの一部は、開業医です。SQLデータベース設計 - フラグまたは新しいテーブル?

これはいずれかによって表すことができる:

  • is_practitionerフラグは、ユーザテーブルに
  • USER_IDカラム

と別個開業医テーブルをそれがどのアプローチ私には明らかではありません優れている。フラグの

利点:

  • 少ないテーブル
  • ユーザ当たりただ1つのID(したがって混乱の可能性なし、また、他のテーブルで使用するためのIDでない混乱)
  • 柔軟性(Iフィールドが開業医のみであるかどうかを判断する必要はありません)
  • 開業医のユーザーレベルの情報を見つけるためのスピードメリット
新しいテーブルのの

利点:

  • 何の情報、特に私の場合は実務

を見つけるための実践者のみ

  • 速度の利点に関係するようにユーザーのテーブルにないヌル
  • 鮮明に、は現在であり、開業医関連の情報は一般に一対一である(例えば、働くことができる場所や働くことのできるシフトなど)。私はそれが変わっても驚くことはないでしょう。私は実践者のために単純な属性(すなわち、一対一)を保存する必要があります。

    質問

    1. は、他の考慮事項はありますか?
    2. どちらのアプローチも優れていますか?
  • 答えて

    1

    今日、開業医の誰かが明日何かをしているという事実を考えてみてください。 (それで、私は、の開業医ではないことを意味するわけではありません)。あなたのサブドメインのコンサルタント、著者、または何かが変わったとしたら、あなたは自分の最新ステータスをUsersテーブルに記録しておきたいかもしれません。したがって、ProfTypeフィールド(Professional Practiceのタイプ)または同等のフィールドを持つことが理にかなっているかもしれません。こうすることで、フラグを持つことの利点がすべて得られます。文字列フィールドとして保持し、空の文字列として残したり、要件が増えるにつれて他のProf.Typeコードを埋め込むことができます。

    あなたは、新しいテーブルを持っていると言いますが、開業医を見つける利点があります。いいえ、あなたはそれのためのusersテーブルのWHERE句でより良いです。

    ただし、最後の段落(1対多)は、選択肢全体を傾けて、別のテーブルを優先します。また、レコードの可能性、成長の可能性、複雑なクエリの重要性などを考慮する必要があるかもしれません。

    +0

    感謝。あなたの最初の段落については、いずれのケースでもis_consultantフラグまたはConsultantテーブルによって簡単にはカバーされませんか?なぜあなたはWHERE句が優れていると言いますか?なぜ1対多の関係が数多くあるのは、別のテーブルを優先して物事を傾けるのですか? –

    +0

    開業医にとっては、旗、コンサルタントのためのフラグ、あなたはそれぞれのProf Typeのフラグを追加することができます。そのような場合、1つのテキストフィールドが同じ仕事をしていました。 実務家のテーブル、もう1人はコンサルタント:実務者またはコンサルタントであるユーザーを探したいとします。実務者とコンサルタントのユーザーからの2つの左外部結合です。 ProfType In( 'PRAC'、 'C​​ONS')のどこで行えたのでしょうか。 1対多の性質:ターゲットフィールドに独自の属性がある場合は、テーブルを使用し、それ以外の場合はフィールドを使用します。シンプルなデザインでシンプルなセットアップを、複雑なものにも対応 –

    1

    私は2つのシナリオを描き、いくつかのメモを画像内に描こうとしました。実際には、さまざまなエンティティを「参照」するのに役立つ唯一の草案です。あなたはすでにそれのような何かをしているかもしれません:この場合は私の答えを考慮しないでください。彼の最後の段落に記載されているように、他のものも考慮する必要があります。

    Draft logical schema

    1

    は個人的に私は別のテーブルのために行くだろう - 限り、あなたはすでにだけプラクティショナーのために理にかなって、いくつかの余分なデータを識別できるよう(例:フルプロのタイトル、大学、病院や他のエンティティ開業医は関連しています)。

    将来的には、プラクティショナーのみに意味のあるデータを発見したり、ユーザーの別の「サブタイプ」(例:インターン)を特定することで、プラクティショナーサブテーブルにフィールドを追加したり、インターンのために。

    上記の@Whirl Mindで提案されているように、User Typeフィールドを使用すると便利です。

    私はこれがあなたのDB内のオブジェクトの異なるタイプを識別することのほんの一例であり、そのために私はここに私の以前の回答のいずれかを参照してくださいと思う:あなたの答えのためのDesigning SQL database to represent OO class hierarchy

    関連する問題