数据库blog4_数据库软件的设计方法与实际架构
🌿数据库的设计
由上一章可以得出数据库着重关注数据的逻辑结构和存储结构。即这是数据库设计的核心,但详细的设计结构也要研究。以下是介绍
🍂数据库架构思路
● 数据库本身
- 数据(Data)
数据:数据库中存储的实际信息,是用户存储和操作的对象。
即数据库要存储处理的数据,所以要解决数据的逻辑结构和存储结构。注意,不是现实数据,因为要整理才符合数据库的高效管理原则。(原模原样存储的话,数据库没有发挥余地)
- 数据库(Database)
数据的集合,按照特定数据结构组织
数据胡乱堆在一起当然不行,所以建立数据库来集中管理(有点中心化的思想)。
- 数据库管理系统(DBMS)
管理数据库的软件系统
有了数据库,数据确实有序存储了,但没法操作啊。我们建立数据库的目的是为了高效处理而不是为了单纯的存放的,所以,要有数据库管理系统支持我们对数据的操作
- 数据库系统(Database System)
完整的系统=数据库+DBMS+应用程序+用户
有了数据库管理系统,可以对数据操作了,但软件不会自动运行啊,要对数据进行什么操作是由人来决定的啊,同时还有数据/软件的维护,都需要人来自主管理。所以,需要人。
● 数据库与其它软件的交互
数据库并非孤立存在,它需要与多种软件进行交互,以实现数据的共享、处理和应用。
- 连接器(Connectors)
允许应用程序通过标准的接口(如JDBC、ODBC等)与数据库进行交互。
相关方法
- 中间件(Middleware)
位于客户端和服务器之间的软件层,提供了多种服务,如数据缓存、负载均衡、事务管理等。通过中间件,应用程序可以更高效地访问数据库,同时减轻数据库服务器的负担。
- 应用程序接口(API)
应用程序与数据库之间进行交互的接口。提供了一组预定义的函数和方法,应用程序可以通过这些函数和方法来访问数据库。
- 数据同步工具
数据同步工具用于在不同的数据库之间同步数据。
- 数据仓库和数据湖
数据仓库和数据湖是用于存储和分析大量数据的系统。它们通常与数据库进行交互,以获取和存储数据。
- ETL工具
ETL(Extract, Transform, Load)工具用于从不同的数据源提取数据,对其进行转换和清洗,然后加载到目标数据库中。
- 数据库监控和管理工具
数据库监控和管理工具用于监控数据库的性能、健康状况和安全状态。它们可以与数据库进行交互,以获取各种监控指标和日志信息。
- 数据备份和恢复工具
数据备份和恢复工具用于对数据库进行备份和恢复操作。它们可以与数据库进行交互,以获取数据库的备份数据,并在需要时将其恢复到数据库中。
- 数据安全工具
数据安全工具用于保护数据库中的数据安全。它们可以与数据库进行交互,以实现数据加密、访问控制、审计等功能。
🌿实际数据库设计
从概念到落地实施,把数据到数据库系统的相关内容抽象总结给出概念后,用代码实现软件的开发。
最关键的:
设计数据的 逻辑结构 与 存储结构 以及 现实数据转为逻辑结构的方法 (如,关系型数据库的范式)
🍂需要做啥
● 数据
需求
- 明确要研究的数据,设计数据逻辑结构与存储结构(以及是单一数据库还是多模数据库)
- 规定现实数据到逻辑数据的处理方法
- 明确数据库里的数据功能类型(关系、索引、视图…)
- …
举例:
**数据设计** - `明确要研究的数据`**需求分析:** 与业务部门沟通,明确业务需求和数据需求。**数据分类:** 将数据分类为不同的实体和属性。例如,一个电商系统可能有用户、订单、商品等实体。 - `设计数据逻辑结构与存储结构`**概念模型设计:**使用E-R图(实体-关系图)来描述数据的实体、属性和关系。实体:如用户、订单、商品。属性:如用户的姓名、订单的金额、商品的名称。关系:如用户下订单、订单包含商品。逻辑模型设计:将概念模型转换为数据库支持的数据模型,如关系模型。表设计:每个实体对应一个表,每个属性对应表中的列。关系设计:通过外键等关系约束来表示实体之间的关系。**存储结构设计:**文件组织:确定数据文件的存储方式,如堆文件、索引文件等。索引设计:设计索引以加速数据的查找操作,如B树索引、哈希索引等。分区设计:根据数据的访问模式和存储需求,设计数据分区策略,如水平分区、垂直分区等。 - `确定是单一数据库还是多模数据库`**单一数据库:**如果数据类型较为单一,且业务逻辑相对简单,可以使用单一数据库。**多模数据库:**如果数据类型多样,如既有结构化数据(关系型),又有半结构化数据(JSON)和非结构化数据(图片、文件等),则可以考虑使用多模数据库。 - `规定现实数据到逻辑数据的处理方法`**数据清洗:**去除重复数据、纠正错误数据、填补缺失数据等。**数据转换:**将现实数据转换为符合数据库逻辑结构的数据格式。**数据加载:**将清洗和转换后的数据加载到数据库中。 - `明确数据库里的数据功能类型`**关系:**通过表和外键来表示实体之间的关系。**索引:**用于加速数据的查找操作。**视图:**虚拟表,用于简化复杂的查询操作。**存储过程:**封装复杂的业务逻辑,提高代码复用性。**触发器:**在数据发生变化时自动执行的程序,用于实现数据的自动更新和校验。
● 数据库
需求
- 明确数据的组织形式
- …
举例
**数据库设计** - `明确数据的组织形式`**表设计:**设计表的结构,包括表名、列名、数据类型、约束等。**关系设计:**设计表之间的关系,如一对一、一对多、多对多关系。**规范化:**通过规范化(如1NF、2NF、3NF)来减少数据冗余,提高数据一致性。
● 数据库管理系统
需求
- 规定可以执行的操作以及其它管理、操作方法
- 设计相关软件模块(如,连接器)
- …
举例
**数据库管理系统设计** - `规定可以执行的操作以及其它管理、操作方法`CRUD操作:定义数据的增删改查(Create、Read、Update、Delete)操作。事务管理:支持事务的ACID特性(原子性、一致性、隔离性、持久性)。备份与恢复:设计数据备份和恢复策略,确保数据的安全性和可恢复性。性能优化:通过索引优化、查询优化、缓存机制等提高数据库的性能。安全机制:实现数据加密、访问控制、审计等安全功能。 - `设计相关软件模块(如,连接器)`连接器设计:设计连接器以支持应用程序与数据库的交互。JDBC:用于Java应用程序与数据库的连接。ODBC:用于多种编程语言与数据库的连接。API设计:设计RESTful API或GraphQL API等,供应用程序调用。
● 数据库系统
需求
- 给后续维护人员的维护文档
- …
举例
**数据库系统设计** - `人的维护文档`文档编写:编写详细的数据库设计文档,包括数据模型、表结构、索引设计、存储过程等。操作手册:编写数据库操作手册,包括数据备份、恢复、性能优化、安全配置等操作步骤。维护计划:制定数据库的维护计划,包括定期备份、性能监控、数据清理等。培训文档:编写数据库管理员和开发人员的培训文档,帮助他们快速掌握数据库的使用和维护方法。
🍂设计流程总结
- 需求分析 → 概念设计 → 逻辑设计 → 物理设计 → 实施 → 维护
- 需求分析:明确业务需求、数据类型、功能需求。
- 概念设计:E-R建模,实体、属性、关系。
- 逻辑设计:表结构、字段、主外键、规范化。
- 物理设计:存储结构、索引、分区、文件组织。
- 实施:编码、部署、数据迁移。
- 维护:备份、监控、优化、安全、文档。
- 从概念到落地实施,把数据到数据库系统的相关内容抽象总结给出概念后,用代码实现软件的开发。
相关优秀博文推荐
🌿实际中数据库的软件架构
🍂架构
分为客户端 与 服务器端两个部分,服务器端作为数据的存储、操作、管理的核心,而客户端只是连接到服务器端,由此获得相关操作数据的权限
● 客户端
客户端: 作用是连接到服务器,而不负责核心功能
- 位于本地,即你的PC上
- 要操纵数据库,就需要用客户端连接到数据库服务器或者直接操作服务器。而在一般开发中,开发者一般没有那么大的权限接触到服务器端,所以使用客户端连接(同时根据你的身份相关的数据库管理人员会给你分配不同的权限。比如,有的只能看,有的有权力看和更改…)
- 客户端只是起到的连接到服务器以及把请求发送给服务器接收服务器返回的内容等等,相当于服务器端数据的可视化显示,而数据本身一般不在本地里(即数据是在服务器上的)
- 一个客户端可以连接到多个数据库服务器端,而一个服务器端也支持多个客户端访问。
- 客户端的两种样式:命令行模式 和 图形化界面(图形化界面友好美观)。而大多数数据库两种界面都带了,但图形化界面不够美观,于是有第三方开发了更好看的界面(eg.Navicat),即第三方客户端的作用。同时,第三方客户端支持兼容多个不同类型数据库
- 界面对比
● 服务器端
服务器端:作用是存储、管理、操作以及其它。即服务器端才是数据库的核心,也是设计数据库时的重要实现对象。
- 在实际的工作上,服务器端必然要放在性能很好的服务器上来支持高速的数据处理。(个人PC没能力啊)同时,由于数据库一般用来管理重要数据,所以更不可能放在个人的PC上,一般是由专门的数据库管理人员来负责维护数据库以及权限的分配管理。
- 而,在练习中,会发现数据库包含了客户端与服务器端,即这两个软件都是运行在本地PC上,这是为了方便学习。而实际工作中,只用客户端就好。即只用下载客户端的部分就好。(开发厂商会给你不同的下载选择的)
🍂总结
- 在实际开发中,开发人员PC上一般只有客户端
- 而在数据库的学习中,客户端 和 服务器端这两个软件都在PC上
- 客户端只是为了与服务器端连接,实现本地和服务器的信息交互而已
🌿实际使用数据库
由上述内容可以知道数据库的设计流程以及软甲架构方法,由此我们可以继续学习,实现一个数据库软件的开发,然而在实际中,开发意味着时间与成本的投入,由此,衍生处理两种使用数据库软件的办法
🍂使用的两种思路
● 直接使用现成的数据库软件
我们熟知的MySQL、redis…,都是成熟的第三方商业化数据库软件,满足拿来稍微设置以下就能用的标准。
优点
- 第三方商业数据库软件即已经完成的数据库软件的逻辑设计和物理实现,是已经开发好的工具。由此,对于使用者来说,它省去了开发的过程已经后期维护的需要。
- 由此,只需要交钱就可以使用,省时省力。
缺点
- 由于是第三方开发好的软件,所以数据的逻辑结构和存储结构以及功能都是定好的,但数据库软件市场上局限的设计可能不满足自己的开发需求。由此,使用起来不表现太好。
- 同时,使用了第三方软件,就意味着这个部分的更新或者其它不是由自己控制的,这意味着如果第三方软件有什么变动,整个项目也可能需要跟进,这是一种被动的更新。同时也不适合安全性高的项目
● 自己开发一个数据库
即从头开始,根据自己的需要实现数据库从概念到实现的全过程,开发成本大,但软件变成了自己掌控的
优点
- 自主开发,意味着可以根据具体需要设计完全符合自己项目情况的数据库软件
- 同时,自主开发的安全性更高,且不用被动更新,追着第三方软件对齐
缺点
- 开发需要时间、成本以及技术人员,后期还要维护,是一项大工程。对小的公司反而低效率
🍂使用思路的选择标准
每个项目的侧重不同,同时企业的开发能力也有差距,最终要根据最重要的因素做出合理的取舍
步骤
**评估项目需求:**如果现成的数据库软件可以满足需求,优先选择现成的数据库软件。如果有特殊的业务需求,现成的数据库软件无法满足,考虑自开发数据库。 **评估时间和成本:**如果项目时间紧迫,预算有限,优先选择现成的数据库软件。如果项目时间充裕,预算充足,且需要高度定制化的功能,考虑自开发数据库。 **评估技术能力:**如果团队对现成的数据库软件有丰富的使用经验,优先选择现成的数据库软件。如果团队有深厚的技术背景和经验,能够处理数据库开发中的复杂问题,考虑自开发数据库。 **评估项目规模和复杂度:**对于小型项目和创业公司,优先选择现成的数据库软件。对于大型企业或复杂的项目,考虑自开发数据库。 **评估长期规划:**如果项目需要长期稳定运行,优先选择现成的数据库软件。如果项目需要高度定制化的功能,且团队有长期维护的能力,考虑自开发数据库。