-- 创建数据库,如果不存在 CREATE DATABASE IF NOT EXISTS attendance_system CHARACTER SET utf8 COLLATE utf8_general_ci; -- 使用创建的数据库 USE attendance_system; -- 1. 创建员工表(Employee),该表需要先创建 CREATE TABLE IF NOT EXISTS Employee ( EmployeeID VARCHAR(50) PRIMARY KEY, -- 员工ID,主键 Name VARCHAR(100) NOT NULL, -- 姓名 Gender VARCHAR(10) NOT NULL, -- 性别(男/女) DateOfBirth DATE NOT NULL DEFAULT '2000-01-01', -- 出生日期,默认值 Position VARCHAR(100) NOT NULL, -- 职位 DepartmentID VARCHAR(50), -- 部门ID ContactInfo VARCHAR(50), -- 联系方式 HireDate DATE NOT NULL, -- 入职日期 EmploymentStatus VARCHAR(50) NOT NULL -- 状态(在职/离职/休假) ); -- 2. 创建部门表(Department),需要在Employee表后创建,因为Department表需要引用Employee表中的ManagerID CREATE TABLE IF NOT EXISTS Department ( DepartmentID VARCHAR(50) PRIMARY KEY, -- 部门ID,主键 DepartmentName VARCHAR(100) NOT NULL, -- 部门名称 ManagerID VARCHAR(50), -- 主管ID,外键,关联到员工表 FOREIGN KEY (ManagerID) REFERENCES Employee(EmployeeID) -- 外键,关联到员工表 ); -- 3. 创建考勤记录表(Attendance),该表依赖Employee表 CREATE TABLE IF NOT EXISTS Attendance ( AttendanceID VARCHAR(50) PRIMARY KEY, -- 考勤ID,主键 EmployeeID VARCHAR(50), -- 员工ID,外键,关联到员工表 AttendanceDate DATE NOT NULL, -- 考勤日期 CheckInTime DATETIME, -- 上班时间 CheckOutTime DATETIME, -- 下班时间 WorkingHours INT, -- 工作时长(小时) OvertimeHours INT, -- 加班时长(小时) AttendanceStatus VARCHAR(20) NOT NULL, -- 考勤状态(正常/迟到/早退/缺勤) FOREIGN KEY (EmployeeID) REFERENCES Employee(EmployeeID) -- 外键,关联到员工表 ); -- 4. 创建假期申请表(LeaveRequest),该表依赖Employee表 CREATE TABLE IF NOT EXISTS LeaveRequest ( RequestID VARCHAR(50) PRIMARY KEY, -- 申请ID,主键 EmployeeID VARCHAR(50), -- 员工ID,外键,关联到员工表 LeaveType VARCHAR(50) NOT NULL, -- 假期类型 StartDate DATE NOT NULL, -- 开始日期 EndDate DATE NOT NULL, -- 结束日期 LeaveDays INT NOT NULL, -- 假期天数 RequestStatus VARCHAR(20) NOT NULL, -- 申请状态(待审批/已批准/已拒绝) ApproverID VARCHAR(50), -- 审批人ID,外键,关联到员工表 Remarks TEXT, -- 备注 FOREIGN KEY (EmployeeID) REFERENCES Employee(EmployeeID), -- 外键,关联到员工表 FOREIGN KEY (ApproverID) REFERENCES Employee(EmployeeID) -- 外键,关联到员工表 ); -- 5. 创建用户角色表(UserRoles) CREATE TABLE IF NOT EXISTS UserRoles ( RoleID VARCHAR(50) PRIMARY KEY, -- 角色ID,主键 RoleName VARCHAR(100) NOT NULL, -- 角色名称 RoleDescription TEXT NOT NULL -- 角色描述 ); -- 6. 创建用户账号表(UserLogin),该表依赖Employee表和UserRoles表 CREATE TABLE IF NOT EXISTS UserLogin ( UserID VARCHAR(50) PRIMARY KEY, -- 用户ID,主键 EmployeeID VARCHAR(50), -- 员工ID,外键,关联到员工表 RoleID VARCHAR(50), -- 角色ID,外键,关联到用户角色表 Username VARCHAR(50) NOT NULL, -- 用户名 Password VARCHAR(255) NOT NULL, -- 密码(加密存储) LastLoginTime DATETIME, -- 最后登录时间 AccountStatus VARCHAR(20) NOT NULL, -- 账号状态(有效/禁用) FOREIGN KEY (EmployeeID) REFERENCES Employee(EmployeeID), -- 外键,关联到员工表 FOREIGN KEY (RoleID) REFERENCES UserRoles(RoleID) -- 外键,关联到用户角色表 ); -- 7. 创建考勤统计表(AttendanceSummary),该表依赖Employee表 CREATE TABLE IF NOT EXISTS AttendanceSummary ( SummaryID VARCHAR(50) PRIMARY KEY, -- 统计ID,主键 EmployeeID VARCHAR(50), -- 员工ID,外键,关联到员工表 Month DATE NOT NULL, -- 统计月份 PresentDays INT, -- 出勤天数 LateCount INT, -- 迟到次数 EarlyLeaveCount INT, -- 早退次数 AbsentDays INT, -- 缺勤天数 TotalOvertimeHours INT, -- 加班总时长(小时) FOREIGN KEY (EmployeeID) REFERENCES Employee(EmployeeID) -- 外键,关联到员工表 ); -- 8. 创建系统日志表(SystemLogs),该表依赖UserLogin表 CREATE TABLE IF NOT EXISTS SystemLogs ( LogID VARCHAR(50) PRIMARY KEY, -- 日志ID,主键 UserID VARCHAR(50), -- 用户ID,外键,关联到用户账号表 ActionType VARCHAR(50) NOT NULL, -- 操作类型 ActionTime DATETIME NOT NULL, -- 操作时间 Description TEXT, -- 操作描述 FOREIGN KEY (UserID) REFERENCES UserLogin(UserID) -- 外键,关联到用户账号表 ); -- 9. 创建培训记录表(TrainingRecords),该表依赖Employee表 CREATE TABLE IF NOT EXISTS TrainingRecords ( TrainingID VARCHAR(50) PRIMARY KEY, -- 培训ID,主键 EmployeeID VARCHAR(50), -- 员工ID,外键,关联到员工表 TrainingName VARCHAR(100) NOT NULL, -- 培训名称 TrainingDate DATE NOT NULL, -- 培训日期 TrainingHours INT, -- 培训时长(小时) TrainingStatus VARCHAR(50) NOT NULL, -- 培训状态(已完成/进行中/未完成) FOREIGN KEY (EmployeeID) REFERENCES Employee(EmployeeID) -- 外键,关联到员工表 ); -- 10. 创建绩效考核表(PerformanceAppraisal),该表依赖Employee表 CREATE TABLE IF NOT EXISTS PerformanceAppraisal ( ReviewID VARCHAR(50) PRIMARY KEY, -- 考核ID,主键 EmployeeID VARCHAR(50), -- 员工ID,外键,标识被考核的员工 ReviewDate DATE NOT NULL, -- 考核日期 ReviewPeriod VARCHAR(50) NOT NULL, -- 考核周期(季度/年度) ReviewScore INT, -- 考核评分 ReviewGrade VARCHAR(50), -- 考核等级(A/B/C等) ReviewerID VARCHAR(50), -- 考核人ID,外键,标识考核主管 FOREIGN KEY (EmployeeID) REFERENCES Employee(EmployeeID), -- 外键,关联到员工表 FOREIGN KEY (ReviewerID) REFERENCES Employee(EmployeeID) -- 外键,关联到员工表 ); -- 提示:所有的表创建完成后,可以执行数据插入脚本(如 `initialize_data.sql`)。