0

私のデザインが正しいかどうか、そしてどのようにクエリ/挿入するかを解決しようとしています。従業員には、一連のコア コンピテンシーとジョブ固有のコンピテンシーがあります。Web サイトは、コア コンピテンシーのスコアリングを要求し、その後、ジョブ タイプに応じて一連の特定のコンピテンシーを要求します。

これまでのところ、従業員、部門 (つまり、ジョブ タイプ)、コンピテンシー (コア コンピテンシー、ソフトウェア コンピテンシーなど) を表す一連のテーブルがあります。

デパートメント:

Id
Department

従業員:

EmployeeId
LoginName
FK_DepartmentId

したがって、各コンピテンシー テーブルは次のようになります。

CompetencyId
Code
Description

計画では、各人がコア コンピテンシーと、対応するジョブ タイプとスコアを持っているということです。私が最初に考えたのは、スコアを獲得するための最善の方法は、次のようにテーブルをスコアリングする能力を持つことだったということです。

CompetencyScoreId 
EmployeeId_FK
CompetencyCode_FK
Score

次に、個人の ID を使用してテーブルからフィルター処理できます。複数のテーブルスコアを持つことで、誰かが部門を変更した場合、古いテーブルから削除され、新しいテーブルに追加されることを確認する必要があると思います

新しいユーザーを追加するときは、コア テーブルを大きなテーブルに一連の行として貼り付ける必要があります。これは可能ですか、それとも賢明ですか?ユーザー名とコードの組み合わせがテーブル内で一意になるような制約を作成することは可能ですか?

別の方法は、コンピテンシー コードが列で、各ユーザーが列に対するスコアを含む行をテーブルに持つテーブルを用意することでした。これを行うと、列を追加するのが難しくなり、列名を説明に関連付ける方法がわかりませんでした。

4

1 に答える 1

1

Department、Employee、および Competency テーブルは問題ありません。

コアコンピテンシー

コア コンピテンシー テーブルは次のようになります。

Core Competency
---------------
Core Competency ID
Employee ID
Competency ID
Competency Score
Competency Time Stamp

スコアが時間の経過とともに変化する可能性がある場合は、スコアの変化を維持できるようにタイム スタンプが必要です。

プライマリ (クラスタリング) キーは Core Competency ID です

従業員 ID、コンピテンシー ID、およびコンピテンシー タイム スタンプの降順の一意のインデックスにより、従業員の行を取得できます。

コンピテンシー ID とコンピテンシー タイム スタンプの降順の別の一意のインデックスを使用すると、コンピテンシーの行を取得して、時間の経過と共にスコアがどのように変化するかを確認できます。

コンピテンシー ID とコンピテンシー スコアの降順の別の一意でないインデックスを使用すると、特定のコンピテンシーのコンピテンシー スコアが最も高い従業員を取得できます。

職位の能力

新しい従業員が追加されると、コア コンピテンシーも同時に追加する必要があります。ある職種のコア コンピテンシーのグループがある場合は、次のような別のテーブルが必要になります。

Position Competency
-------------------
Position Competency ID
Position ID
Competency ID

プライマリ (クラスタリング) キーは、ポジション コンピテンシー ID です。

ポジション ID は、ポジション テーブルを指す外部キーです。

ポジション ID、コンピテンシー ID の一意でないインデックスは、ポジションのすべてのコンピテンシーを提供します。

ポジションの変更

従業員がポジションを変更した場合、アプリケーションはコア コンピテンシーを追加する必要があるかどうかを判断する必要があります。私が定義したデータベース テーブルは、決定を行うために必要な情報をアプリケーションに提供します。

従業員からコア コンピテンシーを削除してはなりません。

于 2013-02-27T18:46:13.313 に答える