九、规范数据库设计

9-1、为什么要设计?

当数据库比较复杂时,我们就需要设计了!

糟糕的数据库设计:

  • 数据冗余,浪费大量存储空间
  • 使用物理外键,大量的增删改操作麻烦,异常
  • 查询效率低下

良好的数据库设计:

  • 节省内存空间

  • 保证数据库的完整性

  • 方便我们对于后台系统的开发

软件开发中,关于数据库的设计:

  • 分析需求:分析业务和需要处理的数据库需求
  • 概要设计:设计关系流程图 E-R图 ( 实体-联系图 : Entity Relationship Diagram )

设计阶段:

  • 收集信息,分析需求,建表
  • 根据需求,落实到表的每个字段
  • 标识表之间的关系(我的理解:中间表,例如 选课表,关注表 等。。)

9-2、三大范式

什么需要数据规范化?

  • 信息重复

    • 两张表的字段重复
  • 更新异常
    • 物理外键(慎用)
  • 插入异常
    • 无法正常显示信息(有些表插入了,有些落下了)
  • 删除异常
    • 文章删除了,他对应的标签还在

三大范式

  1. 第一范式(1NF)

    原子性:每一列的数据,不可再分。

    错误示例:此例的家庭信息

    学号 姓名 性别 家庭信息
    1 一家三口,湖南
  2. 第二范式 (2NF)

    前提:第一范式!

    含义:非主属性必须对主属性 **完全依赖 **。

    我的理解:第二范式需要确保数据库表中的每一列都和主键相关,而不能只与主键的某一部分相关(主要针对 **联合主键 ** 而言)。 通俗来说就是:一张表,只描述一类事情。

    例如:成绩表

    学号 课程号 分数 姓名
    1 1 95

    例如此例:主键为(学号,课程号),而非主属性中,'分数',完全依赖于主键,少了一个都不行,少了学号,你不知道他是哪一门课是95分,少了课程,你不知道哪个学生得分95;反之,姓名,只和学号有关。

    解决:细分为成绩表 (学号,课程号,分数),学生表(学号,姓名)即可。

  3. 第三范式(3NF)

    前提:第二范式!

    含义: 所有的非主键列依赖于主键列

    我的理解:非主键列中,不能有字段a推断出字段b的情况!

    例如:选课表

    学号 姓名 老师 老师职称 上课地点
    1 夏日荷花 教授 A-602

    问题:从选课表学号1的学生里,是可以推断出他选的课的老师,是教授;但是,从老师名字,也能推断出这位授课老师是教授,故存在传递依赖,学号=>老师=>老师职称。

    解决:把老师相关的信息,细分为一个老师表即可。

关于 规范化 和 性能的问题:

关联查询的不得超过三张表

  • 考虑商业化的需求,用户的体验和成本,而数据库的性能最重要(我的理解:太多表查询,会慢)
  • 在考虑性能的前提下,再适当考虑规范性
  • 给某些表添加必要的冗余字段(从多表查询,变成单表查询)
  • 故意增加一些计算列(从大数据量降低为小数据量的查询,我的理解:例如查询今年第xxx天生日的人,那么在设计列的时候,就可以加一列,把生日转化为那一年的第几天,查询的时候直接判断即可,少了每条记录的运算过程)

MySQL(9)— 规范数据库设计的更多相关文章

  1. MySQL 约束和数据库设计

    1.MySQL 约束: 1.约束的概念: 约束是一种限制,它通过对表的行或列的数据做出限制,来确保表的数据的完整性.唯一性. MySQL中,常用的几种约束: 约束类型: 非空 主键 唯一 外键 默认值 ...

  2. 使用MySQL Workbench进行数据库设计——MySQL Workbench用法总结

    转载请注明出处:http://blog.csdn.net/dongdong9223/article/details/48318877 本文出自[我是干勾鱼的博客] 1 简单介绍 MySQL Workb ...

  3. mysql学习笔记--数据库设计

    一.数据库基本概念 1. 关系:两个表的公共字段 2. 行:也称记录,也称实体 3. 列:也称字段,也称属性 4. 数据冗余:相同的数据存在不同的地方. 注意:冗余只能减少,不能杜绝. 减少冗余,只能 ...

  4. 使用MySQL Workbench进行数据库设计——MySQL Workbench使用方法总结

    本文出自[我是干勾鱼的博客] 转自:https://blog.csdn.net/dongdong9223/article/details/48318877 1 创建Model(设计ER图) 使用wor ...

  5. 优化MySchool数据库设计之【巅峰对决】

    优化MySchool数据库设计 之独孤九剑 船舶停靠在港湾是很安全的,但这不是造船的目的 By:北大青鸟五道口原玉明老师 1.学习方法: 01.找一本好书 初始阶段不适合,可以放到第二个阶段,看到知识 ...

  6. 数据库设计==>>MySchool

    1.数据库设计的步骤 第一步:需求分析(收集信息) 第二步:绘制 E-R 图 (标示实体 ,找到实体的属性 第三步:将 E-R 图转换成数据库模型图 第四步:将数据库模型图转换成数据表 2.如何绘制 ...

  7. MySQL数据库设计与开发规范

    目录 1. 规范背景与目的 2. 设计规范 2.1. 数据库设计 2.1.1. 库名 2.1.2. 表结构 2.1.3. 列数据类型优化 2.1.4. 索引设计 2.1.5. 分库分表.分区表 2.1 ...

  8. 互联网产品mysql数据库设计总结

    mysql数据库性能不比oracle数据库,所以设计上,和oracle有一些不同.下面总结一些互联网产品的数据库设计. 1.主键 主键可以使用bigint(20) unsigned也可以使用varch ...

  9. mysql学习5:数据库设计

    mysql学习5:数据库设计 本文转载:https://blog.51cto.com/9291927/2087925:原创为天山老妖S 一.数据库设计简介 按照规范设计,将数据库的设计过程分为六个阶段 ...

随机推荐

  1. 【Linux常见命令】route命令

    route - show / manipulate the IP routing table route命令用于显示和操作IP路由表. route命令用来显示并设置Linux内核中的网络路由表,rou ...

  2. 1月份中国综合PMI指数为53.2% 企业生产经营活动总体增速加快

    中新社北京1月31日电 (记者 王恩博)中国国家统计局31日发布数据显示,2019年1月份,中国综合PMI产出指数为53.2%,比上月上升0.6个百分点,表明中国企业生产经营活动总体增速加快. 其中, ...

  3. 接口自动化测试平台-接入持续集成jenkins

    开篇提到,自动化测试最终期望还是能接入持续集成系统jenkins,下面记录下Go接口自动化测试平台是如何设计接入jenkins的. 回到Go接口自动化测试平台,在web系统中触发测试任务执行的入口为: ...

  4. certutil 导入 CA 证书

    2019独角兽企业重金招聘Python工程师标准>>> 在linux下使用GoAgent客户端的时候,需要导入CA.cer证书. 安装证书管理工具 apt-get install l ...

  5. Android 项目 Android 学习手册(一)

    前言: 当每次查询android 知识的时候,内心是凌乱的,总觉得要是有一个工具多好, 尤其在手机端如何可以查询的话,会非常完美,能大大减少选择查询的时间, 之前见了很多java 学习手册,把一些重要 ...

  6. 谁需要GUI?快看Linux 终端生存之道

    完全在 Linux 终端中生存并不容易,但这绝对是可行的. 处理常见功能的最佳 Linux shell 应用 你是否曾想像过完完全全在 Linux 终端里生存?没有图形桌面,没有现代的 GUI 软件, ...

  7. Java本地的项目,怎么可以让别人通过外网访问-内网穿透

    2019独角兽企业重金招聘Python工程师标准>>> 一.点击链接 https://natapp.cn/ 注册个免费的账户 NATAPP官网 二.登陆进去以后查看authtoken ...

  8. log4net进阶手札(二):基本用法

    本节将主要在WebSite中,对保存日志在文本文件的基本用法来进行介绍,并结合WebForm的初始化方式区别进行说明,解决方案如下图所示: 一.WebSite应用第1步:配置Web.Config文件, ...

  9. C语言编程入门题目--No.12

    题目:判断101-200之间有多少个素数,并输出所有素数. 1.程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除, 则表明此数不是素数,反之是素数. 2.程序源代码: # ...

  10. P2620 虫洞

    题目背景 applepi 想进行宇宙旅行.当然,applepi 知道这是有可能的,因为applepi 的特殊能力能使他观测到宇宙中的虫洞.所谓虫洞就是一个在三维之外的维度打开的快捷通道,通过虫洞能够从 ...