8

誰かが私ができるタイムシートアプリケーションの大まかなデータベーススキーマを手伝ってくれませんか

  1. さまざまなプロジェクトの期間(2週間)の1日あたりの時間を保存します。元人Aは、同じ日にprojectAに3時間、projectBに4時間を置くことができます

  2. プロジェクトに費やされた合計時間のレポートを簡単に取得できるようにしたり、特定の人がすべてのプロジェクトの合計時間を取得したりできるようにします。

編集:別の要件は、すべての人の特定の期間の各タイムシートに、その人がタイムシートを提出したことを示すフィールドと、承認されたことを示すフィールドが必要であることです。

4

5 に答える 5

16

Eric Petroelje&mdmaからの借用:

Employee 
- EmployeeID (PK)
- EmployeeName
- Other_fields

Project
- ProjectID (PK)
- ProjectName
- Other_fields

WorkSegment
- WorkSegmentID (PK)
- ProjectID (IX1)
- EmployeeID (IX2)
- Date (IX1, IX2)
- StartTime 
- EndTime
- PayrollCycleID (FK)

WorkSegmentの最初のインデックスはProjectID、Dateです。WorkSegmentの2番目のインデックスは、EmployeeID、Dateです。これらのインデックスは一意ではありません。これは、人が1日に複数回プロジェクトに取り組むことができるようにするためです。インデックスを使用すると、プロジェクトまたは個人の作業時間に関するレポートを作成できます。

各WorkSegment行は、1セグメントの時間、1日、1つのプロジェクト用です。各従業員には、給与サイクルを説明するために必要な数のWorkSegment行があります。

TimeSheetSegment
- TimeSheetSegmentID (PK)
- ProjectId (FK)
- EmployeeId (FK)
- PayrollCycleID (FK)

ProjectID、EmployeeID、およびPayrollCycleIDには一意のインデックスがあります。従業員が給与サイクル中に作業するプロジェクトごとに1つのTimeSheetSegment行があります。

TimeSheet
- TimeSheetID (PK)
- EmployeeID (IX)
- PayrollCycleID (IX)

TimeSheet行は、TimeSheetSegment行とWorkSegment行を1つにまとめます。EmployeeID、PayrollCycleIDインデックスは一意です。

Approval
- TimeSheetID (PK)
- PayrollCycleID (FK)
- SubmittedTimestamp
- ApproverID (FK)
- ApprovedTimestamp

タイムシートが送信されると、承認行が作成されます。これらのフィールドは、TimeSheetテーブルの一部である可能性があります。ApprovalテーブルにはTimeSheetテーブルとは異なるデータベースアクセス許可がある可能性が高いため、4次正規化でそれらを分割しました。

PayrollCycle
- PayrollCycleID (PK)
- PayrollCycleYear
- PayrollCycleNumber
- StartDate 
- EndDate
- DirectDepositDate
- CheckDate
- Other_fields

PayrollCycleテーブルは、いくつかの日付フィールドを正規化し、WorkSegment行とTimeSheetSegment行をまとめて一貫性のあるタイムシートを作成するのを容易にする整数キーを提供します。

于 2010-07-19T17:32:56.537 に答える
2

これがあなたに良いスタートを与えるラフスケッチです:

Project
-------
ProjectId  PK
ProjectName varchar(200)

Employee
---------
EmployeeId  PK
EmployeeName (or first name/last name etc..)
// .. other employee attributes


ProjectTimesheet
----------------
ProjectTimesheetId PK
ProjectId          FK -> Project.ProjectId
EmployeeId         FK -> Employee.EmployeeId
StartTime          DATETIME
EndTime            DATETIME
Approved           bit

編集:各ProjectTimesheet行の承認済みフラグの代わりに、承認済みステータスを別のテーブルに分けることができます。たとえば、特定の期間にわたって従業員のタイムシートの承認を許可するには、マネージャーは承認テーブルに承認エントリを追加します。

Approval
--------
ApprovalID    PK
EmployeeId    FK -> Employee.EmployeeId
StartTime     DATETIME
EndTime       DATETIME
ApprovedBy    FK -> Employee.EmployeeId (e.g. the manager)
ApprovedDate  timestamp  // date the approval was registered
于 2010-07-19T15:27:07.017 に答える
1

宿題のように聞こえますが、おそらく次のようなものから始めます。

People 
  - PersonID (PK)
  - PersonName
  - Other fields

Projects
  - ProjectID (PK)
  - ProjectName
  - Other fields

WorkTime
  - TimeID (PK)
  - ProjectID (FK)
  - PersonID (FK)
  - StartTime
  - EndTime
于 2010-07-19T15:26:37.247 に答える
0

人のための表(1)

プロジェクトの表(2)

予約の表(3)-誰が作業を行ったか(FKを1に)、どのプロジェクトに取り組んだか(FKを2に)、いつ作業を行ったか、どのくらいの作業を行ったか。

(3)からsum(time_booked)を選択します。ここで、personは(1からの一部のID)であり、project =(2からの一部のID)です。

また

(3)からsum(time_booked)を選択します。ここで、personは(1からのid)に等しくなります。

等...

于 2010-07-19T15:25:40.810 に答える
0

次のコードは、PostgreSQL構文の] project-open [オープンソースシステムから取得され、編集されています。

承認/確認情報が記載された「conf_objects」テーブルに注意してください。ユーザーがタイムシートを「送信」すると、送信されたすべての時間が新しいconf_objectに割り当てられます。conf_objectのステータスを「承認済み」に設定するのはスーパーバイザーの仕事です。スーパーバイザーまたはユーザーの両方がいつでもconf_objectを削除できます。これにより、時間が「未送信」(hour.conf_object_id = NULL)として再度マークされ、これらの時間は「未送信時間」レポートに表示されます。

CREATE TABLE projects (
    project_id                      integer constraint projects_pk primary key,
    project_name                    text not null,
    parent_id                       integer constraint projects_parent_fk references projects,
[...]
    project_type_id                 integer not null constraint projects_prj_type_fk references categories,
    project_status_id               integer not null constraint projects_prj_status_fk references categories,
    description                     text,
    start_date                      timestamptz,
    end_date                        timestamptz
);


CREATE TABLE users (
    user_id integer constraint users_pk primary key,
    first_names text,
    last_name text
[...]
);

-- Confirmation (=approval) objects
CREATE TABLE conf_objects (
    conf_id         integer constraint conf_id_pk primary key,
    conf_status_id  integer constraint conf_status_nn not null
);


CREATE TABLE hours (
    user_id                 integer constraint hours_user_id_nn not null constraint hours_user_id_fk references users,
    project_id              integer constraint hours_project_id_nn not null constraint hours_project_id_fk references projects,
    day                     date constraint hours_day_nn not null,
    hours                   numeric(5,2) not null,
[...]
    note                    text,
    conf_object_id          integer constraint hours_conf_object_fk references conf_objects
);

元の]po[SQLステートメントは〜/ packages / intranet-* / sql / postgresql/intranet-*-create.sql作成スクリプトに含まれています。

于 2013-06-01T10:35:42.160 に答える