数据库设计员工管理系统

数据库实验,课程设计

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

实验数据库选用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,
  `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`, `chairman_number`) VALUES (1002, '设计部', '202102');

INSERT INTO `position` (`position_id`, `department_id`, `position_name`) VALUES (2001, 1001, '技术总监');
INSERT INTO `position` (`position_id`, `position_name`) VALUES (2002, 1002, '设计总监');

INSERT INTO `employee` VALUES (202101, 2001, '张三', 2204554, '男', '21343545', '23478957@qq.com');
INSERT INTO `employee` VALUES (202102, '李四', 2203425, '女', '23475453', '23184672@qq.com');
INSERT INTO `employee` VALUES (202103, '王五', 2204545, '32313435', '12323233@qq.com');
INSERT INTO `employee` VALUES (202104, 2002, '刘六', 2206756, '12313445', '32847239@qq.com');
INSERT INTO `employee` VALUES (202105, '赵七', 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`, `project_id`) VALUES (4002, 202102, `project_id`) VALUES (4003, 202103, `project_id`) VALUES (4004, 202104, 3002);
INSERT INTO `emp_project_info` (`emp_project_r_id`, `project_id`) VALUES (4005, 202105, 3002);

INSERT INTO `salary_info` VALUES (5001, 8000, 1000, 2000, 4000, 3000);
INSERT INTO `salary_info` VALUES (5002, 7500, 3000, 3000);
INSERT INTO `salary_info` VALUES (5003, 3000);
INSERT INTO `salary_info` VALUES (5004, 7000, 3000);
INSERT INTO `salary_info` VALUES (5005, 9000, 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图,能够更加熟练的完成对具体某一个管理系统的数据库分析和概念结构和逻辑结构设计能力,并通过数据库管理软件完成实施操作。

原文地址:https://blog.csdn.net/qq_51628741

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


文章浏览阅读752次。关系型数据库关系型数据库是一个结构化的数据库,创建在关系模型(二维表模型)基础上,一般面向于记录SQL语句(标准数据查询语言)就是一种基于关系型数据库的语言,用于执行对关系型数据库中数据的检索和操作主流的关系数据库包括Oracle、Mysql、SQL Server、Microsoft Access、DB2等非关系型数据库NoSQL(nOSQL=Not Only SQL),意思是“不仅仅是SQL”,是非关系型数据库的总称。除了主流的关系型数据库外的数据库,都认为是非关系型主流的NoSQ.._redis是非关系型数据库吗
文章浏览阅读687次,点赞2次,收藏5次。商城系统中,抢购和秒杀是很常见的营销场景,在一定时间内有大量的用户访问商场下单,主要需要解决的问题有两个:1. 高并发对数据库产生的压力;2. 竞争状态下如何解决商品库存超卖;高并发对数据库产生的压力对于第一个问题,使用缓存来处理,避免直接操作数据库,例如使用 Redis。竞争状态下如何解决商品库存超卖对于第二个问题,需要重点说明。常规写法:查询出对应商品的库存,判断库存数量否大于 0,然后执行生成订单等操作,但是在判断库存是否大于 0 处,如果在高并发下就会有问题,导致库存_php库存结余并发
文章浏览阅读1.4k次。MongoTemplate开发spring-data-mongodb提供了MongoTemplate和MongoRepository两种方式访问MongoDB,MongoRepository的方式访问较为简单,MongoTemplate方式较为灵活,这两种方式在Java对于MongoDB的运用中相辅相成。_springboot插入指定的mongodb数据库
文章浏览阅读887次,点赞10次,收藏19次。1.背景介绍1. 背景介绍NoSQL数据库是一种非关系型数据库,它的特点是可以存储非结构化的数据,并且可以处理大量的数据。HBase是一个分布式、可扩展的列式存储系统,它是基于Google的Bigtable设计的。HBase是一个开源的NoSQL数据库,它的核心功能是提供高性能的随机读写访问。在本文中,我们将对比HBase与其他NoSQL数据库,例如Redis、MongoDB、Cass...
文章浏览阅读819次。MongoDB连接失败记录_edentialmechanisn-scram-sha-1
文章浏览阅读470次。mongodb抽取数据到ES,使用ELK内部插件无法获取数据,只能试试monstache抽取mongodb数据,但是monstache需要mongodb replica set 模式才能采集数据。############monstache-compose文件。#replicas set 启动服务。# 默认备份节点不能读写,可以设置。# mydb指的是需要同步的数据库。#登录主mongodb初始化rs。#primary 创建用户。# ip地址注意要修改。# ip地址注意要修改。_monstache csdn
文章浏览阅读913次,点赞4次,收藏5次。storage:fork: trueadmin登录切换数据库注意: use 代表创建并使用,当库中没有数据时默认不显示这个库删除数据库查看表清单> show tables # 或者 > show collections表创建db.createCollection('集合名称', [options])table1字段类型描述capped布尔(可选)如果为 true,则创建固定集合。固定集合是指有着固定大小的集合,当达到最大值时,它会自动覆盖最早的文档。_mongodb5
文章浏览阅读862次。Centos7.9设置MongoDB开机自启(超全教程,一条龙)_mongodb centos开机启动脚本
文章浏览阅读1.3k次,点赞6次,收藏21次。NoSQL数据库使用场景以及架构介绍
文章浏览阅读856次,点赞21次,收藏20次。1.背景介绍1. 背景介绍NoSQL数据库是一种非关系型数据库,它的设计目标是为了解决传统关系型数据库(如MySQL、Oracle等)在处理大量不结构化数据方面的不足。NoSQL数据库可以处理大量数据,具有高性能、高可扩展性和高可用性。但是,与关系型数据库不同,NoSQL数据库没有固定的模式,数据结构也不一定是表格。在NoSQL数据库中,数据存储和查询都是基于键值对、列族、图形等不同的...
文章浏览阅读416次。NoSQL定义:非关系型、分布式、开放源码和具有横向扩展能力的下一代数据库。由c++编写的开源、高性能、无模式的基于分布式文件存储的文档型数据库特点:高性能、高可用性、高扩展性、丰富的查询支持、可替换已完场文档某个指定的数据字段应用场景:社交场景:使用mongodb存储用户信息游戏场景:用户信息,装备积分物流场景:订单信息,订单状态场景操作特点:数据量大;读写操作频繁;价值较低的数据,对事物性要求不高开源、c语言编写、默认端口号6379、key-value形式存在,存储非结构化数据。_nosql
文章浏览阅读1.5k次,点赞3次,收藏2次。Exception in thread "main" redis.clients.jedis.exceptions.JedisConnectionException: Failed to create socket. at redis.clients.jedis.DefaultJedisSocketFactory.createSocket(DefaultJedisSocketFactory.java:110) at redis.clients.jedis.Connection.connect(Conne_redis.clients.jedis.exceptions.jedisconnectionexception: failed to create so
文章浏览阅读6.5k次,点赞3次,收藏12次。readAnyDatabase(在所有数据库上都有读取数据的权限)、readWriteAnyDatabase(在所有数据库上都有读写数据的权限)、userAdminAnyDatabase(在所有数据库上都有管理user的权限)、dbAdminAnyDatabase(管理所有数据库的权限);:clusterAdmin(管理机器的最高权限)、clusterManager(管理和监控集群的权限)、clusterMonitor(监控集群的权限)、hostManager( 管理Server);_mongodb创建用户密码并授权
文章浏览阅读593次。Redis是一个基于内存的键值型NoSQL数据库,在实际生产中有着非常广泛的用处_搭建本地redis
文章浏览阅读919次。Key 的最佳实践[业务名]:[数据名]:[id]足够简短:不超过 44 字节不包含特殊字符Value 的最佳实践:合理的拆分数据,拒绝 BigKey选择合适数据结构Hash 结构的 entry 数量不要超过 1000(默认是 500,如果达到上限则底层会使用哈希表而不是 ZipList,内存占用较多)设置合理的超时时间批量处理的方案:原生的 M 操作Pipeline 批处理注意事项:批处理时不建议一次携带太多命令。Pipeline 的多个命令之间不具备原子性。_redis高级实战
文章浏览阅读1.2k次。MongoDB 递归查询_mongodb数据库 递归
文章浏览阅读1.2k次。通过实际代码例子介绍:如何通过MongoTemplate和MongoRepository操作数据库数据_springboot操作mongodb
文章浏览阅读687次,点赞7次,收藏2次。首先欢迎大家阅读此文档,本文档主要分为三个模块分别是:Redis的介绍及安装、RedisDesktopManager可视化工具的安装、主从(哨兵)模式的配置。_redis 主从配置工具
文章浏览阅读764次。天下武功,无坚不摧,唯快不破!我的名字叫 Redis,全称是 Remote Dictionary Server。有人说,组 CP,除了要了解她外,还要给机会让她了解你。那么,作为开发工程师的你,是否愿意认真阅读此心法抓住机会来了解我,运用到你的系统中提升性能。我遵守 BSD 协议,由意大利人 Salvatore Sanfilippo 使用 C 语言编写的一个基于内存实现的键值型非关系(NoSQL)..._redis 7.2 源码
文章浏览阅读2k次。MongoDB 的增删改查【1】_mongodb $inc