数据库实验,课程设计

员工管理系统的数据库设计

实验数据库选用MySQL,结合数据库原理相关知识模拟课题,创建员工管理系统数据库。(应付学校实验报告)

一、实验目的

1.能够正确运用数据库的思想与方法,结合一个模拟课题,复习、巩固数据库知识,提高数据库的实践能力。

2.能够完成对具体某一个管理系统的数据库分析和概念结构和逻辑结构设计能力,并通过数据库管理软件完成实施操作。

二、实验内容

1、需求分析

通过设计数据库实现对企业员工的基本信息、职位、所属项目、工资等数据进行存储、查询和管理。数据库需要存储员工的基本信息如员工编号、身份证号、联系方式、所属部门信息、工资信息等,还要对员工参与的项目信息进行存储,如项目编号,项目名称,项目起止时间等。

系统开发先通过ER图设计模型,然后根据设计好的概念模型进行建库建表。

并且加入相关数据,在数据库中完成查询管理工作。

2、概念结构设计:ER图

三、逻辑结构设计

①关系模式设计

一个公司部门中可以包含多个员工,每个员工只能属于一个公司部门,因此员工与公司部门的关系为N:1.

一个公司部门内可以多个职位,每个特定职位只能属于一个部门,因此公司部门与部门职位的关系为1:N.

每个员工可以属于不同部门的相同职位,及同一个职位可以对应多个员工,而每个员工只能由一个职位,因此部门职位与员工的关系为1:N.

每个员工都对应一个工资单,每个工资单只能属于一个员工,因此员工表与工资表的关系是1:1.

每个员工可以参与多个项目,每个项目可以由多个员工参与,因此员工表与项目表的关系是N:M.

②按照三范式标准检验

没有传递依赖,是3NF

四、物理结构设计:表的结构设计和索引设计部分

4.1、表结构

1:1的关系如员工信息表和工资表,可将员工信息表的主键设置为工资表的外键,也可将工资表的主键设置为员工信息表的外键

1:N的关系如公司部门表和员工信息表,公司部门表为1的一方,员工信息表为N的一方,需要将公司部门表的主键设为员工信息表的外键。

M:N的关系如员工信息表和项目表,需要建立一个联系表(员工和项目关系表)将员工信息表的主键和项目表的主键分别设为员工和项目关系表的外键。

4.2、表索引

  • 根据员工姓名建立索引
  • 根据部门名称建立索引
  • 根据项目名称建立索引
  • 根据职位名称建立索引

五、SQL语句实施: 建表、输入数据

CREATE DATABASE `employee_management` CHARACTER SET utf8 COLLATE utf8_general_ci;USE `employee_management`;CREATE TABLE `employee` (`employee_id` int(8) COMMENT '员工id',`department_id` int(8) NULL COMMENT '部门id',`position_id` int(8) NULL COMMENT '职位id',`employee_name` varchar(50) NULL COMMENT '员工名称',`cart_id` int NULL COMMENT '身份证号',`sex` varchar(10) NULL COMMENT '性别',`phone` varchar(20) NULL COMMENT '手机号',`email` varchar(30) NULL COMMENT '邮箱',PRIMARY KEY (`employee_id`)
);CREATE TABLE `department`(`department_id` int(8) PRIMARY KEY,`department_name` varchar(50),`chairman_number` varchar(20)
);CREATE TABLE `POSITION` (`position_id` int(8) PRIMARY key,`department_id` int(8),`position_name` varchar(20)
);CREATE TABLE `project` (`project_id` int(8) PRIMARY key,`project_name` VARCHAR(20),`start_time` varchar(20),`end_time` varchar(20)
);#员工和项目关系表CREATE TABLE `emp_project_info`(`emp_project_r_id` int PRIMARY KEY,`employee_id` int(8),`project_id` int(8)
);CREATE TABLE `salary_info` (`bill_id` int(8) PRIMARY key,`employee_id` int(8),`base_pay` int,`insurance_pay` int,`merit_pay` int,`subsidy_pay` int,`overtime_pay` int
);#添加表之间的约束ALTER TABLE `salary_info`
ADD FOREIGN KEY (`employee_id`) REFERENCES `employee` (`employee_id`);ALTER TABLE `salary_info`
ADD FOREIGN KEY (`employee_id`) REFERENCES `employee` (`employee_id`);ALTER TABLE `position`
ADD FOREIGN KEY (`department_id`) REFERENCES `department` (`department_id`);ALTER TABLE `emp_project_info`
ADD FOREIGN KEY (`employee_id`) REFERENCES `employee` (`employee_id`),
ADD FOREIGN KEY (`project_id`) REFERENCES `project` (`project_id`);ALTER TABLE `employee`
ADD FOREIGN KEY (`position_id`) REFERENCES `position` (`position_id`);#3 创建索引
CREATE INDEX idx_emp_name ON employee(employee_name);CREATE INDEX idx_dept_name ON department(department_name);CREATE INDEX idx_project_name ON project(project_name);ALTER TABLE `position`
ADD INDEX `idx_position_name`(`position_name`) USING BTREE;#插入数据
INSERT INTO `department` (`department_id`, `department_name`, `chairman_number`) VALUES (1001, '开发部', '202101');
INSERT INTO `department` (`department_id`, `department_name`, `chairman_number`) VALUES (1002, '设计部', '202102');INSERT INTO `position` (`position_id`, `department_id`, `position_name`) VALUES (2001, 1001, '技术总监');
INSERT INTO `position` (`position_id`, `department_id`, `position_name`) VALUES (2002, 1002, '设计总监');INSERT INTO `employee` VALUES (202101, 1001, 2001, '张三', 2204554, '男', '21343545', '23478957@qq.com');
INSERT INTO `employee` VALUES (202102, 1001, 2001, '李四', 2203425, '女', '23475453', '23184672@qq.com');
INSERT INTO `employee` VALUES (202103, 1001, 2001, '王五', 2204545, '男', '32313435', '12323233@qq.com');
INSERT INTO `employee` VALUES (202104, 1002, 2002, '刘六', 2206756, '女', '12313445', '32847239@qq.com');
INSERT INTO `employee` VALUES (202105, 1002, 2002, '赵七', 2204735, '男', '32490294', '31287463@qq.com');INSERT INTO `project` VALUES (3001, 'xx电子平台', '2021.01', '2021.03');
INSERT INTO `project` VALUES (3002, 'xx电商', '2021.04', '2021.07');INSERT INTO `emp_project_info` (`emp_project_r_id`, `employee_id`, `project_id`) VALUES (4001, 202101, 3001);
INSERT INTO `emp_project_info` (`emp_project_r_id`, `employee_id`, `project_id`) VALUES (4002, 202102, 3001);
INSERT INTO `emp_project_info` (`emp_project_r_id`, `employee_id`, `project_id`) VALUES (4003, 202103, 3001);
INSERT INTO `emp_project_info` (`emp_project_r_id`, `employee_id`, `project_id`) VALUES (4004, 202104, 3002);
INSERT INTO `emp_project_info` (`emp_project_r_id`, `employee_id`, `project_id`) VALUES (4005, 202105, 3002);INSERT INTO `salary_info` VALUES (5001, 202101, 8000, 1000, 2000, 4000, 3000);
INSERT INTO `salary_info` VALUES (5002, 202102, 7500, 1000, 2000, 3000, 3000);
INSERT INTO `salary_info` VALUES (5003, 202103, 8000, 1000, 2000, 4000, 3000);
INSERT INTO `salary_info` VALUES (5004, 202104, 7000, 1000, 2000, 2000, 3000);
INSERT INTO `salary_info` VALUES (5005, 202105, 9000, 1000, 2000, 1000, 3000);

六、查询,创建视图操作(SQL)

#1.查询全部员工的平均工资
SELECT AVG(base_pay+insurance_pay+merit_pay+subsidy_pay+overtime_pay) avg_salary FROM salary_info;#2.查询开发部员工的平均工资SELECT AVG(base_pay+insurance_pay+merit_pay+subsidy_pay+overtime_pay) avg_salary_dep
FROM salary_info WHERE employee_id IN(SELECT employee_id FROM employee,department
WHERE employee.department_id=department.department_id AND department.department_id=1001);#3.查询各个项目平均补贴
SELECT AVG(subsidy_pay) FROM salary_info WHERE employee_id
IN(SELECT employee_id FROM emp_project_info WHERE project_id=3001);
SELECT AVG(subsidy_pay) FROM salary_info WHERE employee_id
IN(SELECT employee_id FROM emp_project_info WHERE project_id=3002);#4.查询工资最高的员工的姓名
SELECT employee_name FROM employee e
JOIN salary_info s
ON e.employee_id=s.employee_id
HAVING MAX(base_pay+insurance_pay+merit_pay+subsidy_pay+overtime_pay);#5.查询技术总监的平均工资
SELECT AVG(base_pay+insurance_pay+merit_pay+subsidy_pay+overtime_pay) avg_pos FROM salary_info
WHERE employee_id IN(SELECT employee_id FROM employee
WHERE position_id IN(SELECT position_id FROM `position` WHERE `position_name`='技术总监'));#创建视图:
CREATE VIEW s1 AS SELECT AVG(base_pay+insurance_pay+merit_pay+subsidy_pay+overtime_pay) avg_salary FROM salary_info;

七、实验总结

经过这次实验,我学习如何正确运用数据库,加深了对数据库思想与方法的理解,通过这次实验复习、巩固数据库知识,提高数据库的实践能力。深一步了解了数据库的设计,学会创建ER图,能够更加熟练的完成对具体某一个管理系统的数据库分析和概念结构和逻辑结构设计能力,并通过数据库管理软件完成实施操作。

数据库设计员工管理系统相关推荐

  1. 数据库设计图书管理系统

    目录 一. 摘要 二. 前言 三.主体 3.1需求分析 3.1.1 功能需求分析 3.1.2 数据需求分析 3.2 概念设计 3.2.1 数据字典 3.2.2 ERD(实体关系图) 3.2.3 use ...

  2. 【参赛作品29】基于openGauss数据库设计人力资源管理系统实验

    本文作者: 瓜西西 本文主要面向openGauss数据库初学者,帮助初学者完成一些简单的数据库管理以及GUI,设计一个简单的人力资源管理系统.本文只包含部分代码,读者需要结合自己的数据库弹性公网.数据 ...

  3. 数据库设计-学生管理系统数据库系统

    数据库系统设计综合实验 注: 这一篇的代码是我看着视频(很详细)一步一步打出来.其中在C#的设计,看到代码也无用,主要那个设计过程才是比较重要的,所以我顺便也把视频链接发上来了,跟着视频一步一步来更方 ...

  4. 数据库设计-航班管理系统

    设计目的: 随着社会发展的不断进步,旅游业的蓬勃发展,机票预订系统对人们的生活影响越来越大,为了实现航空公司以及旅游业的现代化管理,方便旅客,需要开发一个机票预订系统.该系统具有完整的存储,查询,核对 ...

  5. 美工实战数据库设计——图书管理系统

    一.数据库大致经历了以下几个阶段: 1.人工管理阶段: 2.文件系统阶段: 3.数据库系统阶段: 数据库系统有一下几个特点: 1)数据结构化 2)数据独立性高 指的是应用程序与磁盘存储数据之间的相互独 ...

  6. 数据库设计~电影院管理系统

    基于SQL SERVER 包含:需求分析.概念结构设计.逻辑结构设计.数据库物理设计.数据库实施与测试.生成的文档有:展示PPT,设计论文,mdf和ldf程序. 实现的功能主要有:影片上新.订票.退票 ...

  7. SpringBoot项目实战:员工管理系统

    员工管理系统 该项目实现了以下功能,对应的源码与数据库文件在资源中可下载 项目部分展示 1. 数据库设计 创建数据库 employee,创建两个表 employee(员工表)和depart(部门表) ...

  8. 人事管理java 课程设计_java课程设计人事管理系统

    <java课程设计人事管理系统>由会员分享,可在线阅读,更多相关<java课程设计人事管理系统(31页珍藏版)>请在人人文库网上搜索. 1.人事管理系统一. 系统需求分析: ( ...

  9. 数据库(教务管理系统)

    1.2需求分析 1.2.1 功能需求 系统的用户有三个不同的角色,分别是教务教师,管理人员,学生,角色不同,需求不同.通过分析,各用户的需求如下: 1.2.1.1 教师用户需求 教师可以通过系统录入成 ...

  10. 数据库课程设计-员工信息管理系统(基于python和MySQL实现)

    一.项目地址 具体项目相关信息可移步至我的Github查看,那里有整套项目文件以及课程设计报告等,仅供交流学习和参考,如有错误之处请多多指正哦. 二.系统定义 随着计算机技术的不断发展,计算机作为知识 ...

最新文章

  1. 关于NameError: name ‘sns‘ is not defined->ModuleNotFoundError: No module named ‘seaborn‘错误提示
  2. ReentrantLock中的Condition(等待和唤醒)
  3. opencv方框内图像保存_opencv利用矩形框选中某一区域并保存为新图片
  4. 20145324 20145325 《信息安全系统设计基础》实验三
  5. 喜报!第四范式助推百胜中国斩获2020 IDC数字化转型重磅大奖
  6. 【Linux】一步一步学Linux——ifdown命令(153)
  7. 获取数组名称 php,php 获取美国50个州的名称、简写对应数组用法示例
  8. java转换汇编,请问如何把JAVA程序转为汇编?
  9. wordpress发布模块_如何用WordPress打造出一个类似知乎的问答站点
  10. 12.history的用法
  11. linux下几个压缩命令
  12. I.MX6 gpio-keys driver hacking
  13. linux 脚本 格式化,Formatting Long Lines 格式化多行字符的shell脚本
  14. 用tensorflow实现最简单的神经网络
  15. TOP 1%的软件工程师和其他 99%有什么不同?
  16. cocos2d-x将背景色改为白色
  17. ref: 九大数据仓库方案特点比较
  18. 斐讯k2华硕虚拟服务器,斐讯K2路由器三步刷入华硕固件
  19. python贴吧顶贴_Python实现百度贴吧自动顶贴机
  20. with admin option和with grant option的区别与用法

热门文章

  1. catia中尺子没了怎么调出来_CATIA点线面工具栏怎么调出来
  2. 信息学奥赛一本通习题答案(一)
  3. phpwamp mysql_PHPWAMP配置修改与Web服务器和php以及mysql的具体配置修改
  4. desc和asc用法
  5. RGB三色灯珠WS2812B/WS2815B
  6. C#爬虫项目:SWorld阅读
  7. Linux_版简易C语言IDE制作
  8. 在虚拟机的ubuntu 中配置 tftp 服务器(2021-4-14)
  9. idea导入项目出现时钟标志
  10. vb.net读取写入EXCEl的终极方法-NOPI。