1.日報システムデータベース設計
ここからは日報システムの業務に特化したデータベースの設計内容についてまとめます。具体的な内容については、
の 2 点を中心にまとめます。
1.1.データベーステーブルの構成
今回の日報システムのデータベース構成の概要は次のようになります。
1.2.各テーブルの項目内容
以下では日報システムで使用する各テーブルのカラム構成について示します。
表1.会社情報テーブル(np_company)項目一覧
No. | 日本語名 | 英語名 | 長さ | 型 | 備考 | Unique |
1 | 会社 ID | ncm_company_id | 10 | varchar | - | ○ |
2 | 会社名 | ncm_company_name | 30 | varchar | - | - |
3 | 所在地 | ncm_location | 30 | varchar | - | - |
4 | 資本金 | ncm_capital | 10 | varchar | - | - |
5 | 代表者名 | ncm_ceo | 10 | varchar | - | - |
表2.支店情報テーブル(np_branch)項目一覧
No. | 日本語名 | 英語名 | 長さ | 型 | 備考 | Unique |
1 | 会社 ID | nbh_company_id | 10 | varchar | - | ○ |
2 | 支店 ID | nbh_branch_id | 10 | varchar | - | ○ |
3 | 支店名 | nbh_branch_name | 30 | varchar | - | - |
表3.業務情報テーブル(np_business)項目一覧
No. | 日本語名 | 英語名 | 長さ | 型 | 備考 | Unique |
1 | 会社 ID | nbs_company_id | 10 | varchar | - | ○ |
2 | 支店 ID | nbs_branch_id | 10 | varchar | - | ○ |
3 | 業務 ID | nbs_business_id | 10 | varchar | - | ○ |
4 | 業務名 | nbs_business_name | 30 | varchar | - | - |
5 | 業務種別 | nbs_business_type | 2 | varchar | - | - |
6 | 勤務地 | nbs_service_area | 30 | varchar | - | - |
7 | 業務責任者 | nbs_leader | 10 | varchar | - | - |
8 | 開始時刻 | nbs_start_time | - | time | - | - |
9 | 終了時刻 | nbs_end_time | - | time | - | - |
10 | 休憩開始時刻 | nbs_rest_start_time | - | time | - | - |
11 | 休憩終了時刻 | nbs_rest_end_time | - | time | - | - |
表4.社員情報テーブル(np_member)項目一覧
No. | 日本語名 | 英語名 | 長さ | 型 | 備考 | Unique |
1 | 会社 ID | nmb_company_id | 10 | varchar | - | ○ |
2 | 社員 ID | nmb_member_id | 10 | varchar | - | ○ |
3 | 役割 | nmb_role | 2 | varchar | - | - |
4 | パスワード | nmb_password | 20 | varchar | - | - |
5 | 社員名 | nmb_member_name | 20 | varchar | - | - |
6 | 性別 | nmb_sex | 1 | varchar | - | - |
7 | 生年月日 | nmb_birthday | - | date | - | - |
8 | 入社年月日 | nmb_entrance_company_date | - | date | - | - |
9 | 退社年月日 | nmb_leave_company_date | - | date | - | - |
10 | 役職 | nmb_managerial_position | 20 | varchar | - | - |
11 | 郵便番号1 | nmb_postal_1 | 8 | varchar | - | - |
12 | 住所1 | nmb_address_1 | 100 | varchar | - | - |
13 | 電話番号1 | nmb_tel_number_1 | 15 | varchar | - | - |
14 | 郵便番号2 | nmb_postal_2 | 8 | varchar | - | - |
15 | 住所2 | nmb_address_2 | 100 | varchar | - | - |
16 | 電話番号2 | nmb_tel_number_2 | 15 | varchar | - | - |
17 | 携帯電話番号 | nmb_cellularphone_num | 15 | varchar | - | - |
18 | メールアドレス1 | nmb_mail_address_1 | 100 | varchar | - | - |
19 | メールアドレス2 | nmb_mail_address_2 | 100 | varchar | - | - |
20 | メールアドレス3 | nmb_mail_address_3 | 100 | varchar | - | - |
21 | 備考 | nmb_memo | 50 | varchar | - | - |
表5.勤務情報テーブル(np_report)項目一覧
No. | 日本語名 | 英語名 | 長さ | 型 | 備考 | Unique |
1 | 会社 ID | nrp_company_id | 10 | varchar | - | ○ |
2 | 支店 ID | nrp_branch_id | 10 | varchar | - | ○ |
3 | 業務 ID | nrp_business_id | 10 | varchar | - | ○ |
4 | 社員 ID | nrp_member_id | 10 | varchar | - | ○ |
5 | 出勤日 | nrp_start_day | - | date | - | ○ |
6 | 出勤時刻 | nrp_start_time | - | time | - | ○ |
5 | 退勤日 | nrp_end_day | - | date | - | ○ |
8 | 退勤時刻 | nrp_end_time | - | time | - | ○ |
9 | 休憩開始時刻 | nrp_rest_start_time | - | time | - | - |
10 | 休憩終了時刻 | nrp_rest_end_time | - | time | - | - |
表6.社員/業務関連テーブル(np_rel_member_business)項目一覧
No. | 日本語名 | 英語名 | 長さ | 型 | 備考 | Unique |
1 | 会社 ID | nrm_company_id | 10 | varchar | - | ○ |
2 | 支店 ID | nrm_branch_id | 10 | varchar | - | ○ |
3 | 業務 ID | nrm_business_id | 10 | varchar | - | ○ |
4 | 社員 ID | nrm_member_id | 10 | varchar | - | ○ |
表7.月報ロック情報テーブル(np_lock_report)項目一覧
No. | 日本語名 | 英語名 | 長さ | 型 | 備考 | Unique |
1 | 会社 ID | nlr_company_id | 10 | varchar | - | ○ |
2 | 支店 ID | nlr_branch_id | 10 | varchar | - | ○ |
3 | 業務 ID | nlr_business_id | 10 | varchar | - | ○ |
4 | 対象年月 | nlr_target_years | 8 | varchar | - | ○ |
表8.お知らせ情報テーブル(np_information)項目一覧
No. | 日本語名 | 英語名 | 長さ | 型 | 備考 | Unique |
1 | 登録年月日 | nim_entry_date | - | int4 | - | ○ |
2 | 登録時間 | nim_entry_time | - | int4 | - | ○ |
3 | タイトル | nim_title | 50 | varchar | - | - |
4 | 内容 | nim_memo | - | text | - | - |
1.3.インデックスの設計について
日報システムにおけるインデックスの設計について示します。
1.3.1.日報システムのデータ量見積もり
まず、インデックスの必要性の検証を行うため、日報システムでのデータ量の概算を以下に示します。
表7.日報システムにおけるデータ量の概算値
テーブル名 | 見積もり概算値( 1 年分) |
会社情報 | 1 件 |
支店情報 | 2 件 |
業務情報 | 〜 10 件 |
社員情報 | 〜 30 件(退職者の情報は当面残すとしている) |
日報情報 | 〜 14,400 件 |
休暇情報 | 〜 240 件 |
※日報情報の概算は、
2 (業務/日) * 20 (人) * 30 (日/月) * 12 (ヶ月) = 14,440 (件)
また、休暇情報の概算は、
1 (件/月) * 20 (人) * 12 (ヶ月) = 240 (件)
として算出している。いずれも目安としての参考値。
1.3.2.インデックスの設計
上記のデータ量見積もりによると、最もデータ件数が多くなるのは日報情報であり、これはテーブルの構成が設計により変化してもこの情報に関しての概算値は大幅な変更はないと考えられます。
PostgreSQL において、インデックスに関する条件としては、次の 3 点を踏まえておく必要があります。
- Primary Key についてはデータ量に関係なくインデックスがシステムによって構成される。
- PostgreSQL においてインデックスが実際に活用されるのはデータが 10,000 件程度になってからである。
- インデックスを使用しているかどうかについては Explan コマンドを実行することで検証することができる。
以上の 3 点を考慮し、インデックスについて検討すると結果的に今回の日報システムにおけるインデックス作成は不要と言う結論に達します。理由としてデータ量が 10,000 件を超えるものについては日報情報だけですが、実際の日報情報は最低でも 1 年分保持するのが常識的なところであり、それ以前の過去のものについてはバックアップを行い実テーブルからは削除してしまっても仕様として問題が無いと考えられます。したがって実際に日報情報が数万件のデータを保持することは現実的でないため、インデックスの設計について現時点において考慮する必要性は皆無と結論付けます。