mysql优化-数据库设计基本原则

一、数据库设计三范式

第一范式:字段具有原子性
原子性是指数据库的所有字段都不可被再次划分,如下表就不满足原子性,起点与终点 字段就可被拆分为起点与终点两个字段。

id 起点-终点
1 北京-上海
2 北京-广州

第二范式:消除对主键的部分依赖
依赖是指在数据库表中,通过字段A就可以确定字段B,这就叫B对A依赖。
而部分依赖就是指当数据库表中主键为复合主键(A,C),而B仅仅对A依赖,这种情况称作部分依赖。
正确的方法是创建一个与业务逻辑无关的 id 主键,其他字段就对主键只存在唯一依赖,即满足第二范式的要求。

第三范式:消除对主键的传递依赖
传递依赖: 若B字段依赖A字段,C字段依赖B字段,则C字段对A字段构成传递依赖。

id 列车号 座次 起点 终点
1 D705 11车04号 北京 上海
2 K507 15车77号 北京 重庆

如上图所示列车的起点和终点都对主键id产生部分依赖(起点,终点-->列车号-->id)
解决方法:分表,将传递依赖部分单独建表.

列车号 起点 终点
D705 北京 上海
K507 北京 重庆
(列子不恰当别在意)

此处应注意的是三范式中,满足第二范式的一定要满足第一范式,满足第三范式的一定要满足第一和第二范式。


二、数据库字段设计原则

1.尽量使用整数来表示字符串
使用整型数表示字符串有两大优势:
-->1.整型数所占存储空间一般小于字符串
-->2.整型数的运算速度快

2.使用定点数表示浮点数
浮点数在计算机中保存和运算易失真,对于银行金额一类精度要求高的数据,我们可以选用定点数decimal存储,定义decimal(P, D)可以创建一个整数位最多P位,小数位最多D位的定点数.

3.使用尽量小的数据类型

4.尽量避免使用非空字段

1. null字段无法参与除nullis not null以外的运算
2. null的存储需要额外的空间

5.字段注释完整,字段名具有逻辑含义

6.单表字段不宜过多

7.使用预留字段

三、应用关联表

mysql两表之间可以存在三种特殊关系一对多多对多一对一,对应3对同名关联表。
1. 一对多关联表 --------通常关联外键设置在的一方
2. 多对多关联表 --------通过创建第中间表,存储两张表主键之间的对应关系.中间表与两张实体表分别形成两个一对多的关系.
3.一对一关联表 --------一对一关联关系,可以直接用一张表来存储.但是如果表中的字段数过多或部分字段不常用,可以考虑分表,两张表共享同一主键.

最新文章

  1. Linux开机启动程序详解
  2. jquery 源码分析学习地址
  3. [BZOJ 1047] [HAOI2007] 理想的正方形 【单调队列】
  4. c# 大数据量比较时-方案
  5. 固定表格行列(expression)
  6. QTableView另类打印解决方案(复用render函数去解决print问题)
  7. webapi 发布接口报405错误(angularjs2.0)
  8. HTTP协议介绍
  9. Git 深入浅出
  10. 201521123045 《Java程序设计》第2周学习总结
  11. vue mint-ui 三级地址联动
  12. JTA 分布式事务
  13. 获取Xcode工程所有的类名
  14. git 入门教程之回到过去
  15. 天天爱跑步 [NOIP2016]
  16. codeforces#505--A Doggo Recoloring
  17. 20159212杨翔实验一(熟悉Java开发环境)实验报告
  18. 专业软件 —— Adobe Audition
  19. jenkins配置maven
  20. Codeforces Round #298 (Div. 2)A B C D

热门文章

  1. 莫烦pytorch学习笔记(一)——torch or numpy
  2. Spring boot配置Dubbo三种方式
  3. linux 最新化安装后安卓 KDE 桌面
  4. PAT甲级——A1091 Acute Stroke【30】
  5. 提前关闭Scrapy爬虫的设置
  6. reac-native + typescript 的环境搭建
  7. 如何做系列(2)- XML转义字符
  8. fwt优化+树形DP HDU 5909
  9. Hbase实验:java创建和删除table
  10. odoo:Actions