员工管理数据库

按照要求实现员工管理数据库系统中的指定操作:

1、创建一个数据库 staff,并在数据库中创建以下四张表:

员工表 employee(员工编号id,姓名userName,出生日期birthDate,身份证号idCard,登录名称loginName,登录密码password,手机号mobile,电子邮件email,部门编号deptId,员工级别level,员工头像avatar,备注remark)

部门表 dept(部门编号id,部门名称deptName,部门经理编号managerId)

工资表payroll(工资编号id,员工编号empId,基本工资baseSalary,应发工资actualSalary,奖金bonus,缺勤扣钱deductMoney,薪资发放日期grantDate)

请假表ask_leave(请假编号id,员工编号empId,请假原因leaveReason,请假开始时间beginDate,请假结束时间endDate,提交时间submitDate,审核人编号auditId(该列有触发器维护),申请状态status,审核意见auditOpinion)

基础数据自己填写。

CREATE DATABASE staff;  

USE staff;  

CREATE TABLE employee (  

    id INT PRIMARY KEY,  

    userName VARCHAR(50),  

    birthDate DATE,  

    idCard VARCHAR(18),  

    loginName VARCHAR(50),  

    password VARCHAR(255),  

    mobile VARCHAR(20),  

    email VARCHAR(100),  

    deptId INT,  

    level VARCHAR(10),  

    avatar TEXT,  

    remark TEXT  

);  

CREATE TABLE dept (  

    id INT PRIMARY KEY,  

    deptName VARCHAR(50),  

    managerId INT  

);  

CREATE TABLE payroll (  

    id INT PRIMARY KEY,  

    empId INT,  

    baseSalary DECIMAL(10, 2),  

    actualSalary DECIMAL(10, 2),  

    bonus DECIMAL(10, 2),  

    deductMoney DECIMAL(10, 2),  

    grantDate DATE,  

    FOREIGN KEY (empId) REFERENCES employee(id)  

);  

CREATE TABLE ask_leave (  

    id INT PRIMARY KEY,  

    empId INT,  

    leaveReason TEXT,  

    beginDate DATE,  

    endDate DATE,  

    submitDate DATE,  

    auditId INT,  

    status VARCHAR(20),  

    auditOpinion TEXT,  

    FOREIGN KEY (empId) REFERENCES employee(id)  

);  

2、编写存储过程实现插入员工表:参数为:员工编号id,姓名userName,出生日期birthDate,身份证号idCard,登录名称loginName,登录密码password,手机号mobile,电子邮件email,部门编号deptId,员工级别level,员工头像avatar,备注remark。

存储过程名称为:insert_employee。

DELIMITER $$

DROP PROCEDURE IF EXISTS insert_employee$$

CREATE

    PROCEDURE `staff`.`insert_employee`(

    IN p_id INT,

    IN u_name VARCHAR(20),

    IN birth_date VARCHAR(20),

    IN id_card VARCHAR(20),

    IN login_name VARCHAR(20),

    IN pass_word VARCHAR(20),

    IN mobile_ VARCHAR(20),

    IN eamil_ VARCHAR(20),

    IN dept_id VARCHAR(20),

    IN level_ VARCHAR(20),

    IN avater_ VARCHAR(20),

    IN remark_ VARCHAR(20)

    )

    

    BEGIN

INSERT INTO employee(id,userName,birthDate,idCard,loginName,PASSWORD,mobile,email,deptid,LEVEL,avatar,remark)

VALUES(p_id,u_name,birth_date,id_card,login_name,pass_word,mobile_,eamil_,dept_id,level_,avater_,remark_);

    END$$

DELIMITER ;

3、利用存储过程在员工表中插入5条记录。

CALL insert_employee(1, 'John Doe', '1990-01-01', '123456789012345678', 'john_doe', 'password123', '1234567890', 'john@example.com', "1", 'junior', 'avatar_url', 'Employee remark');  

CALL insert_employee(2, 'John Doe', '1990-01-01', '123456789012345678', 'john_doe', 'password123', '1234567890', 'john@example.com', "1", 'junior', 'avatar_url', 'Employee remark');

CALL insert_employee(3, 'John Doe', '1990-01-01', '123456789012345678', 'john_doe', 'password123', '1234567890', 'john@example.com', "1", 'junior', 'avatar_url', 'Employee remark');

CALL insert_employee(4, 'John Doe', '1990-01-01', '123456789012345678', 'john_doe', 'password123', '1234567890', 'john@example.com', "1", 'junior', 'avatar_url', 'Employee remark');

CALL insert_employee(5, 'John Doe', '1990-01-01', '123456789012345678', 'john_doe', 'password123', '1234567890', 'john@example.com', "1", 'junior', 'avatar_url', 'Employee remark');

4、创建触发器,当插入或修改工资表payroll时,应发工资自动为“基本工资+奖金-缺勤扣钱”。

DELIMITER $$

CREATE

    TRIGGER `staff`.`trg_after_payroll_insert_` BEFORE INSERT

    ON staff.payroll

    FOR EACH ROW

    BEGIN

IF new.id IS NOT NULL THEN

 SET NEW.actualSalary = NEW.baseSalary + NEW.bonus - NEW.deductMoney;

END IF;

END$$

DELIMITER ;

DELIMITER $$

CREATE

    TRIGGER `staff`.`trg_after_payroll_UPDATE_` BEFORE INSERT

    ON staff.payroll

    FOR EACH ROW

    BEGIN

IF new.id IS NOT NULL THEN

 SET NEW.actualSalary = NEW.baseSalary + NEW.bonus - NEW.deductMoney;

END IF;

END$$

DELIMITER ;

5、在员工表中依据姓名userName建立索引。索引名为:index_userName。

CREATE INDEX index_userName ON employee(userName)

6、建立员工部门工资视图(包含员工名称,部门名称,基本工资,应发工资,奖金,缺勤扣钱)视图名称:v_employee_dept_payroll。

CREATE VIEW v_employee_dept_payroll AS

SELECT e.userName,d.deptName,p.baseSalary,p.actualSalary,p.bonus,p.deductMoney FROM dept d,employee e,payroll p

WHERE e.id=p.empId AND d.id = e.deptid;

7、利用触发器实现插入请假信息时,审核人编号自动填入请假人所在部门的部门经理编号。触发器名称为:insert_ask_leave。

DELIMITER $$

CREATE

    TRIGGER `staff`.`insert_ask_leave` BEFORE INSERT

    ON staff.ask_leave

    FOR EACH ROW

    BEGIN

DECLARE manage_id INT;

SELECT d.managerId INTO manage_id FROM dept d JOIN employee e ON e.deptid=d.id WHERE new.empId=e.id;

SET new.auditId = manage_id;

    END$$

DELIMITER ;
————————————————

                            版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
                        
原文链接:https://blog.csdn.net/genghw666/article/details/138872658

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值