设计MySQL数据库常常会遇到的问题
发表于:2024-09-21 作者:千家信息网编辑
千家信息网最后更新 2024年09月21日,本文主要给大家介绍设计MySQL数据库常常会遇到的问题,文章内容都是笔者用心摘选和编辑的,具有一定的针对性,对大家的参考意义还是比较大的,下面跟笔者一起了解下设计MySQL数据库常常会遇到的问题吧。第
千家信息网最后更新 2024年09月21日设计MySQL数据库常常会遇到的问题
本文主要给大家介绍设计MySQL数据库常常会遇到的问题,文章内容都是笔者用心摘选和编辑的,具有一定的针对性,对大家的参考意义还是比较大的,下面跟笔者一起了解下设计MySQL数据库常常会遇到的问题吧。
第一题:层级数据库设计
题目描述:现在有10万条左右的数据,记录一个部门的员工。大部门下是层级结构,有许多个子部门。比如,一级部分A,二级部门A',B',C',三级部门A",B",C"。试问如何设计数据库,我们需要统计二级部分A'下的所有人数。
分析:
这里用到了一个层级数据库的设计。
CREATE TABLE DEPARTMENT( DEP_ID INT UNSIGNED AUTO_INCREMENT, DEP_NAME VARCHAR(10) NOT NULL, PARENT_ID INT, PRIMARY KEY(DEP_ID))CHARSET=utf8;
插入数据
单个插入INSERT INTO DEPARTMENT (DEP_NAME, PARENT_ID)VALUES('A',NULL);或者批量插入INSERT INTO department VALUES(1,'A',NULL),(2,'B',1),(3,'C',1), (4,'D',2),(5,'E',2),(6,'F',3),(7,'G',3);
dep_id | dep_name | parent_id |
---|---|---|
1 | A | NULL |
2 | B | 1 |
3 | C | 1 |
4 | D | 2 |
5 | E | 2 |
6 | F | 3 |
7 | G | 3 |
显示层级,这里用到了left join,根据这一级的dep_id,寻找它的parent_id,然后通过左连接进行连接,得到当前部门以及他的父部门。
select d1.dep_name as level1, d2.dep_name as level2, d3.dep_name as level3, d4.dep_name as level4from department as d1left join department as d2 on d2.parent_id = d1.dep_id left join department as d3 on d3.parent_id = d2.dep_idleft join department as d4 on d4.parent_id = d3.dep_idwhere d1.dep_name='A';
当存储好了部门的层级信息后,我们就开始设计一个部门人员的表。
创建表,并存储部门人员的信息
create table people( id INT UNSIGNED AUTO_INCREMENT, name varchar(10) not null, dep_id INT UNSIGNED, departname varchar(10), FOREIGN KEY (dep_id) REFERENCES department(dep_id), primary key(id) )charset=utf8;
插入相关的测试数据。
INSERT INTO people VALUES(1,'hgy',4,'D'),(2,'abc',5,'E'),(3,'def',6,'F'), (4,'ddd',2,'B'),(5,'eee',2,'B');
查找二级部门为B的人,并且列出了他的上级部门信息
select p.id, p.name, d1.dep_name as level1, d2.dep_name as level2, d3.dep_name as level3from people as pleft join department as d1 on d1.dep_id = p.dep_idleft join department as d2 on d2.dep_id = d1.parent_idleft join department as d3 on d3.dep_id = d2.parent_idwhere d1.dep_name='B' or d2.dep_name='B' or d3.dep_name='B';
查找二级部门为B的总人数
select count(*) as totalfrom people as pleft join department as d1 on d1.dep_id = p.dep_idleft join department as d2 on d2.dep_id = d1.parent_idleft join department as d3 on d3.dep_id = d2.parent_idwhere d1.dep_name='B' or d2.dep_name='B' or d3.dep_name='B';
id | name | department_id | departname |
---|---|---|---|
1 | hgy | 4 | D |
2 | abc | 5 | E |
3 | def | 6 | F |
4 | ddd | 2 | B |
5 | eee | 2 | B |
应该考虑到有的人在二级部门(可能没有三级部门,没有四级部门),有的人在一级部门,有的人在四级部门(有一级部门,二级部门,三级部门,四级部门)。
第二题:简单的统计
题目描述:现在有一批学生的成绩,求四门学科总分大于200的学生,并且按逆序排列。
CREATE TABLE STUDENT( ID INT UNSIGNED AUTO_INCREMENT, SCORE1 INT NOT NULL, SCORE2 INT NOT NULL, SCORE3 INT NOT NULL, SCORE4 INT NOT NULL, PRIMARY KEY(ID))CHARSET=utf8;
INSERT INTO STUDENT VALUES(1,100,98,10,4),(2,100,9,10,4),(3,70,0,180,40),(4,10,98,1,4),(5,30,7,10,4),(6,8,88,1,43);
根据四门成绩的总分进行排序
SELECT id, score1,score2,score3,score4, score1+score2+score3+score4 as total FROM STUDENTwhere score1+score2+score3+score4 > 200 order by score1+score2+score3+score4 desc;
这里是一个不能直接用别名来排序的知识点,
看完以上关于设计MySQL数据库常常会遇到的问题,很多读者朋友肯定多少有一定的了解,如需获取更多的行业知识信息 ,可以持续关注我们的行业资讯栏目的。
部门
数据
设计
数据库
层级
信息
问题
人员
人数
学生
总分
成绩
知识
笔者
行业
部分
题目
四门
存储
排序
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
服务器荡机
软件开发技术顾问日语
上海律众网络技术有限公司
旧言网络安全组
网络技术公司使命介绍
邮件服务器设置
战地5服务器怎么开始
嘉兴软件开发驻场价格
看视频赚钱软件开发
网络安全工程师挂扣
浏览器播放视频显示服务器异常
软件开发5年工作经验在日本
网络技术信息服务
南职互联网网络技术专业
如何促进国家网络安全技术进步
贵州省网络安全线上知识竞答题目
大学网络安全主体责任
比较高深的网络技术问题
小米输入法怎么清除数据库
广东net软件开发靠谱吗
北京畅信网络技术有限公司
不想做软件开发能做什么
数据库异步和同步的区别
五线谱软件开发
数据库列名变化
浪潮服务器内存条连接不上
湖州企业软件开发工具
10g数据库扩undo
app软件开发哪个学校好
网络安全资知识