数据库设计步骤

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

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、不要使用数据库中的全文索引;

相关推荐
drebander7 分钟前
MySQL 查询优化案例分享
数据库·mysql
初晴~23 分钟前
【Redis分布式锁】高并发场景下秒杀业务的实现思路(集群模式)
java·数据库·redis·分布式·后端·spring·
盖世英雄酱5813628 分钟前
InnoDB 的页分裂和页合并
数据库·后端
YashanDB2 小时前
【YashanDB知识库】XMLAGG方法的兼容
数据库·yashandb·崖山数据库
独行soc2 小时前
#渗透测试#漏洞挖掘#红蓝攻防#护网#sql注入介绍11基于XML的SQL注入(XML-Based SQL Injection)
数据库·安全·web安全·漏洞挖掘·sql注入·hw·xml注入
风间琉璃""3 小时前
bugkctf 渗透测试1超详细版
数据库·web安全·网络安全·渗透测试·内网·安全工具
drebander3 小时前
SQL 实战-巧用 CASE WHEN 实现条件分组与统计
大数据·数据库·sql
IvorySQL3 小时前
IvorySQL 4.0 发布:全面支持 PostgreSQL 17
数据库·postgresql·开源数据库·国产数据库·ivorysql
18号房客3 小时前
高级sql技巧进阶教程
大数据·数据库·数据仓库·sql·mysql·时序数据库·数据库架构
Dawnㅤ3 小时前
使用sql实现将一张表的某些字段数据存到另一种表里
数据库·sql