たとえば、次の2つの役割がある再帰的な関係について知っています。
ワーカーはマネージャーのために働いています
とWorkerとManagerはどちらもEmployeeの2つのロールです。次のように表示します。
しかし、従業員が次のような役割を持っている場合はどうなりますか?
1。ディレクター
2。マネージャー
3。秘書
4。ワーカー
そして、より低い階層のすべての役割は、より高いランクの役割で機能します。
例えば:
ManagerDirector、Directorの秘書およびWorker Works for Director
また、
秘書と労働者もマネージャーなどで働いています...
ER図でそれをどのように示すのですか?
組織は通常、当初考えていたよりもはるかに柔軟です。たとえば、ジョンは組織内に2つの仕事(開発者と代理チームリーダー)を持っている可能性があります。
彼は、演技チームの主導的役割については開発マネージャーに請求し、彼がまだ実施している開発作業についてはボブに報告することがあります。
これには、REPORTS_TOの自己参照関係を別のエンティティタイプに展開して、各人が1つだけではなく他の多くの人に報告できるようにする必要があります。また、各人が多くの役割/仕事を持つことができることを示す必要があり、正式に複数の役割に報告するいくつかの役割が必要になる場合があります。
別の見方をすると、このような階層は、グラフデータベースで探索する価値があるため、探索する価値があります。正式なスキーマがないことは、非常に柔軟であることも意味します。
情報を保存する必要がある3つの異なるものがあります。まず、企業組織内の位置です。 2つ目は、これらのポジション間のレポート構造です。三つ目は、現在各ポジションを担当している人たちです。
これらすべてを1つのテーブルに保持するデータベースを設計することは可能ですが、特に問題となっている非常に限られたケースでは、そうするのは適切ではないと思います。給与を例にとります。ほとんどの仕事は給与範囲または賃金を持っています。ただし、個人は特定の番号を持っています(これは職階の範囲内にあります)。その数は、位置ではなく個人に機能的に依存しているため、別のエンティティタイプに正規化する必要があります。税金の詳細や近親者の詳細は、彼女が立場を変えて、彼女がたまたま今していることとは関係がない場合にも、明らかになります。
逆に、人が記入する(または冗長になる)少し前に、新しい位置が組織図に入る(または出る)のはごく普通のことです。質問にリストしたロールが保存されるのは、ここです。たとえば、ポジション1729のタイトルは「ウィジェットフィクサー」、役割は「ワーカー」です。
レポート階層も同様です。関係を定義するために必要な情報は、シニアおよびジュニアのポジションIDです。チームリーダーはマネージャーに報告し、秘書はディレクターの下にいます。これにより、他のいずれかや独自のエンティティタイプとは異なります。
そのために、2つのエンティティ「Job」と「Employee」を作成できます。
リレーショナルスキーマ
従業員(従業員ID、名前)
Job(Job_ID、Job_Title、Salary)
Join(Works_For、Job_ID)
これらの役割は、「Job_Title」を通じて提供できます。
Oracleが提供するサンプルスキーマ(要件に似たHRと同様)からさらに学ぶことができます。 スキーマ図