私は人事システムに取り組んでおり、各採用担当者は候補者のプロファイルに対して限られたビューしか持たないため、ユーザーのプロファイルに関するすべてのビューの追跡記録を保持する必要があります。私の主な関心事は、私のアプローチのスケーラビリティです。これは次のとおりです。現在、表示された候補者のIDと候補者を表示したリクルーターのIDの2つの列を持つテーブルを作成しました。各ビューは、1回だけカウントされます。同じ候補が再び表示されますが、レコードは挿入されません。
データベース内の採用担当者と候補者の数に基づいて、テーブルは非常に速く成長し、最悪の場合、UIに候補者の数を表示する必要があるため、リクエストごとにテーブルをクエリする必要があると言っても過言ではありません。採用担当者が閲覧しました。スケーラビリティを考慮すると、どちらが最善のアプローチですか?
ケースについてもう少し説明します。私たちには会社があり、すべての会社には多くのリクルーターがいます。
ViewsAssigner_Identifierテーブル
- Id:int PK
- Company_Id:int FKNON-CLUSTERED
- Views_Assigned:intNON-CLUSTERED
- 日付:クラスター化されていない日付
CandidateViewCountsテーブル
- Id:int PK
- Recruiter_id:int FK NON-CLUSTERED?
- Candidate_id:int FK NON-CLUSTERED?
- ViewsAssigner_Identifier_Id:int FK NON-CLUSTERED?
- DateViewed:クラスター化されていない日付
[ViewsAssigner_Identifier_id]によってすべての[Candidate_id]の選択を照会します
同じ会社のすべてのリクルーターが同じ[Views_Assigned]を会社に使用したため、リクルーターではなく会社で検索したいと思います。つまり、候補を表示する最初のRecuiterは「CandidateViewCounts」テーブルに格納され、同じ候補を表示する後続のRecuiterは格納されません。
結果: [ViewsAssigner_Identifier_id]によってすべての[Candidate_Id]のリストを取得する必要があります。そうすれば、これらすべての候補IDを合計できます。
クエリの例:
SELECT [Candidate_Id]FROM[dbo]。[CandidateViewCounts]WHERE[ViewsAssigner_Identifier_id] = 1
何かお勧めはありますか?