首页 最新 热门 推荐

  • 首页
  • 最新
  • 热门
  • 推荐

【系统架构设计师】数据库系统 ③ ( 数据库设计过程 | 概念结构设计 | ER 图 简介 | 概念设计阶段 工作拆分 )

  • 25-04-24 18:47
  • 3750
  • 6362
blog.csdn.net

文章目录

  • 一、数据库设计过程 概述
  • 二、ER 图 简介
    • 1、ER 图 概念
    • 2、ER 图 示例
    • 3、ER 图 关系类型
      • ① 一对一 ( 1:1 ) 关系
      • ② 一对多 ( 1:n ) 关系
      • ③ 多对多 ( n:n ) 关系
  • 三、概念设计阶段 工作拆分





一、数据库设计过程 概述



数据库设计过程 :

  • 需求分析阶段 : 明确 用户需求 ;
    • 输入 :
      • 用户业务需求 : 任务书 和 设计方案 , 当前和未来应用数据要求 , 数据处理要求 ;
      • 现有系统文档 ;
    • 输出 :
      • 数据流图 : 用 图形化 方式展示系统中 数据流动、存储、处理 的逻辑关系 , 包含 进程、数据流、数据存储、外部实体四要素 ;
      • 数据字典 : 结构化文档 , 详细定义 数据项名称、类型、长度、约束条件、来源及去向 ;
      • 需求说明书 : 汇总 用户功能性 与 非功能性 需求 的 正式文档 ;
  • 概念设计阶段 : 使用 ER 模型 描述数据关系 , 将 现实世界的需求 抽象出 概念模型 , 即 实体-关系图 ( ER 图 ) ;
    • 输入 :
      • 需求分析产物 : 包括 数据流图、数据字典、需求说明书 ;
      • 用户业务需求 ;
    • 输出 : ER 图 ( 实体-关系图 ) , 将需求 抽象为 可视化模型 , 实体 由 实体 ( 矩形 ) 、属性 ( 椭圆 ) 、联系 ( 菱形 ) 表现出来 , 实体之间的关系有 1:1、 1:N、 M:N ;
  • 逻辑设计阶段 : 将 ER 图 转换为 关系模式 ;
    • 输入 :
      • 概念设计阶段产物 : ER 图 ;
      • 规范化理论 : 通过 范式 消除数据冗余与更新异常 , 范式有 1NF、2NF、3NF ;
      • 关系模型 : 以表 ( 关系 ) 为核心的数据模型 , 支持关系代数操作 ( 如 : 选择、投影、连接 ) , 数据库 都是 基于 关系模型 实现 ;
    • 输出 :
      • 关系模式 : 就是 数据库表结构 , ER 图 转为 关系模式 ( 表结构 ) ;
      • 视图 : 虚拟表 , 简化复杂查询 、 隐藏敏感数据 、 提供逻辑数据抽象 ;
      • 完整性约束 : 主键 / 外键 / 检查约束 ;
  • 物理设计阶段 : 确定 存储结构 与 索引 , 考虑具体的 物理存储、物理分布、物理访问 的细节 ;
    • 输入 :
      • 逻辑设计阶段输出 : 视图、完整性约束
      • DBMS 特性 : 如 存储引擎 / 索引类型 等 ;
      • 硬件 和 操作系统特性 : 软硬件配置 ;
      • 数据处理要求 ;
    • 输出 :
      • 物理存储结构 : 决定数据基础存取效率 , 是 文件 的 组织方式 , 数据在 磁盘 上的 物理存储形式 ( 堆文件、顺序文件、索引文件、散列文件 ) , 直接影响读写效率 ;
      • 索引方式 : 平衡查询性能与存储成本 , 索引可以 加速数据检索 , 牺牲存储空间换取查询效率 , 常见的索引方式有 哈希索引、位图索引、B+树索引 ;
      • 分区策略 : 解决海量数据分布与扩展性问题 , 将大数据集划分为 逻辑 / 物理 独立单元 , 提升可管理性与性能 , 常见的分区策略有 水平分区 、 垂直分区 、 范围分区 、 列表分区 等 ;
      • 缓存优化方案 : 通过 空间 换 时间 突破 I/O 瓶颈 , 利用 高速存储介质 ( 如内存 ) 缓存热点数据 , 减少磁盘访问 , 常见的策略有 LRU 最近最少使用 、 LFU 最不经常使用 、 TTL 过期时间 等 ;

在这里插入图片描述





二、ER 图 简介




1、ER 图 概念


ER 图 ( Entity-Relationship Diagram , 实体-关系 图 ) : 是 用于 描述 现实世界概念模型 的工具 , 通过 图形化方式 展示如下元素 :

  • 实体 ( Entity ) : 现实中的独立对象 , 可区分的 物体或概念 , 用 实体用矩形表示 , 矩形框内写明实体名 ;
  • 属性 ( Attribute ) : 实体 或 关系 的某个特征 , 属性用椭圆形表示 , 并用 无向边 将 属性 与 相应的 实体或关系 连接起来 ;
  • 关系 ( Relationship ) : 实体间的关联 , 关系 用菱形表示 , 菱形框内写明 关系名 , 并用无向边分别与有关实体连接起来 , 同时在无向边旁标上联系的类型 ( 如 : 1:1、1:n、m:n ) ;

2、ER 图 示例


下图是一个 学生 选课 的 ER 图 :
在这里插入图片描述

  • 实体 : 学生 和 课程 是 实体 , 使用 矩形 表示 ;
  • 属性 : 学生的属性有 学号、姓名、性别、年龄 等属性 , 课程的属性有 课程号、课程名、任课教师 等属性 , 使用椭圆表示 , 使用无向边连接 矩形 ( 实体 ) 与 椭圆 ( 属性 ) ;
  • 关系 : 选课 是 学生 和 课程 两个实体之间的 关系 , 使用 菱形 表示 ;

3、ER 图 关系类型


ER 图 中的 关系类型 :

  • 一对一 ( 1:1 ) : 一个实体的实例 与 另一个实体的唯一实例 相关联 ; 如 : 一个班级 设有 一个班长 ;
  • 一对多 ( 1:n ) : 一个实体的实例 与 多个实例的另一个实体 相关联 ; 如 : 一个班级 拥有 多个学生 ;
  • 多对多 ( m:n ) : 多个实体的实例 与 多个实例的另一个实体 相关联 ; 如 : 多个学生 选修 多个课程

① 一对一 ( 1:1 ) 关系


一对一 ( 1:1 ) 关系 : 一个实体的实例 与 另一个实体的唯一实例 相关联 ; 如 : 一个班级 设有 一个班长 , 班级 与 班长 的 ER 图如下所示 :
在这里插入图片描述

  • 核心转换 : 班级 与 班长 之间 , 可以选择某一端作为核心 ;
    • 以 班级 为核心 , 班级 与 班长 是 1:1 的关系 ;
    • 以 班长 为核心 , 班长 与 班级 是 1:1 的关系 ;
  • 班级集合 与 班长集合 是 一对一 的 匹配关系 , 如下图所示 :
    在这里插入图片描述

② 一对多 ( 1:n ) 关系


一对多 ( 1:n ) : 一个实体的实例 与 多个实例的另一个实体 相关联 ; 如 : 一个班级 拥有 多个学生 ; 班级 与 学生 的 ER 图如下所示 :
在这里插入图片描述

  • 核心转换 : 班级 与 学生 之间 , 可以选择某一端作为核心 ;

    • 以 班级 为核心 , 班级 与 学生 是 1:n 的关系 ;
    • 以 学生 为核心 , 学生 与 班级 是 n:1 的关系 ;
  • 班级集合 与 学生集合 是 一对多 的 匹配关系 , 如下图所示 :
    在这里插入图片描述

  • 学生集合 与 班级集合 是 多对一 的 匹配关系 , 如下图所示 :
    在这里插入图片描述


③ 多对多 ( n:n ) 关系


多对多 ( m:n ) : 多个实体的实例 与 多个实例的另一个实体 相关联 ; 如 : 多个学生 选修 多个课程 ; 学生 与 课程 的 ER 图如下所示 :
在这里插入图片描述

  • 核心转换 : 课程 与 学生 之间 , 可以选择某一端作为核心 ;
    • 以 课程 为核心 , 课程 与 学生 是 n:n 的关系 ;
    • 以 学生 为核心 , 学生 与 课程 是 n:n 的关系 ;
  • 课程集合 与 学生集合 是 多对多 的 匹配关系 , 如下图所示 :
    在这里插入图片描述




三、概念设计阶段 工作拆分



概念结构设计 阶段 通过 逐步 抽象、建模、合并与优化 , 将 碎片化需求 转化为统一的全局数据模型 ,

其核心在于 平衡用户需求与技术实现 , 确保模型具备 完整性、一致性与高效性 , 为后续数据库逻辑设计奠定基础 ;


如果 信息系统 规模比较大时 , 单靠一个人是无法完成 概念结构设计的 , ER 图 由 不同的 人员 分开完成的 , 每个人 完成一部分 局部 ER 图 ;


此处需要将 概念结构设计阶段 的工作 进行如下图所示的 拆分 : 抽象数据 ->设计局部 ER 模型 -> 合并局部 ER 模型并消除冲突 -> 重构优化并消除冗余 ;

  • 抽象数据 : 从 需求分析 中提炼 核心数据元素 及其 关联关系 , 方法如下 :
    • 分类 : 将 同类对象 抽象为实体 ;
    • 聚集 : 组合相关属性形成实体 , 如 : 学生 有 姓名 年龄 等属性 ;
    • 概括 : 建立 继承关系 , 如 : 学生 与 高中生 ;
  • 设计局部 ER 模型 : 为 不同 子系统 或 用户视图 构建 独立的 ER 模型 , 重点是 识别局部范围内的实体、属性及联系 , 标注主键、外键及多重性 ;
  • 合并局部 ER 模型 : 整合局部模型为全局 ER 模型 , 主要的 集成方法如下 :
    • 一次性集成 : 将 所有的 ER 模型 , 一次性集成为 完整的 系统 ER 图 ;
    • 逐步集成 : 使用 累加的方式 集成 ER 图 , 每次只集成 两个 ER 图 ;
  • 消除冲突 : 解决 ER 模型 之间 不一致问题 , 常见的冲突如下 :
    • 属性冲突 : 属性域 或 属性值 冲突 ;
    • 命名冲突 : 同名异义 或 异名同义 , 统一命名规范 , 协商实体定义 ;
    • 结构冲突 : 同一对象 在 不同应用中 抽象实体不同 , 同一个实体 在 不同的 局部 ER 图 中 包含的 属性个数 和 属性排列次序不同 ;
    • 关系冲突 : 同一个关系 在 不同的 局部 ER 模型中 表现不同 ;
  • 重构优化并消除冗余 : 提高模型效率 , 减少数据冗余 ;
    • 合并相似实体 : 通过 属性 区分类型 ;
    • 消除冗余属性 : 若属性可通过其他数据推导 , 则删除冗余 ;
    • 简化复杂联系 : 检查 多对多联系 是否需要 拆解为中间实体 ;
注:本文转载自blog.csdn.net的韩曙亮的文章"https://hanshuliang.blog.csdn.net/article/details/146523745"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接
复制链接
相关推荐
发表评论
登录后才能发表评论和回复 注册

/ 登录

评论记录:

未查询到任何数据!
回复评论:

分类栏目

后端 (14832) 前端 (14280) 移动开发 (3760) 编程语言 (3851) Java (3904) Python (3298) 人工智能 (10119) AIGC (2810) 大数据 (3499) 数据库 (3945) 数据结构与算法 (3757) 音视频 (2669) 云原生 (3145) 云平台 (2965) 前沿技术 (2993) 开源 (2160) 小程序 (2860) 运维 (2533) 服务器 (2698) 操作系统 (2325) 硬件开发 (2492) 嵌入式 (2955) 微软技术 (2769) 软件工程 (2056) 测试 (2865) 网络空间安全 (2948) 网络与通信 (2797) 用户体验设计 (2592) 学习和成长 (2593) 搜索 (2744) 开发工具 (7108) 游戏 (2829) HarmonyOS (2935) 区块链 (2782) 数学 (3112) 3C硬件 (2759) 资讯 (2909) Android (4709) iOS (1850) 代码人生 (3043) 阅读 (2841)

热门文章

101
推荐
关于我们 隐私政策 免责声明 联系我们
Copyright © 2020-2025 蚁人论坛 (iYenn.com) All Rights Reserved.
Scroll to Top