数据库设计步骤

2023-09-21 09:33:35
一、数据库设计重点:有效存储、高效访问

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

更多推荐

设计模式之代理模式

文章目录代理模式(Proxy)代理模式的基本介绍静态代理静态代码模式的基本介绍应用实例静态代理优缺点动态代理动态代理模式的基本介绍JDK中生成代理对象的API动态代理应用实例Cglib代理Cglib代理模式的基本介绍Cglib代理模式实现步骤Cglib代理模式应用实例几种常见的代理模式介绍—几种变体代理模式(Proxy

层次查询和分析函数(LAG、LEAD)在号段选取中的应用

1.问题的提出在实际工作中,我们常常会碰到号段选取的问题,例如:一组连续的数,去掉中间一些数,要求出剩下的数的区间(即号段)例如:一串数字为1,2,3,4,7,9,10,则号段为1-4,7-7,9-10知道号段的起止,要求出该号段内所有的数例如:号段为1-3,15-15,则号段内所有的数为1,2,3,15一组数,中间可

代码随想录 -- day51 --309.最佳买卖股票时机含冷冻期 、714.买卖股票的最佳时机含手续费

309.最佳买卖股票时机含冷冻期注意冷冻期只为1天状态一:持有股票状态(今天买入股票,或者是之前就买入了股票然后没有操作,一直持有)不持有股票状态,这里就有两种卖出股票状态状态二:保持卖出股票的状态(两天前就卖出了股票,度过一天冷冻期。或者是前一天就是卖出股票状态,一直没操作)状态三:今天卖出股票状态四:今天为冷冻期状

探索编程世界的魔力:浅析经典算法的奥秘

一个程序员一生中可能会邂逅各种各样的算法,但总有那么几种,是作为一个程序员一定会遇见且大概率需要掌握的算法。今天就来聊聊这些十分重要的“必抓!”算法吧~一:引言算法在计算机科学和编程中具有极其重要的地位,其重要性体现在以下几个方面:问题解决能力:算法是解决问题的关键工具。它们提供了一种方法来精确描述问题,分解问题为可管

Java 华为真题-选修课

需求:现有两门选修课,每门选修课都有一部分学生选修,每个学生都有选修课的成绩,需要你找出同时选修了两门选修课的学生,先按照班级进行划分,班级编号小的先输出,每个班级按照两门选修课成绩和的降序排序,成绩相同时按照学生的学号升序排序。输入描述第一行为第一门选修课学生的成绩第二行为第二门选修课学生的成绩,每行数据中学生之间以

区块链技术优势和应用

区块链技术是一种分布式账本技术,它具有去中心化、不可篡改、公开透明等优势,可以广泛应用于各个领域。以下是区块链技术的一些应用场景和优势:1、应用金融领域:区块链技术可以用于实现安全、高效、低成本的支付和结算,同时也可以进行身份认证和信用评级,可以有效地防止欺诈和洗钱等金融犯罪活动。物流领域:区块链技术可以实现全程追溯和

【Hash表】找出出现一次的数字-力扣 136

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。推荐:kuan的首页,持续学习,不断总结,共同进步,活到老学到老导航檀越剑指大厂系列:全面总结java核心技术点,如集合,jvm,并发编程redis,kaf

蓝蓝设计为教育行业提供软件UI交互设计服务

在教育行业,软件的用户体验设计对于提供优质教育体验至关重要。教育行业软件用户体验设计需要考虑到学生和教师的需求,以及教育环境的特殊性。为了确保设计的成功,选择一家专业的设计公司是至关重要的,而北京蓝蓝设计公司就是您的最佳选择。北京蓝蓝设计公司是一家在教育行业软件用户体验设计领域拥有丰富经验的专业团队。我们深知教育行业软

elasticsearch索引同步

通常项目中使用elasticsearch需要完成索引同步,索引同步的方法很多:#1、针对实时性非常高的场景需要满足数据的及时同步,可以同步调用,或使用Canal去实现。1)同步调用即在向MySQL写数据后远程调用搜索服务的接口写入索引,此方法简单但是耦合代码太高。2)可以使用一个中间的软件canal解决耦合性的问题,但

Stable DIffusion 炫酷应用 | AI嵌入艺术字+光影光效

目录1生成AI艺术字基本流程1.1生成黑白图1.2启用ControlNet参数设置1.3选择大模型写提示词2不同效果组合2.1更改提示词2.2更改ControlNet2.2.1更改模型或者预处理器2.2.2更改参数3.其他应用3.1AI光影字本节需要用到ControlNet,可以查看之前博文StableDiffusio

【Qt】Qt中的中心部件意义

setCentralWidget()是QWidget类的一个成员函数,用于设置窗口的中心部件。中心部件是窗口中占据主要区域的部件,通常是用来显示应用程序的主要内容。以下是setCentralWidget()函数的用法示例:QWidget*centralWidget=newQWidget(this);setCentral

热文推荐