试题2-12:数据库设计与操作
(一)测试任务
任务描述:公司薪酬系统用于记录并发放员工薪资。该系统的数据库设计E-R图如图1所示。
图1 薪酬系统E-R图
该子系统涉及的表中各字段定义见表1到表3。
表1 部门表t_department
字段名 |
数据类型 |
是否允许空 |
是否为主键(默认为否) |
其它约束 |
字段说明 |
id |
int |
否 |
是 |
标识列,从1开始自动增长 |
编号 |
dept_name |
varchar(20) |
否 |
名称 |
||
description |
varchar(100) |
默认为null |
描述 |
||
manager_id |
int |
否 |
外键 |
部门经理ID |
表2 雇员表t_employee
字段名 |
数据类型 |
是否允许空 |
是否为主键(默认为否) |
其它约束 |
字段说明 |
id |
int |
否 |
是 |
标识列,从1开始自动增长 |
编号 |
name |
varchar(10) |
否 |
姓名 |
||
level |
int |
否 |
级别限制在1-15 |
级别 |
|
dept_id |
int |
否 |
外键 |
所属部门ID |
表3 薪水表t_salary
字段名 |
数据类型 |
是否允许空 |
是否为主键(默认为否) |
其它约束 |
字段说明 |
id |
int |
否 |
是 |
标识列,从1开始自动增长 |
编号 |
basic_salary |
decimal(10, 1) |
否 |
限制必须大于0 |
基本工资 |
|
performance_salary |
decimal(10, 1) |
否 |
绩效工资 |
||
salary_date |
datetime |
否 |
|||
employee_id |
int |
否 |
外键 |
薪酬所属雇员ID |
请按以上设计完成数据库创建、数据表创建和数据操作任务:
任务1:创建数据库(5分)
创建数据库EmployeeSalaryManagement。如果原来有该数据库,请先删除。
任务2:创建数据表及约束(30分)
(1)按表1到表3所列出字段, 创建数据表t_department、t_employee、t_salary,将三个表的主键列设为标识列,自动从1开始增长。(10分)
(2)根据表1到表3中的约束要求,建立好主建、外键、默认、检查、非空等约束。(20分)
CREATE DATABASE IF NOT EXISTS EmployeeSalaryManagement_dsw;
USE EmployeeSalaryManagement_dsw;CREATE TABLE IF NOT EXISTS t_department_dsw(
id_dsw1 int PRIMARY key auto_increment,
dept_name_dsw varchar(20) NOT NULL,
description_dsw varchar(100) DEFAULT NULL,
manager_id_dsw int not null
)ENGINE=InnoDB;
SELECT*FROM t_department_dsw;CREATE TABLE IF NOT EXISTS t_employee_dsw(
id_dsw int PRIMARY key auto_increment,
name_dsw varchar(10)not null,
level_dsw int not null check(level_dsw between 1 and 15),
dept_id_dsw int not null,
CONSTRAINT fk_t_employee_dsw_t_department_dsw FOREIGN KEY(dept_id_dsw)REFERENCES t_department_dsw(id_dsw1)on DELETE CASCADE on UPDATE CASCADE
)ENGINE=InnoDB;
SELECT*FROM t_employee_dsw;CREATE TABLE IF NOT EXISTS t_salary_dsw(
id_dsw2 int PRIMARY key auto_increment,
basic_salary_dsw decimal(10, 1)not null check(basic_salary_dsw>0),
performance_salary_dsw decimal(10, 1)not null ,
salary_date_dsw datetime not null,
employee_id_dsw int not null,
CONSTRAINT fk_t_salary_dsw_t_employee_dsw FOREIGN KEY(employee_id_dsw)REFERENCES t_employee_dsw(id_dsw)on DELETE CASCADE on UPDATE CASCADE
)ENGINE = InnoDB;
SELECT*FROM t_salary_dsw;
任务3:数据库操作(50分)
(1)在三个表中分别插入5条测试数据(样本数据包含下面题目中使用的数据)。
insert into t_department_dsw values(null,'销售部', NULL, '0020');
insert into t_department_dsw values(null,'人事部', NULL, '0002');
insert into t_department_dsw values(null,'生产部', NULL, '0027');
insert into t_department_dsw values(null,'后勤部', NULL, '0012');
insert into t_department_dsw values(null,'公关部', NULL, '0007');
SELECT*FROM t_department_dsw;insert into t_employee_dsw values(null,'王旭','002','1');
insert into t_employee_dsw values(null,'张世杰','012','1');
insert into t_employee_dsw values(null,'闻康','011','1');
insert into t_employee_dsw values(null,'曾裕豪','002','1');
insert into t_employee_dsw values(null,'胡佳','012','1');
insert into t_employee_dsw values(null,'孙达','012','2');
insert into t_employee_dsw values(null,'黄伟英','011','2');
insert into t_employee_dsw values(null,'蒋珂','005','2');
insert into t_employee_dsw values(null,'刘鹏','010','2');
insert into t_employee_dsw values(null,'刘明','015','3');
insert into t_employee_dsw values(null,'胡迎','005','3');
insert into t_employee_dsw values(null,'危博文','014','3');
insert into t_employee_dsw values(null,'黄佳','004','3');
insert into t_employee_dsw values(null,'张三','015','4');
insert into t_employee_dsw values(null,'胡好','005','4');
insert into t_employee_dsw values(null,'博文','014','4');
insert into t_employee_dsw values(null,'秦明','003','4');
SELECT*FROM t_employee_dsw;insert into t_salary_dsw values(null,'3000','200','2018-2-5','1');
insert into t_salary_dsw values(null,'3000','100','2018-10-7','2');
insert into t_salary_dsw values(null,'3000','200','2018-2-9','3');
insert into t_salary_dsw values(null,'2000','110','2018-2-5','4');
insert into t_salary_dsw values(null,'2000','100','2018-10-7','5');
insert into t_salary_dsw values(null,'2000','200','2018-2-9','6');
insert into t_salary_dsw values(null,'3000','200','2018-2-5','7');
insert into t_salary_dsw values(null,'3000','100','2018-10-7','8');
insert into t_salary_dsw values(null,'3000','200','201-2-9','9');
insert into t_salary_dsw values(null,'2000','110','2018-2-5','10');
insert into t_salary_dsw values(null,'2000','100','2019-10-7','11');
insert into t_salary_dsw values(null,'2000','200','2019-2-9','12');
insert into t_salary_dsw values(null,'2000','100','2019-10-7','13');
insert into t_salary_dsw values(null,'3000','200','2018-2-9','14');
insert into t_salary_dsw values(null,'2000','110','2019-2-5','15');
insert into t_salary_dsw values(null,'2000','100','2019-10-7','16');
insert into t_salary_dsw values(null,'2000','200','2020-2-9','17');
SELECT*FROM t_salary_dsw;
(2)查询t_employee表中的员工id、员工姓名和部门编号。
SELECT id_dsw,name_dsw,dept_id_dsw
FROM t_employee_dsw;
(3)查询员工姓名含‘张’的员工id、员工姓名和部门编号。
SELECT id_dsw,name_dsw,dept_id_dsw
FROM t_employee_dsw
WHERE name_dsw like '%张%';
(4)查询部门的人数和平均工资。
SELECT COUNT(b.dept_id_dsw),AVG(c.basic_salary_dsw)
FROM t_salary_dsw c,t_employee_dsw b
where b.dept_id_dsw=c.employee_id_dsw;
(5)删除雇员‘张三’的所有信息。
delete from t_salary_dsw
WHERE id_dsw2=(SELECT id_dsw from t_employee_dsw where name_dsw='张三');SELECT*FROM t_salary_dsw;delete from t_employee_dsw
where name_dsw='张三';
SELECT*FROM t_employee_dsw;
试题2-12:数据库设计与操作相关推荐
- 二、数据库设计与操作
一. 数据库设计 仿QQ数据库一共包括5张数据表,每张数据表结构如下: 1. tb_User(用户信息表) 这张表主要用来存储用户的好友关系与信息 字段名 数据类型 是否Null值 默 ...
- 一套外企的数据库设计面试题
最近发现园子里面关于数据库方面的文章比较多,正好我也是一个喜欢凑热闹的家伙,那就跟着烧一把火吧.^_^ 这是前阵子一个朋友面试外企的一套关于数据库设计的试题,有兴趣的朋友不妨一试. Part I ...
- 一个在线ER模型设计工具:支持数据库设计、生成、反向工程、优化和文档生成等操作
ER模型介绍 ER模型,即实体关系模型,是数据库建模的一种重要方法.它可以帮助开发人员更好地理解数据库结构,并确定数据库的概念模型.在本文中,我们将详细介绍ER模型设计的基本概念和过程. 首先,我们需 ...
- 在线 OJ 项目(二) · 操作数据库 · 设计前后端交互的 API · 实现在线编译运行功能
一.操作数据库前的准备 二.封装操作数据库数据的相关操作 三.设计前后端交互的 API 四.实现在线编译运行功能 一.操作数据库前的准备 设计数据库表 我们需要对数据库中存储的题目进行操作. 创建一个 ...
- MySQL数据库设计概念(多表查询事务操作)
每天进步一点点 数据库设计概念 数据库设计简介 表关系(多对多) 表关系(一对多) 表关系之一对一 多表查询 笛卡尔积现象 内连接查询 外连接查询 嵌套查询(子查询) 事务操作 事务的概念 手动提交事 ...
- Bootstrap4+MySQL前后端综合实训-Day04-AM【新闻管理手机端页面+数据库操作(PowerDesigner 图形化数据库设计软件、SQLyog软件)】
[Bootstrap4前端框架+MySQL数据库]前后端综合实训[10天课程 博客汇总表 详细笔记] 目 录 W3C标准盒子模型和IE盒子模型的区别 Bootstrap4--新闻管理手机端页面 菜 ...
- MySQL面试题 数据库设计三范式
第一范式 属性(字段)的原子性约束,要求属性具有原子性,不可再分割: 比如个人信息,个人信息不能作为一个字段,它可以再分为姓名.name.age等: 第二范式 记录的惟一性约束,要求记录有惟一标识,每 ...
- php面试题之五——MySQL数据库(基础部分)
五.MySQL数据库 mysql_num_rows() mysql_affected_rows() 这两个函数都作用于 mysql_query($query)操作的结果,mysql_num_rows( ...
- 七、Oracle 数据库设计
1. 原始单据与实体之间的关系 可以是一对一.一对多.多对多的关系.在一般情况下,它们是一对一的关系:即一张原始单据对应且只对应一个实体. 在特殊情况下,它们可能是一对多或多对一的关系,即一张原始单证 ...
最新文章
- mysql5.7 生成列 generated column
- 【11】nvjdc不能用以后另一种jd ck获取办法
- 为什么需要Redis 集群
- Java每天5道面试题,跟我走,offer有!(九)
- Kali Linux 和 渗透测试
- java如何寻找main函数对应的类
- 漫步线性代数二十六——特征值和特征向量(续)
- 用bitbucket积累代码
- TensorFlow 资源大全中文版
- tcp下载窗口太小的问题_面试官:换人!他连 TCP 这几个参数都不懂(二)
- 暴风影音使用技巧十则
- oracle 10g 各版本下载地址
- [RK3288][Android6.0] 调试笔记 --- 播放搜狐视频会Crash问题
- TFIDF理解和应用
- JavaScript数据源版省市县三级联动
- docker参数详解
- 有什么可以赚钱的副业?日入300元就靠这几个副业!
- 莫名骨痛,警惕骨转移
- vm虚拟机输入法_VM虚拟机中fedora28 无法使用中文输入法问题
- 微信电商小程序开发有什么好处呢