逻辑设计
- 范式设计
第一范式:数据库表的所有字段都是单一属性列,不可再拆分
第二范式:只有一个业务主键
第三范式:不能存在另外一个业务主键和业务主键相关依赖的字段 - 反范式设计
- 反范式化是针对范式化而言得,在前面介绍了数据库设计得范式
- 所谓得反范式化就是为了性能和读取效率得考虑而适当得对数据库设计范式得要求进行违反
- 允许存在少量得冗余,换句话来说反范式化就是使用空间来换取时间
- 总结
不能完全按照范式得要求进行设计,考虑以后如何使用表
范式化设计优缺点
优点:
1.可以尽量得减少数据冗余
2.范式化的更新操作比反范式化更快
3.范式化的表通常比反范式化的表更小
缺点:
1.对于查询需要对多个表进行关联
2.更难进行索引优化
反范式化设计优缺点
优点:
可以减少表的关联
可以更好的进行索引优化
缺点:
存在数据冗余及数据维护异常
对数据的修改需要更多的成本
物理设计
命名规范:
1.数据库、表、字段的命名要遵循可读性原则,hw_question_account;表示公司:华为,系统模块:question
,表名:account
2.数据库、表、字段的命名要能描述它所表示的对象
3.数据库、表、字段的命名要遵循,尽可能少写或不使用缩写
数据类型的选择:
当一个列可以选择多种数据类型时
- 优先考虑数字类型
- 其次是日期、时间类型
- 最后是字符类型
- 对于相同级别的数据类型,应该优先选择占用空间小的数据类型
浮点类型
注意float 和double 是非精度类型,如果是和金额相关尽量用decimal
select sum(c1),sum(c2),sum(c3) from test_numberic
日期类型
面试经常问道 timestamp 类型 与 datetime区别
timestamp 和时区有关,而datetime无关
insert into test_time VALUES(NOW(),NOW(),NOW());
set time_zone=“-10:00”