9

興味深いモデリングの問題があります。Web サイトで組織図を生成しようとしています (バックエンドは C#/SQL サーバーで、フロントエンドは JavaScript/Google 組織図 API ですが、モデリングの問題の核心はより一般的であるため、特定のテクノロジは含まれていません。問題は技術固有の問題ではないため、以下のタグを参照してください。

次の 4 つのデータベース テーブルがあります。

  1. チーム- フィールド Id、Name、ParentTeamId (同じテーブルの別の行) があります。
  2. ポジション- チーム内のポジションを表します。フィールドは Id、TeamId、IsTeamHead などです。
  3. Person - 個人を表します (このテーブルには他のテーブルへのリンクはありません)。フィールドは Id、FirstName、LastName などです。
  4. PersonPosition - ポジションにある人を表します (これにより 2 つのテーブルが橋渡しされます) フィールドは Id、PersonId、PositionId、StartDate、EndDate です。

単純なバニラ組織図がある場合、これは完全に機能します。これは、基本的に各チームをループし(それぞれがParentTeamIdを持っているため)、チーム階層を構築し、そのチーム内の位置を ( TeamIdフィールドを使用して) "Ishead" = true で表示するためです。その位置に関連付けられている人を頭として表示します。

私の問題は、(それほど珍しいことではありませんが)現在、複数の責任を与えられている人々がいるということです-彼らは本質的に2つの異なる仕事をしています. 以前は、ジョーはマーケティングの責任者であり、ビルは地域の責任者でしたが、ジョーは去りました

マーケティング責任者と地域責任者の前は、2 人の異なる人物(2 つの異なる役職) でした。したがって、ビルはマーケティング責任者であり、米国の地域マネージャーでもあります。これをモデル化して視覚化する正しい方法は何かを理解しようとしています。

モデリングの問題の最初の部分は、これを 2 つの異なる位置としてモデル化する必要があるかどうかを決定することです。もしそうなら、私はこのPersonPositionテーブルに複数のエントリを持つことができます (両方とも同じPersonIdを持つ) が、ポジションの数を過大評価しているように感じるという問題があります。

また、視覚化の観点からは、同じ人物が 2 か所に表示されます。機能的な観点からは正しいかもしれませんが、同じ人が複数回リストされるのは奇妙に思えます (それほど奇妙ではないかもしれませんが、この場合、予想されるビジュアライゼーションとして人々が見たものと、許容できると思われるものについてフィードバックを得たかったのです)。おそらくモデリングを推進する必要があります)

これを行う「正しい」方法について何か提案はありますか?

4

4 に答える 4