数据库建模

对于项目而言,数据库建模是确保成功的重要环节。它将复杂的业务需求转化为清晰的数据架构,帮助团队理解和管理数据流。通过建立概念、逻辑及物理模型,不仅能提前解决潜在的数据问题,还能促进开发者、设计师与利益相关者之间的有效沟通,为项目的顺利推进和系统的长期维护奠定坚实基础

目录

数据库建模概述

什么是数据库建模

为什么要进行数据库建模

怎么进行数据库建模

真实设计

需求分析

概念模型CDM

找实体

加属性

关系关联

通过工具建立概念模型

物理模型PDM

总结



数据库建模概述

什么是数据库建模

数据库建模是将现实世界的需求转化为数据库设计的过程,旨在创建一个高效、可靠的数据存储结构。它通常包括三个阶段:概念模型、逻辑模型和物理模型。(通常不直接考虑逻辑模型,而是与概念模型一起设计)

  • 概念模型:关注于识别系统中的关键实体及其关系,不涉及具体的技术细节。常用ER图(实体-关系图)来表示。
  • 物理模型:将逻辑模型转换成特定DBMS支持的具体实现,包括选择合适的数据类型、索引策略等。

为什么要进行数据库建模

  1. 确保数据完整性:通过定义主键、外键等约束条件,保证数据的一致性和完整性。
  2. 优化性能:合理的设计可以减少冗余数据,提高查询效率,降低维护成本。
  3. 易于维护:清晰的结构使得未来的修改和扩展更加容易。
  4. 促进团队协作:为所有相关方提供了一个共同的语言和框架,便于沟通和理解需求。

怎么进行数据库建模

1. 需求分析

首先需要对业务需求有深入的理解,明确系统需要处理的主要对象(即实体)以及这些对象间的关系。例如,在网盘管理系统中,我们确定了用户(User)、文件(File)、目录(Folder)和分享(Share)作为核心实体。

2. 创建概念模型

使用ER图描述实体及其之间的关系。在这个阶段,重点在于捕捉实体的关键属性和它们之间如何相互作用。比如,用户可以上传文件和创建目录,文件可以被分享给其他用户等。(在实际开发中;一开始立项的时候是不知道使用哪款DBMS(Oracle/DB2/Sybase/SQL Server/MySQL)的;所以不能直接基于某一款数据库创建对应的建表语句。可以先创建概念模型,一旦定下来DBMS则可以直接转换)

3. 构建物理模型

将逻辑模型转化为适合特定数据库管理系统的实际数据库结构。这包括选择适当的数据类型、设置索引、定义视图等。对于部分管理系统,可能涉及到创建UsersFilesFoldersShares等表,并设置相应的字段和关系。(创建数据库及表的时候使用pdm非常方便。如果已经确定使用哪种DBMS之后或者数据库表设计比较特殊,那么也可以直接画PDM而不画CDM。)

真实设计

需求设计:我们的目标是开发一个全面的网盘管理系统,该系统不仅允许用户安全地上传、下载、管理和组织他们的文件和目录,还支持用户间高效、灵活的文件及目录分享功能。系统需具备用户注册与登录、个人信息维护等基本功能,并确保用户能够轻松进行文件操作如上传、下载、删除和重命名,以及创建和管理目录结构,包括目录的嵌套和重命名。此外,系统应提供强大的分享功能,让用户可以便捷地将文件或目录分享给其他用户,同时支持分享权限的设置与管理。为了提升用户体验,系统还需集成搜索功能,使用户能快速定位所需文件或目录。

需求分析

1. 用户管理

  1. 注册:允许新用户创建账户,需要填写用户名、密码及电子邮箱。
  2. 登录:已注册用户可以通过用户名和密码登录系统。
  3. 个人信息维护:用户可以更新自己的个人信息,包括修改密码和电子邮箱。

2. 文件上传与管理

  1. 文件上传:用户能够上传各种类型的文件到系统中,系统应记录文件的基本信息如文件名、大小、上传时间等。
  2. 文件下载:支持用户下载自己上传的文件。
  3. 文件删除:用户有权删除自己上传的文件。
  4. 文件重命名:用户可以对自己的文件进行重命名操作。

3. 目录管理

  1. 目录创建:用户可以在其个人空间内创建新的目录,以组织和分类文件。
  2. 目录删除:允许用户删除空目录(非空目录需先清空)。
  3. 目录重命名:用户可对目录进行重命名。
  4. 目录嵌套:支持在一个目录下创建子目录,形成层次结构。

4. 文件/目录分享

  1. 分享功能:用户可以选择某个文件或整个目录分享给其他用户,分享时需指定接收者。
  2. 分享权限控制:分享文件或目录时,提供不同的访问权限选项(如只读、读写)。
  3. 分享取消:分享发起者可以随时取消分享链接,撤销他人访问权限。

5. 搜索功能

  1. 全局搜索:支持根据文件名、目录名快速查找相关内容。
  2. 高级搜索:提供基于上传时间、文件类型等条件的高级搜索能力。

对于产品经理给的需求,我直接给出分析结果,这里是每个人的想法对于产品原型的理解有所差异,为了让产品经理能明白我们是否达到他的理想情况,所以必须进行数据库建模。

概念模型CDM

实体与实体之间的关系的图形,ER图,极为概念模型。

对于如何绘制ER图,思维是最重要的。就三个点,找实体,加属性,关系关联。

找实体

方法:原型、需求中的那些实体(名词、领域模型)先列出来;在原型中常见的有模块名称、下拉框。

  • 用户 (User):系统使用者。
  • 文件 (File):用户上传的文件。
  • 目录 (Folder):用于组织和存储文件的容器。
  • 分享 (Share):表示文件或目录被分享的情况。

加属性

方法:  根据原型、需求文档中对于上述列出的实体设置属性;做法就是结合输入和输出的综合。(输入:新增、添加 等按钮之后的页面;输出;列表、详情页),注意:还有一些公共字段,例如:状态、创建、更新时间等等。

请注意:我们一般不加入物理外键,在大量数据进行操作时,物理外键会十分消耗性能。至于图中的父目录ID这个不是物理外键,这是对于层级结构的数据库表的简化设计。

关系关联

要将需求中实体之间的关系画出来。

方法:要么直接刚,要么使用对比法,千万不要转牛角尖。

  • 用户可以拥有多个文件和目录。
  • 文件必须属于一个用户,但可以存在于多个分享中。
  • 目录可以包含多个文件和其他目录。
  • 分享可以是文件或者目录,并关联到特定的用户。

例如:用户-文件:一对多;文件-分享:一对多等等,就这样分析即可。

关系如下

用户(User)与文件(File)之间存在一对多的关系。

用户(User)与目录(Folder)之间也存在一对多的关系。

目录(Folder)与其内部包含的文件(File)及子目录(Folder)之间存在一对多的关系。

文件(File)和目录(Folder)可以通过中间表与分享(Share)建立多对多的关系。

通过工具建立概念模型

我个人使用的是Power Designer。你需要自己去挑选用哪个设计工具。下面是我设计的概念模型CDM。

对于实体就是如下:User(用户实体)

因为偷懒,所以一些如状态,创建时间,创建人等等公共字段就不加了。

物理模型PDM

是一个描述表与表之间关系的图形。可以通过该图形直接获得整个库的sql语句,直接创建整个数据库的表及其关系。

在实际开发中:确定了客户使用哪种DBMS之后;可以通过CDM直接转换为PDM。

最棒的是:Power Designer可以直接把CDM直接转换为PDM。

因为文件和分享关系是多对多,目录和分享也是多对多。为了保证查询性能以及简化sql,所以一般会设计子表。

如下图所示:我们可以随意切换数据库

可以一键生成数据库文件

所以,数据库建模的重要性不言而喻。

总结

无论项目的业务逻辑设计得多么出色,掌握如何创建高效的数据库结构同样是至关重要的技能。数据库建模不仅需要理论知识,还需要通过实践积累经验。

例如,虽然规范化(范式)在数据库设计中起着关键作用,但并不是所有情况下都适用。实际上,随着范式的提高,虽然数据冗余减少,但在某些场景下可能会导致查询性能下降。因此,在实际应用中,适当地采用反规范化(增加适量的数据冗余)可以显著提升数据库的查询性能,优化用户体验。

数据库索引的使用上,应优先为那些查询频率高且具有较高选择性的列(如主键、唯一标识符)建立索引。对于基于多个条件的查询,可以考虑创建复合索引以提升效率。同时,随着数据的增长,定期重建或重组索引是必要的,以确保其持续高效运行。简洁来说,合理选择和维护索引能显著提高数据库查询性能。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值