1

私は従業員テーブルを持つ Access アプリケーションを持っています。従業員は、組織内のいくつかの異なるレベルの一部です。組織には 1 人の GM、5 人の部長がおり、各部長の下には複数の監督者がおり、その監督者の下に労働者がいます。

従業員の役職に応じて、従業員は自分の下にいる従業員のレコードにのみアクセスできます。

ある種のレベル システムを使用して、組織をテーブルで表現したかったのです。私が見た問題は、同じレベル (スーパーバイザーなど) に多くの ppl が存在するが、別の部門のスーパーバイザーの記録にアクセスするべきではないということでした。この問題にどのようにアプローチすればよいですか?

4

1 に答える 1

2

この種の階層データをデータベースに保持する一般的な方法の1つは、次のようなフィールドを持つ単一のテーブルのみを使用します。

  1. userId(主キー)
  2. userName
  3. SupervisorId(自己参照の「外部キー」、この同じテーブル内の別のuserIdを参照します)
  4. positionCode(1 =レーキー、2 =スーパーバイザー、または別の位置テーブルを指す外部キーなどの単純なものにすることができます)
  5. ...各従業員のために保存する必要がある他のものは何でも...

次に、アプリはSQLクエリを使用して権限を把握します。スーパーバイザー「X」(たとえば、userIdが「3」)が表示できる従業員を把握するには、supervisorId=3であるすべての従業員を照会します。

上層部のボスがその下にいる全員を見ることができるようにしたい場合、最も簡単な方法は再帰検索を行うことです。つまり、この大ボスに報告するすべての人にクエリを実行し、ツリーのずっと下にいるすべての人に、誰に報告するかをクエリします。

それは理にかなっていますか?コンピューターはそのようなことを上手くやっているので、データベースにすべてのユーザーをソートする作業を任せます。

この例では、一部の人に異なる権限を持たせたい場合に備えて、positionCodeを配置します。たとえば、すべての従業員のリストを表示する権限を持つHR従業員のコード「99」があるとします。


多分私は他の何人かの人々にそれをよりよく説明させようとするでしょう...

于 2009-11-07T02:51:01.260 に答える