mysql优化-数据库设计基本原则
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字段无法参与除null
与is not null
以外的运算
2. null的存储需要额外的空间
5.字段注释完整,字段名具有逻辑含义
6.单表字段不宜过多
7.使用预留字段
三、应用关联表
mysql两表之间可以存在三种特殊关系一对多
,多对多
,一对一
,对应3对同名关联表。
1. 一对多关联表 --------通常关联外键设置在多的一方
2. 多对多关联表 --------通过创建第中间表,存储两张表主键之间的对应关系.中间表与两张实体表分别形成两个一对多的关系.
3.一对一关联表 --------一对一关联关系,可以直接用一张表来存储.但是如果表中的字段数过多或部分字段不常用,可以考虑分表,两张表共享同一主键.
mysql优化-数据库设计基本原则的更多相关文章
- (1.13)mysql优化数据库对象
(1.13)mysql优化数据库对象 1.mysql优化数据库对象 [1.1]数据库对象类型优化 select * from test1 procedure analyse(); ,); --不要为那 ...
- mysql优化-数据库优化、SQL优化
我有一张表w1000,里面有1000万条数据,这张表结构如下:CREATE TABLE `w1000` ( `id` varchar(36) NOT NULL, `name` varchar(10) ...
- MySQL学习-数据库设计以及sql的进阶语句
1.数据库设计 关系型数据库建议在E-R模型的基础上,我们需要根据产品经理的设计策划,抽取出来模型与关系,制定出表结构,这是项目开始的第一步 在开发中有很多设计数据库的软件,常用的如power des ...
- Mysql优化-字段设计
摘抄并用于自查笔记 1. 对精度有要求decimal float 类型用于表示单精度浮点数值,而double类型用于表示双精度浮点数值,float 和 double 都是浮点型,而 decimal 是 ...
- 19.Mysql优化数据库对象
19.优化数据库对象19.1 优化表的数据类型应用设计时需要考虑字段的类型和长度,并留有一定长度冗余.procedure analyse()函数可以对表中列的数据类型提出优化建议.procedure ...
- Mysql之数据库设计
一.三大范式 1.第一范式:消除一个字段包含多个数据库值,消除一个记录包含重复的组(单独的一列包含多个项目),即可满足1NF. 2.第二范式:消除部分依赖性即可转化为2NF.部分依赖性表示一个记录中包 ...
- MySQL 优化、设计规则浅谈
当数据量大,数据库相应慢时都会针对数据库进行优化.这时都是要针对具体情况,具体业务需求进行优化的. 但是有些步骤和规则应该适合各种情况的.这里综合网上找的资料简单分析一下. 第一优化你的sql和索引: ...
- python——mysql京东数据库设计案例(源码)
# 显示界面信息# 循环界面信息# 根据用户输入数据来做相应的选择from pymysql import connect def jingdong_info(): '''#显示界面信息''' prin ...
- MySQL 优化数据库对象
一.考虑是用 procedure analyse() 函数对当前应用的表进行分析.字段类型是否可优化. 二.通过拆分提高表的访问效率. (A) 针对MyISAM表,有两种拆分方法: 垂直拆分:主码和某 ...
随机推荐
- JavaScript设置body高度为浏览器高度的方法
document.getElementsByTagName('body')[0].style.height = window.innerHeight+'px';
- pytorch基础(1)
基本数据类型和tensor import torch import numpy as np #array 和 tensor的转换 array = np.array([,]) tensorArray = ...
- Joomla - T3模板(非常好用的4屏响应式模板)
一.下载 T3 模板 下载地址(需要注册登录才能下载):https://www.joomlart.com/member/downloads/joomlart/t3-framework/t3-blank ...
- JAVA基础_可变参数
自JAVA1.5以来,在JAVA中出现了可变参数一说,其针对的情况是对多个不确定的相同类型的元素进行同一类操作的情形. 可变参数有点类似与重载的概念,但是其中的可变参数是被隐式的转换成数组来进行处理的 ...
- 自建免费的代理ip池
00x01--- 前言 因为爬虫被禁ip这样的反扒真的很凶,但自从建了一个代理ip池以后,反反扒就可以跟的上节奏.当然你也可以上网上各种代理平台自己付费.这些平台当然很方便提供api调用,还不用自己验 ...
- jdk工具(转)
在JDK的bin目录下有很多命令行工具: 我们可以看到各个工具的体积基本上都稳定在27kb左右,这个不是JDK开发团队刻意为之的,而是因为这些工具大多数是jdk\lib\tools.jar类库的一层薄 ...
- 抓包:MySQL Sniffer
1.依赖文件安装 依赖glib2-devel.libpcap-devel.libnet-devel [root@VMUest ~]# yum install cmake [root@VMUest ~] ...
- PKU--2184 Cow Exhibition (01背包)
题目http://poj.org/problem?id=2184 分析:给定N头牛,每头牛都有各自的Si和Fi 从这N头牛选出一定的数目,使得这些牛的 Si和Fi之和TS和TF都有TS>=0 F ...
- Luogu P2845 [USACO15DEC]Switching on the Lights 开关灯(bfs)
P2845 [USACO15DEC]Switching on the Lights 开关灯 题意 题目背景 来源:usaco-2015-dec \(Farm\ John\)最近新建了一批巨大的牛棚.这 ...
- vue.js_02_vue.js的基础指令
1.v-cloak 作用:解决插值表达式闪烁的问题 当网速过慢时,或者加载数据时间过长时,网页会出现 {{msg}} 的现象 使用方法: <!--缺陷需要写style样式--> < ...