设计MySQL数据库常常会遇到的问题
发表于:2025-11-07 作者:千家信息网编辑
千家信息网最后更新 2025年11月07日,本文主要给大家介绍设计MySQL数据库常常会遇到的问题,文章内容都是笔者用心摘选和编辑的,具有一定的针对性,对大家的参考意义还是比较大的,下面跟笔者一起了解下设计MySQL数据库常常会遇到的问题吧。第
千家信息网最后更新 2025年11月07日设计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安全错误
数据库的锁怎样保障安全
网络安全域
秦皇岛网络技术怎么样
ux设计属于软件开发吗
中国台湾手机软件开发平台
舜齐软件开发有限公司招聘
cs go服务器探测
数据库unique放在哪里
成都智能汽车气候控制软件开发
天津大学网络安全专业
便宜的云数据库 mysql
基于ios的软件开发
中国电信招聘网络安全
总工会网络安全工程师招生
生肖数据库数据
银行软件开发陈俊
数据仓库和数据库哪个快
武装突袭3服务器进不去了
我的世界怎么在服务器里私聊玩
2008远程服务器管理进程
电脑怎么下载花雨庭服务器
华为服务器售后电话400
数据库技术基础知识框架图
网络安全域
win应用软件开发
qq音乐数据库
企业软件开发应用实施经验
服务器BIOS启动流程
dz_数据库
河南网络技术分类五星服务
怎么看数据库中的数据类型