0

私のプログラムでは、個人から始めてマネージャーの下にグループ化し、次にそれらのマネージャーを上級マネージャーの下にグループ化する組織図を作成する必要があります...データベースに関してこれを行うにはどうすればよいですか?これは多対1の関係であり、違法で不可能だと思っていました。これは、親のマネージャーを作成する前に、子のテーブル(個人)から始めるようなものです。誰かが私のデータベースを設計するための正しい方向に私を向けるのを手伝ってくれるなら、私は本当に感謝しています!!

----編集----これが私の問題のより詳細な説明です:

私のプログラムのユーザーが、自分が取り組む予定のプロジェクトで使用したい35人の個人を入力することから始めたとしましょう。現在、作成して従業員/他の(下級)マネージャーを割り当てることができるいくつかの可能な管理職があります。ユーザーは特定の位置を作成する必要はありませんが、好きなように選択して割り当てることができます。唯一の制約は、常にトップマネージャーがいることです-彼を大統領と呼びましょう-そして彼は与えられたマネージャー(大統領を含む)に5-10人だけを割り当てるべきです(しかしそうする必要はありません)。したがって、この例では、35人の個人と1人の社長から始めています。次に、35人の個人をチームにグループ化し、そのうちの1人をマネージャーとして割り当てます。ユーザーが6人のチームを2つ、9人のチームを2つにすることにしたとします。そして5人の1つのチーム-これらの各グループには、そのチームのマネージャーとして割り当てられた個々のメンバーの1人がいます。これで、5つのチームがあり、それぞれが独自のマネージャーの下にあり、それらの5つのマネージャーが社長に割り当てられます。プログラムはこれを手放しますが、最後のチームのマネージャーの下にいる個人の数は5人未満(わずか4人)であることをユーザーに警告します。そのため、ユーザーは(またはいつでも)戻って組織を変更できます。それで、彼がこの問題を修正してチームを変更したいとしましょう。そこで彼は、9人の2つのチームのうちの1つを分割し、1人の人が不足していたチームに1人の個人を割り当てます。これにより、最終的に6人のチーム(5人の個人メンバーと1人のマネージャー)、9人のチーム(8indと1mngr)、8人のチーム(7indと1mngr)がカウントされ、5人のチームマネージャー全員が割り当てられます。大統領に。

実生活でのみ、これはさらに分解される可能性があります-より多くのレベルの管理を備えた巣。これどうやってするの?

以下のJoeHopfgartnerの回答はまだ有効ですか?後で(行が最初に作成された後に)役割が割り当てられる場合でも、「役割」列を作成できますか?またはいつでも変更しましたか?この自己参照外部キーをnullにすることはできますか?(マネージャーがまだ割り当てられていない場合のように)または、チームに割り当てられた後、個人を別の「チーム」テーブルに移動し、マネージャーを「マネージャー」テーブルに移動する必要があります。マネージャーとして割り当てられた後、マネージャーテーブルを参照するチームテーブルの外部キーを追加しますか?

また、MySQLを使用しているので、自己参照のONUPDATECASCADEまたはONUPDATESET NULL操作を使用できないという事実は私の特定のケースに影響しますか(ユーザーは間違いなく割り当てを変更することが多いため)?

これを手伝ってくれてありがとう!!!

4

2 に答える 2

1

1人の個人が1人のマネージャーしか持てない場合は、「親の人」IDフィールドを導入するか、マネージャーを別のテーブルに配置します。

そうでない場合は、人をマネージャーに割り当てる「person_has_manager」のようなリレーションの別のテーブルを作成します。

管理者と人を同じテーブルに入れて「役割」フィールドを導入することもできますが、管理者だけに人を割り当てることができるようにしたい場合は、外部キー制約を使用するときにこれは難しい場合があります。

この問題を解決するために、人をマネージャーとしての仕事にリンクする「person_is_manager」テーブルを導入することができ、人をリンクしてそのマネージャーによって管理されるようにすることができます。これは次のようになります。

persons
-> person_id (primary)
-> name
-> etc

managers
-> person_id (primary, linked to person_id in persons)

person_has_manager
-> person_id (primary)
-> manager_id (primary, linked to person_id in managers table)
于 2011-07-17T01:44:27.580 に答える
1

それは木です。parent_idフィールドを持つ単一のテーブルを使用して、現在のレコードの親であるレコードを示すことができます。

于 2011-07-17T01:40:58.190 に答える