【宋红康 MySQL数据库 】【高级篇】【14】数据库的设计规范
持续学习&持续更新中…
学习态度:守破离
【宋红康 MySQL数据库 】【高级篇】【14】数据库的设计规范
- 为什么需要数据库设计
- 范式
- 范式简介
- 范式都包括哪些
- 键和相关属性的概念
- 第一范式
- 第二范式
- 第三范式
- 小结
- 反范式化
- 概述
- 应用举例
- 反范式的新问题
- 反范式的适用场景
- 巴斯范式
- 第四范式
- 第五范式、域键范式
- 实战案例
- 迭代1次:考虑1NF
- 迭代2次:考虑2NF
- 迭代3次:考虑3NF
- 反范式化:业务优先的原则
- ER模型
- ER模型包括哪些要素
- 关系的类型
- 建模分析
- ER模型的细化
- ER模型转化为数据表
- 数据表的设计原则
- 数据库对象编写建议
- 关于库
- 关于表、列
- 关于索引
- SQL编写
- 参考
为什么需要数据库设计
范式
范式简介
范式都包括哪些
键和相关属性的概念
第一范式
第二范式
第三范式
小结
反范式化
概述
应用举例
CREATE DATABASE atguigudb3;USE atguigudb3;#学生表
CREATE TABLE student(
stu_id INT PRIMARY KEY AUTO_INCREMENT,
stu_name VARCHAR(25),
create_time DATETIME
);#课程评论表
CREATE TABLE class_comment(
comment_id INT PRIMARY KEY AUTO_INCREMENT,
class_id INT,
comment_text VARCHAR(35),
comment_time DATETIME,
stu_id INT
);###创建向学生表中添加数据的存储过程
DELIMITER //CREATE PROCEDURE batch_insert_student(IN START INT(10), IN max_num INT(10))
BEGIN
DECLARE i INT DEFAULT 0;
DECLARE date_start DATETIME DEFAULT ('2017-01-01 00:00:00');
DECLARE date_temp DATETIME;
SET date_temp = date_start;
SET autocommit=0;
REPEAT
SET i=i+1;
SET date_temp = DATE_ADD(date_temp, INTERVAL RAND()*60 SECOND);
INSERT INTO student(stu_id, stu_name, create_time)
VALUES((START+i), CONCAT('stu_',i), date_temp);
UNTIL i = max_num
END REPEAT;
COMMIT;
END //DELIMITER ;#调用存储过程,学生id从10001开始,添加1000000数据
CALL batch_insert_student(10000,1000000);####创建向课程评论表中添加数据的存储过程
DELIMITER //CREATE PROCEDURE batch_insert_class_comments(IN START INT(10), IN max_num INT(10))
BEGIN
DECLARE i INT DEFAULT 0;
DECLARE date_start DATETIME DEFAULT ('2018-01-01 00:00:00');
DECLARE date_temp DATETIME;
DECLARE comment_text VARCHAR(25);
DECLARE stu_id INT;
SET date_temp = date_start;
SET autocommit=0;
REPEAT
SET i=i+1;
SET date_temp = DATE_ADD(date_temp, INTERVAL RAND()*60 SECOND);
SET comment_text = SUBSTR(MD5(RAND()),1, 20);
SET stu_id = FLOOR(RAND()*1000000);
INSERT INTO class_comment(comment_id, class_id, comment_text, comment_time, stu_id)
VALUES((START+i), 10001, comment_text, date_temp, stu_id);
UNTIL i = max_num
END REPEAT;
COMMIT;
END //DELIMITER ;#添加数据的存储过程的调用,一共1000000条记录
CALL batch_insert_class_comments(10000,1000000);#########
SELECT COUNT(*) FROM student;SELECT COUNT(*) FROM class_comment;###需求######
SELECT p.comment_text, p.comment_time, stu.stu_name
FROM class_comment AS p LEFT JOIN student AS stu
ON p.stu_id = stu.stu_id
WHERE p.class_id = 10001
ORDER BY p.comment_id DESC
LIMIT 10000;#####进行反范式化的设计######
#表的复制
CREATE TABLE class_comment1
AS
SELECT * FROM class_comment;#添加主键,保证class_comment1 与class_comment的结构相同
ALTER TABLE class_comment1
ADD PRIMARY KEY (comment_id);SHOW INDEX FROM class_comment1;#向课程评论表中增加stu_name字段
ALTER TABLE class_comment1
ADD stu_name VARCHAR(25);#给新添加的字段赋值
UPDATE class_comment1 c
SET stu_name = (
SELECT stu_name
FROM student s
WHERE c.stu_id = s.stu_id
);#查询同样的需求
SELECT comment_text, comment_time, stu_name
FROM class_comment1
WHERE class_id = 10001
ORDER BY comment_id DESC
LIMIT 10000;
反范式的新问题
反范式的适用场景
巴斯范式
第四范式
第五范式、域键范式
实战案例
迭代1次:考虑1NF
迭代2次:考虑2NF
迭代3次:考虑3NF
我们的进货单头表,还有数据冗余的可能。因为“suppliername”依赖“supplierid”,那么,这个时候,就可以按照第三范式的原则进行拆分了。我们就进一步拆分下进货单头表,把它解析成供货商表和进货单头表。
反范式化:业务优先的原则
所以最终就被拆分成了下面四张表:
ER模型
ER模型包括哪些要素
关系的类型
建模分析
ER模型的细化
ER模型转化为数据表
值得注意的是:
还有:
数据表的设计原则
数据库对象编写建议
关于库
关于表、列
关于索引
SQL编写
参考
尚硅谷宋红康: MySQL数据库(入门到高级,菜鸟到大牛).
本文完,感谢您的关注支持!
【宋红康 MySQL数据库 】【高级篇】【14】数据库的设计规范相关推荐
- 【宋红康 MySQL数据库 】【高级篇】【17】MySQL事务日志:redo、undo
持续学习&持续更新中- 学习态度:守破离 [宋红康 MySQL数据库 ][高级篇][17]MySQL事务日志 概述 redo日志 为什么需要redo日志 redo日志的好处.特点 redo的组 ...
- 【宋红康 MySQL数据库 】【高级篇】【07】MySQL的存储引擎
持续学习&持续更新中- 学习态度:守破离 [宋红康 MySQL数据库 ][高级篇][07]MySQL的存储引擎 存储引擎 查看存储引擎 设置系统默认的存储引擎 设置表的存储引擎 引擎介绍 In ...
- 【宋红康 MySQL数据库 】【高级篇】【06】MySQL的逻辑架构
持续学习&持续更新中- 学习态度:守破离 [宋红康 MySQL数据库 ][高级篇][06]MySQL的逻辑架构 逻辑架构剖析 服务器处理客户端请求 Connectors 第一层 连接层 第二层 ...
- 【宋红康 MySQL数据库 】【高级篇】【12】性能分析工具的使用
持续学习&持续更新中- 学习态度:守破离 [宋红康 MySQL数据库 ][高级篇][12]性能分析工具的使用 数据库服务器的优化步骤 查看系统性能参数 统计SQL的查询成本:last_quer ...
- 【宋红康 MySQL数据库 】【高级篇】【03】MySQL的数据目录
持续学习&持续更新中- 学习态度:守破离 [宋红康 MySQL数据库 ][高级篇][03]MySQL的数据目录 MySQL8的主要目录 数据文件的存放目录 命令存放目录 配置文件目录 数据库和 ...
- 【宋红康 MySQL数据库 】【高级篇】【16】事务基础知识
持续学习&持续更新中- 学习态度:守破离 [宋红康 MySQL数据库 ][高级篇][16]事务基础知识 数据库事务概述 存储引擎支持情况 基本概念 事务的ACID特性 事务的状态 如何使用事务 ...
- 【宋红康 MySQL数据库 】【高级篇】【15】数据库其它调优策略
持续学习&持续更新中- 学习态度:守破离 [宋红康 MySQL数据库 ][高级篇][15]数据库其它调优策略 数据库调优的措施 调优的目标 如何定位调优问题 调优的维度和步骤 优化MySQL服 ...
- 【宋红康 MySQL数据库 】【高级篇】【02】MySQL字符集、比较规则、大小写规范、sql_mode
持续学习&持续更新中- 学习态度:守破离 [宋红康 MySQL数据库 ][高级篇][02]MySQL字符集.比较规则.大小写规范.sql_mode 默认字符集 MySQL8 MySQL5 修改 ...
- 【宋红康 MySQL数据库】【14】视图
持续学习&持续更新中- 学习态度:守破离 [宋红康 MySQL数据库][14]视图 视图概述 为什么使用视图 视图的理解 创建视图 如何创建视图 创建单表视图 创建多表联合视图 利用视图对数据 ...
- 尚硅谷-宋红康-MySQL高级性能篇
尚硅谷-宋红康-MySQL高级性能篇 第1章 Linux下MySQL的安装与使用 1. 安装前说明 1.1 Linux系统及工具准备 二级目录 三级目录 第1章 Linux下MySQL的安装与使用 1 ...
最新文章
- textarea 中获取用户的空格和回车
- centos7 iptables 端口转发 保存_iptables 防火墙
- JAVA瑞波币_关于Shader着色器的使用(这个是GL通用的,用什么开发设置都一样) | Java与Ripple怎么玩?...
- Python操作SQLServer示例
- python去除\ufeff、\xa0、\u3000
- CAM350 使用,典型做钢网
- 家长进课堂 计算机ppt,小学生家长进课堂ppt
- 文献阅读-深度学习跨模态图文检索研究综述
- 禅道管理员忘记密码找回密码
- 视频教程-HTML+CSS+JavaScript基础-HTML5/CSS
- 我为什么鼓励工程师写博客
- 如果你突然打了个喷嚏,那
- Qt5.12案例 翻金币小游戏
- 5G LAN — 技术实现原理
- Linux下的C语言——第九节 指针
- EMV技术学习和研究(七)持卡人验证
- 程序员面试时应该知道的福利待遇
- 阿德莱德大学计算机博士项目,澳大利亚阿德莱德大学计算学院招收博士生,全额奖学金,学费全免...
- 【CSS】CSS的三大特性
- vs2003一查找就卡死了
热门文章
- java毕业设计宿舍管理系统mybatis+源码+调试部署+系统+数据库+lw
- Radasm 配置goasm
- Js封装组件 + Slots插槽
- 直流电机PID控制源码c语言,51单片机PID+PWM直流电机转速闭环控制源码(12864液晶显示)...
- 一文读懂电子材料行业最新发展趋势
- 【记录】数控程序的指令代码---标准G代码与标准M代码
- 12000字解读BabyCare:母婴用品品牌的终局是走向全品类吗?
- python图像风格迁移教程_【人工智能】python图像风格迁移,来欣赏梵高风格的石原里美吧!...
- c语言erf函数,c/c++开发分享精确计算缩放互补误差函数,erfcx()
- 数据分析——RFM模型