MySQL(9)— 规范数据库设计
九、规范数据库设计
9-1、为什么要设计?
当数据库比较复杂时,我们就需要设计了!
糟糕的数据库设计:
- 数据冗余,浪费大量存储空间
- 使用物理外键,大量的增删改操作麻烦,异常
- 查询效率低下
良好的数据库设计:
- 节省内存空间 
- 保证数据库的完整性 
- 方便我们对于后台系统的开发 
软件开发中,关于数据库的设计:
- 分析需求:分析业务和需要处理的数据库需求
- 概要设计:设计关系流程图 E-R图 ( 实体-联系图 : Entity Relationship Diagram )
设计阶段:
- 收集信息,分析需求,建表
- 根据需求,落实到表的每个字段
- 标识表之间的关系(我的理解:中间表,例如 选课表,关注表 等。。)
9-2、三大范式
什么需要数据规范化?
- 信息重复
- 两张表的字段重复
 
- 更新异常
- 物理外键(慎用)
 
- 插入异常
- 无法正常显示信息(有些表插入了,有些落下了)
 
- 删除异常
- 文章删除了,他对应的标签还在
 
三大范式
- 第一范式(1NF) - 原子性:每一列的数据,不可再分。 - 错误示例:此例的家庭信息 - 学号 - 姓名 - 性别 - 家庭信息 - 1 - 风 - 男 - 一家三口,湖南 
- 第二范式 (2NF) - 前提:第一范式! - 含义:非主属性必须对主属性 **完全依赖 **。 - 我的理解:第二范式需要确保数据库表中的每一列都和主键相关,而不能只与主键的某一部分相关(主要针对 **联合主键 ** 而言)。 通俗来说就是:一张表,只描述一类事情。 - 例如:成绩表 - 学号 - 课程号 - 分数 - 姓名 - 1 - 1 - 95 - 风 - 例如此例:主键为(学号,课程号),而非主属性中,'分数',完全依赖于主键,少了一个都不行,少了学号,你不知道他是哪一门课是95分,少了课程,你不知道哪个学生得分95;反之,姓名,只和学号有关。 - 解决:细分为成绩表 (学号,课程号,分数),学生表(学号,姓名)即可。 
- 第三范式(3NF) - 前提:第二范式! - 含义: 所有的非主键列依赖于主键列 - 我的理解:非主键列中,不能有字段a推断出字段b的情况! - 例如:选课表 - 学号 - 姓名 - 老师 - 老师职称 - 上课地点 - 1 - 风 - 夏日荷花 - 教授 - A-602 - 问题:从选课表学号1的学生里,是可以推断出他选的课的老师,是教授;但是,从老师名字,也能推断出这位授课老师是教授,故存在传递依赖,学号=>老师=>老师职称。 - 解决:把老师相关的信息,细分为一个老师表即可。 
关于 规范化 和 性能的问题:
关联查询的不得超过三张表
- 考虑商业化的需求,用户的体验和成本,而数据库的性能最重要(我的理解:太多表查询,会慢)
- 在考虑性能的前提下,再适当考虑规范性
- 给某些表添加必要的冗余字段(从多表查询,变成单表查询)
- 故意增加一些计算列(从大数据量降低为小数据量的查询,我的理解:例如查询今年第xxx天生日的人,那么在设计列的时候,就可以加一列,把生日转化为那一年的第几天,查询的时候直接判断即可,少了每条记录的运算过程)
MySQL(9)— 规范数据库设计的更多相关文章
- MySQL 约束和数据库设计
		1.MySQL 约束: 1.约束的概念: 约束是一种限制,它通过对表的行或列的数据做出限制,来确保表的数据的完整性.唯一性. MySQL中,常用的几种约束: 约束类型: 非空 主键 唯一 外键 默认值 ... 
- 使用MySQL Workbench进行数据库设计——MySQL Workbench用法总结
		转载请注明出处:http://blog.csdn.net/dongdong9223/article/details/48318877 本文出自[我是干勾鱼的博客] 1 简单介绍 MySQL Workb ... 
- mysql学习笔记--数据库设计
		一.数据库基本概念 1. 关系:两个表的公共字段 2. 行:也称记录,也称实体 3. 列:也称字段,也称属性 4. 数据冗余:相同的数据存在不同的地方. 注意:冗余只能减少,不能杜绝. 减少冗余,只能 ... 
- 使用MySQL Workbench进行数据库设计——MySQL Workbench使用方法总结
		本文出自[我是干勾鱼的博客] 转自:https://blog.csdn.net/dongdong9223/article/details/48318877 1 创建Model(设计ER图) 使用wor ... 
- 优化MySchool数据库设计之【巅峰对决】
		优化MySchool数据库设计 之独孤九剑 船舶停靠在港湾是很安全的,但这不是造船的目的 By:北大青鸟五道口原玉明老师 1.学习方法: 01.找一本好书 初始阶段不适合,可以放到第二个阶段,看到知识 ... 
- 数据库设计==>>MySchool
		1.数据库设计的步骤 第一步:需求分析(收集信息) 第二步:绘制 E-R 图 (标示实体 ,找到实体的属性 第三步:将 E-R 图转换成数据库模型图 第四步:将数据库模型图转换成数据表 2.如何绘制 ... 
- MySQL数据库设计与开发规范
		目录 1. 规范背景与目的 2. 设计规范 2.1. 数据库设计 2.1.1. 库名 2.1.2. 表结构 2.1.3. 列数据类型优化 2.1.4. 索引设计 2.1.5. 分库分表.分区表 2.1 ... 
- 互联网产品mysql数据库设计总结
		mysql数据库性能不比oracle数据库,所以设计上,和oracle有一些不同.下面总结一些互联网产品的数据库设计. 1.主键 主键可以使用bigint(20) unsigned也可以使用varch ... 
- mysql学习5:数据库设计
		mysql学习5:数据库设计 本文转载:https://blog.51cto.com/9291927/2087925:原创为天山老妖S 一.数据库设计简介 按照规范设计,将数据库的设计过程分为六个阶段 ... 
随机推荐
- Spring Boot devtool的使用
			文章目录 添加Spring Boot devtool依赖 默认属性 自动重启 Live Reload 全局配置 Spring Boot devtool的使用 Spring Boot为我们提供了一个便捷 ... 
- SQL之常用函数
			表8-2 中的SOUNDEX 需要做进一步的解释.SOUNDEX 是一个将任何文本串转换为描述其语音表示的字母数字模式的算法.SOUNDEX 考虑了类似的发音字符和音节,使得能对字符串进行发音比较而不 ... 
- js之用IndexOf返回指定字符串的次数
			代码 var Str = "strs,strs,stras,str,strs,strs"; var subStr ="strs" ; var count = 0 ... 
- 更新mac系统到10.15后,virtual box虚拟机无法打开
			更新mac系统到10.15后,virtual box虚拟机无法打开: 尝试解决方案1:下载最新版的virtual box重新安装后,启动成功. 虽然很乌龙,但是下次再也不随便升级系统了,太坑爹了 
- POJ1651:Multiplication Puzzle(区间dp)
			Multiplication Puzzle Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 9419 Accepted: 5850 ... 
- qemu-img压缩磁盘操作
			2019独角兽企业重金招聘Python工程师标准>>> qemu-img convert -c -f qcow2 -O qcow2 /data/data1.disk /opt/dat ... 
- 腾讯技术工程 | 基于Prophet的时间序列预测
			预测未来永远是一件让人兴奋而又神奇的事.为此,人们研究了许多时间序列预测模型.然而,大部分的时间序列模型都因为预测的问题过于复杂而效果不理想.这是因为时间序列预测不光需要大量的统计知识,更重要的是它需 ... 
- caffe学习笔记(1)安装 - Ubuntu 15.04
			官方安装手册 备注:使用系统 - Ubuntu 15.04 64位操作系统(若系统位于虚拟机上,在安装CUDA后,Ubuntu将无法进入图形界面) /************************* ... 
- Codeforce 140C (贪心+优先队列)补题
			C. New Year Snowmen time limit per test2 seconds memory limit per test256 megabytes inputstandard in ... 
- Nginx+Uwsgi+Django  项目部署到服务器。
			首先先说一下思路: 1.本地django项目打包 主要用到的是 python自带的distutils.core 下的 setup,具体代码在下面,主要讲的两个问题是package主要打包为和目录同级的 ... 
