标签:效率 http 业务主键 数据类型 glob sql查询 优先 表设计 第二范式
一 数据库设计三大范式(用于逻辑设计)
1 第一大范式
2 第二大范式
要求表中只有一个业务主键,也就是说符合第二范式的表不能存在非主键列,只对部分主键的依赖关系
非主键列不能依赖其他表的非主键列。
错误范式:
订单与客户姓名关联
订单与客户编号关联
客户姓名和客户编号关联。
不应该将客户编号和客户姓名存放在订单中,如果修改用户表中的姓名和编号修改
则需要对订单中的客户编号和姓名进行修改。
使用范式设计后的表查询
为啥要有这个东西呢,就是因为如果过分的依赖于三大范式,设计出来的表虽然很符合规范,但是SQL的查询性能将会很差,所以才有了反范式设计
1 什么叫反范式化设计:
如订单表上按范式设计,只能由客户ID,关联到客户表,但是为了性能考虑,可以把经常需要查询的字段也放到订单表,如客户姓名,电话,地址等等
和上面纯范式设计相比,这个SQL查询关联的表少了很多,性能几何倍提升了
范式化设计的优点:
1、可以尽量减少数据冗余
2、范式化的更新操作比反范式化更快
3、范式化的表通常比反范式化更小
范式化设计的缺点:
1、对于查询需要对多个表进行关联
2、更难进行索引优化
反范式化设计的优点:
1、可以减少表的关联
2、可以更好的进行索引优化
反范式化设计的缺点:
1、存在数据冗余及数据维护异常
2、对数据的修改需要更多的成本
根据所选择的关系型数据库的特点对逻辑模型进行存储结构设计
1、定义数据库、表及字段的命名规范
a、数据库、表及字段的命名要遵守可读性原则
b、数据库、表及字段的命名要遵守表意性原则 表的名字能够描述表的功能、模块等
c、数据库、表及字段的命名要遵守长名原则 少用缩写
d. 数据库、 表、字段应使用英文或者拼音的专有名词。不要使用拼音。
2、选择合适的存储引擎
3、为表中的字段选择合适的数据类型
4、建立数据库结构
为表中的字段选择合适的数据类型:
当一个列可以选择多种数据类型时,应该优先考虑数字类型,其次是日期或二进制类型,最后是字符类型。对于相同级别的数据类型,应该优先选择占用空间小的数据类型。
如何选择正确的整数类型:
如何选择正确的实数类型:
(如果涉及金额,财务这块的实数,要用DECIMAL,因为其他类型会有数据计算不准和丢失的情况)
何选择varchar和char类型:
varchar类型的存储特点:
a、varchar用于存储变长字符串,只占用必要的存储空间。
b、列的最大长度小于255则只占用一个额外字节用于记录字符串长度
c、列的最大长度大于255则要占用两个额外字节用于记录字符串长度
varchar长度的选择问题:
a、使用最小的符合需求的长度
b、varchar(5)和varchar(200)存储MySQL字符串性能不同
varchar适用场景:
a、字符串列的最大长度比平均长度大很多
b、字符串列很少被更新
c、使用了多字节字符集存储字符串
char类型存储特点:
a、char类型是定长的
b、字符串存储在char类型的列中会自动删除末尾的空格
c、char类型的最大宽度为255
char类型适用的场景:
a、cahr类型适合存储长度近似的值
b、char类型适合存储短字符串
c、char类型适合存储经常更新的字符串列
如何存储日期类型:
可以在表设计中勾选,字段更新timestamp列的值
区别 | timestamp | datetime |
时区 |
和时区有关 mysql服务器的3种时区设置
|
无关 |
长度 | 4字节 | 8字节 |
范围 | ‘1970-01-01 00:00:01.000000‘ to ‘2038-01-19 03:14:07.999999‘ |
‘1000-01-01 00:00:00.000000‘ to ‘9999-12-31 23:59:59.999999‘ |
默认值 | current_timestatmp 系统当前时间 |
null |
标签:效率 http 业务主键 数据类型 glob sql查询 优先 表设计 第二范式
原文地址:https://www.cnblogs.com/hup666/p/13378424.html