数据库设计步骤

一、数据库设计重点:有效存储、高效访问

1、为什么要进行数据库设计:

(1)减少数据冗余;

(2)避免数据异常维护;

(3)节约存储空间;

(4)高效访问;

二、数据库设计步骤

1、需求分析;

2、逻辑设计:ER图等建模;

3、物理设计:根据每种数据库特点设计;

4、维护优化;

三、为什么要进行需求分析

1、了解系统中所要存储的数据;

2、了解数据的存储特点;

3、了解数据的生命周期;

比如:用户包含的属性、可唯一标识属性(用户名、电话等)、存储特点(永久保存);

存储特点:永久保存、归档存储等;

四、数据库范式:

1、第一范式:数据库中的所有字段都是单一属性,不可再分的;

2、第二范式:数据库的表中,不存在非关键字段对任一候选字段部分函数依赖;

3、第三范式:在第二范式基础上,字段不存在传递依赖;

4、BC范式:在第三范式基础上,复合关键字之间不存在函数依赖;

PS:部分函数依赖:某个字段,由组合关键字中的一个字段决定,比如:用户信息跟物品信息放同一张表,用户信息有用户决定,物品信息由物品决定;

五、物理设计:

要做什么:

1、选择合适的数据库;

2、定义数据库、表及字段的命名规范;

3、选择DBMS的字段类型(关系到使用是否高效);

4、反范式设计;

搜索引擎:myisam等;

六、表及字段名规范:

表名:

1、可读性原则:统一格式,比如小写下划线;

2、表意性原则:意思明确;

3、长名原则:尽可能少使用缩写;

字段类型:

影响点:

1、存储空间的开销;

2、数据查询性能;

设计原则:

1、优先选择数字类型;

2、其次是日期或二进制;

3、最后是字符型;

考虑点:

1、对数据进行比较(查询条件、join条件及排序),同样的数据,字符处理往往比数字慢;

2、在数据库中,数据处理以页为单位,列长度越小,利于性能提升;

七、如何选择主键:

1、区分业务主键和数据库主键:如果没有主键(Innodb会创建六个字节的隐含主键);

2、根据数据库类型,考虑主键是否要按顺序增长:有些数据库是按主键的顺序逻辑存储的;

3、主键的字段类型所占空间要尽可能的小:聚簇索引会有索引信息;

避免使用外键约束:

1、降低数据导入的效率;

2、增加维护成本;

3、虽然不使用外键,但相关联字段要加上索引;

避免使用触发器:

1、降低数据导入的效率;

2、可能会出现意想不到的异常;

3、使业务逻辑变得复杂;

禁止使用预留字段;

八、反范式化;以空间换时间;

为什么要反范式化:

1、减少表的关联数量;

2、增加数据的读取效率;

3、反范式化一定要适度;

九、维护和优化:

1、维护数据字典;

2、维护索引;

3、维护表结构;

4、在适当的时候对表进行水平拆分和垂直拆分;

索引维护:

1、如何选择合适的索引:

(1)出现在where、Group by 、Order by的字段;

(2)选择性高的列放索引前面(非必须,数据库编译的时候,会自动选择索引);

(3)索引中不要包含太长的数据类型;

2、维护索引:

(1)过多索引不仅会影响写,还影响读;

(2)定期维护索引碎片;

(3)在sql语句中,不要使用强制索引关键字(oracle);

数据库中适合的操作:

1、批量操作优于逐条操作;

2、禁止使用Select * 这样的查询;

3、控制使用用户自定义函数;

4、不要使用数据库中的全文索引;

相关推荐
冒泡的肥皂13 分钟前
MVCC初学demo(一
数据库·后端·mysql
.Shu.1 小时前
Redis Reactor 模型详解【基本架构、事件循环机制、结合源码详细追踪读写请求从客户端连接到命令执行的完整流程】
数据库·redis·架构
薛晓刚4 小时前
当MySQL的int不够用了
数据库
SelectDB技术团队4 小时前
Apache Doris 在菜鸟的大规模湖仓业务场景落地实践
数据库·数据仓库·数据分析·apache doris·菜鸟技术
星空下的曙光5 小时前
mysql 命令语法操作篇 数据库约束有哪些 怎么使用
数据库·mysql
小楓12015 小时前
MySQL數據庫開發教學(一) 基本架構
数据库·后端·mysql
染落林间色5 小时前
达梦数据库-实时主备集群部署详解(附图文)手工搭建一主一备数据守护集群DW
数据库·sql
颜颜yan_5 小时前
企业级时序数据库选型指南:从传统架构向智能时序数据管理的转型之路
数据库·架构·时序数据库
lichenyang4535 小时前
管理项目服务器连接数据库
数据库·后端
沙振宇5 小时前
【数据库】通过‌phpMyAdmin‌管理Mysql数据
数据库·mysql