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.一对一关联表 --------一对一关联关系,可以直接用一张表来存储.但是如果表中的字段数过多或部分字段不常用,可以考虑分表,两张表共享同一主键.

mysql优化-数据库设计基本原则的更多相关文章

  1. (1.13)mysql优化数据库对象

    (1.13)mysql优化数据库对象 1.mysql优化数据库对象 [1.1]数据库对象类型优化 select * from test1 procedure analyse(); ,); --不要为那 ...

  2. mysql优化-数据库优化、SQL优化

    我有一张表w1000,里面有1000万条数据,这张表结构如下:CREATE TABLE `w1000` ( `id` varchar(36) NOT NULL, `name` varchar(10) ...

  3. MySQL学习-数据库设计以及sql的进阶语句

    1.数据库设计 关系型数据库建议在E-R模型的基础上,我们需要根据产品经理的设计策划,抽取出来模型与关系,制定出表结构,这是项目开始的第一步 在开发中有很多设计数据库的软件,常用的如power des ...

  4. Mysql优化-字段设计

    摘抄并用于自查笔记 1. 对精度有要求decimal float 类型用于表示单精度浮点数值,而double类型用于表示双精度浮点数值,float 和 double 都是浮点型,而 decimal 是 ...

  5. 19.Mysql优化数据库对象

    19.优化数据库对象19.1 优化表的数据类型应用设计时需要考虑字段的类型和长度,并留有一定长度冗余.procedure analyse()函数可以对表中列的数据类型提出优化建议.procedure ...

  6. Mysql之数据库设计

    一.三大范式 1.第一范式:消除一个字段包含多个数据库值,消除一个记录包含重复的组(单独的一列包含多个项目),即可满足1NF. 2.第二范式:消除部分依赖性即可转化为2NF.部分依赖性表示一个记录中包 ...

  7. MySQL 优化、设计规则浅谈

    当数据量大,数据库相应慢时都会针对数据库进行优化.这时都是要针对具体情况,具体业务需求进行优化的. 但是有些步骤和规则应该适合各种情况的.这里综合网上找的资料简单分析一下. 第一优化你的sql和索引: ...

  8. python——mysql京东数据库设计案例(源码)

    # 显示界面信息# 循环界面信息# 根据用户输入数据来做相应的选择from pymysql import connect def jingdong_info(): '''#显示界面信息''' prin ...

  9. MySQL 优化数据库对象

    一.考虑是用 procedure analyse() 函数对当前应用的表进行分析.字段类型是否可优化. 二.通过拆分提高表的访问效率. (A) 针对MyISAM表,有两种拆分方法: 垂直拆分:主码和某 ...

随机推荐

  1. 【BZOJ3223】【luoguP3391】文艺平衡树

    description 您需要写一种数据结构(可参考题目标题),来维护一个有序数列,其中需要提供以下操作:翻转一个区间,例如原有序序列是5 4 3 2 1,翻转区间是[2,4]的话,结果是5 2 3 ...

  2. HashMap数据结构

    2.1 HashMap 2.1.1 HashMap介绍 先看看HashMap类头部的源码: public class HashMap<K,V> extends AbstractMap< ...

  3. 带权二分图——KM算法hdu2255 poj3565

    进阶指南的板子好像有点问题..交到hdu上会T 需要了解的一些概念: 交错树,顶标,修改量 #include<iostream> #include<stdio.h> #incl ...

  4. zabbix自动发现主机(转)

    zabbix自动发现主机 2018年06月15日 18:02:52 loyal-Wang 阅读数:817更多 个人分类: zabbix   版权声明:本文为博主原创文章,转载请注明出处. https: ...

  5. iframe跨域数据传递

    项目中需要和其他单位合作开发,方案采用iframe嵌入页面,开发过程中设计到了跨域数据的传递,初步方案决定使用html5 API postMessage进行iframe跨域数据传递: 域名A下的页面 ...

  6. Lucene 的 Field 域和索引维护

    一.Field 域 1.Field 属性 Field 是文档中的域,包括 Field 名和 Field 值两部分,一个文档可以包括多个 Field,Document 只是 Field 的一个承载体,F ...

  7. 实用的 JavaScript 调试小技巧

    ‘debugger;’ 除了console.log,debugger就是另一个我很喜欢的快速调试的工具,将debugger加入代码之后,Chrome会自动在插入它的地方停止,很像C或者Java里面打断 ...

  8. python 中动态类的创建

    参考 collections.namedtuple 的实现 链接: https://www.cnblogs.com/BeautifulWorld/p/11647198.html

  9. C# 检测真实的文件类型函数

    private bool IsAllowedExtension(HttpPostedFile hifile) { bool ret = false; System.IO.FileStream fs = ...

  10. 数据库连接客户端 dbeaver 程序包以及使用说明

    dbeaver 是一个基于 Eclipse 的数据库客户端,支持几乎所有常见的数据库.分为商业版和社区版,社区版可以免费使用. 官网和 GitHub https://dbeaver.io/ https ...