スケジュール管理システムDB == # DDL ## sms データベース削除 DROP DATABASE sms; ## sms データベース作成 CREATE DATABASE sms; ## sms データベースに接続 \c sms ## 社員マスター CREATE TABLE m_employee ( emp_id SERIAL NOT NULL PRIMARY KEY, registered_date TIMESTAMP, update_date TIMESTAMP, password CHARACTER VARYING(60), emp_name CHARACTER VARYING(15), department CHARACTER VARYING(10), contact_extension CHARACTER VARYING(4), contact_mobile CHARACTER VARYING(11) ); ## グループマスター CREATE TABLE m_group ( group_id SERIAL NOT NULL PRIMARY KEY, administrator_id INT NOT NULL, registered_date TIMESTAMP, update_date TIMESTAMP, group_name CHARACTER VARYING(10), FOREIGN KEY (administrator_id) REFERENCES m_employee (emp_id) ); ## グループ割当情報 CREATE TABLE t_group_allocation ( group_id INT NOT NULL, emp_id INT NOT NULL, registered_date TIMESTAMP, update_date TIMESTAMP, delete_flag BOOLEAN, PRIMARY KEY (group_id,emp_id), FOREIGN KEY (group_id) REFERENCES m_group (group_id), FOREIGN KEY (emp_id) REFERENCES m_employee (emp_id) ); ## 予定情報 CREATE TABLE t_schedule ( schedule_id SERIAL NOT NULL PRIMARY KEY, emp_id INT NOT NULL, registered_date TIMESTAMP, update_date TIMESTAMP, start_date TIMESTAMP, end_date TIMESTAMP, schedule_contents CHARACTER VARYING(30), open_range INT NOT NULL, FOREIGN KEY (emp_id) REFERENCES m_employee (emp_id) ); ## 出退勤情報 CREATE TABLE t_attendance ( attendance_id SERIAL NOT NULL PRIMARY KEY, emp_id INT NOT NULL, registered_date TIMESTAMP, attendance_status INT, FOREIGN KEY (emp_id) REFERENCES m_employee (emp_id) ); ## 予定公開割当範囲情報 CREATE TABLE t_schedule_range_allocation ( schedule_id INT NOT NULL, allocation_group_id INT NOT NULL, PRIMARY KEY (schedule_id, allocation_group_id), FOREIGN KEY (allocation_group_id) REFERENCES m_group (group_id), FOREIGN KEY (schedule_id) REFERENCES t_schedule (schedule_id) ); ## 暗号モジュールを有効にする CREATE EXTENSION pgcrypto; # DML ## 社員マスター INSERT INTO m_employee(registered_date, update_date, password, emp_name, department, contact_extension, contact_mobile) VALUES (current_timestamp, current_timestamp, crypt('1', gen_salt('bf')), '総務一郎', '総務部', '1000', '09011112222') , (current_timestamp, current_timestamp, crypt('2', gen_salt('bf')), '総務二子', '総務部', '1000', '09012341234') , (current_timestamp, current_timestamp, crypt('3', gen_salt('bf')), '開発三郎', '開発部', '1001', '09055556666') , (current_timestamp, current_timestamp, crypt('4', gen_salt('bf')), '開発四朗', '開発部', '1001', '07012341234') , (current_timestamp, current_timestamp, crypt('5', gen_salt('bf')), '営業五郎', '営業部', '1002', '07011111111'); ## パスワードの確認は下記のようなSELECT文 SELECT * FROM m_employee WHERE emp_id = 1 AND password = crypt('1', password); ## グループマスター INSERT INTO m_group(registered_date, update_date, administrator_id, group_name) VALUES (current_timestamp, current_timestamp, 2, '新人研修チーム') , (current_timestamp, current_timestamp, 4, '新商品開発チーム'); ## グループ割当情報 INSERT INTO t_group_allocation(group_id, emp_id, registered_date, update_date, delete_flag) VALUES (1, 2, current_timestamp, current_timestamp, false) , (1, 1, current_timestamp, current_timestamp, false) , (2, 4, current_timestamp, current_timestamp, false) , (2, 2, current_timestamp, current_timestamp, true) , (2, 3, current_timestamp, current_timestamp, false); ## 予定情報 INSERT INTO t_schedule(emp_id, registered_date, update_date, start_date, end_date, schedule_contents, open_range) VALUES (1, current_timestamp, current_timestamp, '2020-06-01 12:00:00', '2020-06-01 13:00:00', 'ランチミーティング', 0) , (1, current_timestamp, current_timestamp, '2020-06-03 9:00:00', '2020-06-01 18:00:00', '健康診断', 2) , (1, current_timestamp, current_timestamp, '2020-06-05 11:00:00', '2020-06-05 12:00:00', 'リーダーミーティング', 1) , (3, current_timestamp, current_timestamp, '2020-06-30 15:00:00', '2020-06-30 17:00:00', '新商品開発定例会', 1) , (5, current_timestamp, current_timestamp, '2020-07-01 09:00:00', '2020-07-01 10:00:00', '営業部ミーティング', 0); ## 予定公開割当範囲情報 INSERT INTO t_schedule_range_allocation(schedule_id, allocation_group_id) VALUES (3, 1) ,(3, 2) ,(4, 2); ## 出退勤情報 本日の日付に変更してから利用してください。 INSERT INTO t_attendance(emp_id, registered_date, attendance_status) VALUES (1, '2020-06-01 8:45:00', 1) , (1, '2020-06-01 18:05:30', 2) , (2, '2020-06-01 8:47:25', 1) , (2, '2020-06-01 19:30:20', 2) , (3, '2020-06-01 0:00:00', 7) , (1, '2020-06-02 8:45:00', 1) , (2, '2020-06-02 8:47:25', 1) , (3, '2020-06-02 8:50:10', 1) , (3, '2020-06-02 11:00:00', 4); *** ###### tags: `スケジュール管理システムTeam`