热门标签 | HotTags
当前位置:  开发笔记 > 数据库 > 正文

数据库设计概念结构设计(概念模型、E—R模型、概念结构设计)

概念模型将需求分析得到的用户需求抽象为信息结构(即概念模型)的过程就是概念结构设计。特点:能真实、充分地反映现实世界,

概念模型

将需求分析得到的用户需求抽象为信息结构(即概念模型)的过程就是概念结构设计。

特点:


  1. 能真实、充分地反映现实世界,是现实世界的一个真实模型。
  2. 易于理解,从而可以用它和不熟悉计算机的用户交换意见。
  3. 易于更改,当应用环境和应用要求改变时,容易对概念模型修改和扩充。
  4. 易于向关系、网状、层次等各种数据模型转换

E-R模型

E-R图提供了表示实体型、属性和联系的方法

实体型:用矩形表示,矩形框内写明实体名。

属性:用椭圆形表示,并用无向边将其与相应的实体型连接起来。

联系:用菱形表示,菱形框内写明联系名,并用无向边分别与有关实体型连接起来,同时在无向边旁标上联系的类型(1∶1,1∶n或m∶n)。(联系可以具有属性)。

                                           

两实体型之间的联系可以分为:


  • ①一对一联系(1∶1)

如果对于实体集A中的每一个实体,实体集B中至多有一个(也可以没有)实体与之联系,反之亦然,则称实体集A与实体集B具有一对一联系,记为1∶1。


  • ②一对多联系(1∶n)

如果对于实体集A中的每一个实体,实体集B中有n个实体(n≥0)与之联系,反之,对于实体集B中的每一个实体,实体集A中至多只有一个实体与之联系,则称实体集A与实体集B有一对多联系,记为1∶n。


  • ③多对多联系(m∶n)

如果对于实体集A中的每一个实体,实体集B中有n个实体(n≥0)与之联系,反之,对于实体集B中的每一个实体,实体集A中也有m个实体(m≥0)与之联系,则称实体集A与实体集B具有多对多联系,记为m∶n。

    两个实体的联系示意图:

            

三个实体联系示意图:

                    

单个实体型内的联系示意图:

                                             

联系的度:参与联系的实体型的数目


  • 2个实体型之间的联系度为2,也称为二元联系;
  • 3个实体型之间的联系度为3,称为三元联系;
  • N个实体型之间的联系度为N,也称为N元联系

 

eg:某个工厂物资管理的概念模型。物资管理涉及的实体及属性有:


  • 仓库属性有:仓库号、面积、电话号码
  • 零件属性有:零件号、名称、规格、单价、描述
  • 供应商属性有:供应商号、姓名、地址、电话号码、账号
  • 项目属性有:项目号、预算、开工日期
  • 职工属性有:职工号、姓名、年龄、职称

实体之间的联系有:


  1.  一个仓库可以存放多种零件,一种零件可以存放在多个仓库中,因此仓库和零件具有多对多的联系。用库存量来表示某种零件在某个仓库中的数量。
  2. 一个仓库有多个职工当仓库保管员,一个职工只能在一个仓库工作,因此仓库和职工之间是一对多的联系。
  3. 职工之间具有领导与被领导关系。即仓库主任领导若干保管员,因此职工实体型中具有一对多的联系。
  4. 供应商、项目和零件三者之间具有多对多的联系。即一个供应商可以供给若干项目多种零件,每个项目可以使用不同供应商供应的零件,每种零件可由不同供应商供给。

 

                         

 

         

 


概念结构设计

为了简化E-R图的处置,现实世界的事物能作为属性对待的,尽量作为属性对待。

原则:


  1. 作为属性,不能再具有需要描述的性质。属性必须是不可分的数据项,不能包含其他属性。  
  2. 属性不能与其他实体具有联系,即E-R图中所表示的联系是实体之间的联系。

例子:在医院中,一个病人只能住在一个病房,病房号可以作为病人实体的一个属性;    

如果病房还要与医生实体发生联系,即一个医生负责几个病房的病人的医疗工作,则根据准则(2) 病房应作为一个实体。

        


分E-R图的集成

分E-R图的集成一般需要分两步  


  1. 合并。解决各分E-R图之间的冲突,将分E-R图合并起来生成初步E-R图。  
  2. 修改和重构。消除不必要的冗余,生成基本E-R图。

                            


消除冲突

E-R图之间的冲突主要有三类:


  • 属性冲突

属性域冲突,即属性值的类型、取值范围或取值集合不同。


  • 命名冲突

  1. 同名异义,即不同意义的对象在不同的局部应用中具有相同的名字。
  2. 异名同义(一义多名),即同一意义的对象在不同的局部应用中具有不同的名字。

  • 结构冲突

  1. 同一对象在不同应用中具有不同的抽象。
  2. 同一实体在不同分E-R图中所包含的属性个数和属性排列次序不完全相同。
  3. 实体间的联系在不同的E-R图中为不同的类型。

消除不必要的冗余


  • 所谓冗余的数据是指可由基本数据导出的数据,冗余的联系是指可由其他联系导出的联系。
  • 消除冗余主要采用分析方法,即以数据字典和数据流图为依据,根据数据字典中关于数据项之间逻辑关系的说明来消除冗余。
  • 并不是所有的冗余数据与冗余联系都必须加以消除,有时为了提高效率,不得不以冗余信息作为代价。

 


推荐阅读
  • 本文讨论了在处理分页数据时常见的低级错误,并提供了优化后的代码示例,以减少重复代码并提高可读性和维护性。 ... [详细]
  • 本题要求根据给定的正整数数组,通过合理排列各元素顺序,生成并输出所有可能组合中的最小值。例如,对于数组{3, 32, 321},正确的输出应为321323。 ... [详细]
  • 使用EF Core在.Net Core控制台应用中操作SQLite数据库
    本文介绍如何利用Visual Studio 2019和Windows 10环境,通过Entity Framework Core(EF Core)实现对SQLite数据库的读写操作。项目源代码可从百度网盘下载。 ... [详细]
  • PHP 实现实时汇率查询接口
    本文介绍如何使用PHP构建一个实时汇率查询接口,解决网站因数据源限制而无法获取最新汇率的问题。文章将详细讲解从选择合适的数据源到实现接口的具体步骤。 ... [详细]
  • APOC 函数详解:路径查询方法
    本文将深入探讨 APOC 库中的路径查询功能,特别是如何利用 `apoc.path.expand` 函数实现灵活的路径查询,包括动态设置最大路径长度等高级特性。 ... [详细]
  • 成为一名高效的Java架构师不仅需要掌握高级Java编程技巧,还需深入理解JVM的工作原理及其优化方法。此外,对池技术(包括对象池、连接池和线程池)的应用、多线程处理、集合对象的内部机制、以及常用的数据结构和算法的精通也是必不可少的。同时,熟悉Linux操作系统、TCP/IP协议栈、HTTP协议等基础知识,对于构建高效稳定的系统同样重要。 ... [详细]
  • 本文介绍了如何使用PHP进行SQL Server 2010数据库的分页查询,包括设置每页显示的记录数和当前页码,并通过SQL语句实现数据的分页展示。 ... [详细]
  • 本文旨在为初学者提供一个详细的指南,从零开始学习如何使用 ASP.NET MVC5 和 Entity Framework 6 (EF6) 搭建项目。通过逐步指导,帮助读者理解 MVC 架构的核心概念,并掌握基本的操作方法。 ... [详细]
  • 科研创新不仅需要深厚的专业知识,还需要独特的视角和敏锐的问题发现能力。本文将探讨如何通过基础学习、问题导向、文献查阅、网络资源利用及自然观察等方法,有效找到科研创新的切入点。 ... [详细]
  • 本文提供最新的CUUG OCP 071考试题库,包含70道题目,旨在帮助考生更好地准备Oracle Certified Professional (OCP) 考试。 ... [详细]
  • 解析 HTTP 头 'Vary: Accept-Encoding' 的作用与重要性
    本文详细探讨了 'Vary: Accept-Encoding' HTTP 头的作用,即指导缓存系统(如代理服务器和 CDN)根据不同的编码需求存储和提供适当的资源版本,确保不同类型的客户端能够接收到适合自己的内容。 ... [详细]
  • 本文探讨了Lua中元表和元方法的使用,通过具体的代码示例展示了如何利用这些特性来实现类似C语言中的运算符重载功能。 ... [详细]
  • 拖拉切割直线 ... [详细]
  • 四月个人任务:Linux基础操作与网络管理
    本文介绍了两项主要任务:编写一个脚本来检测192.168.1.0/24子网中当前在线的IP地址,以及如何在Linux系统中挂载Windows网络共享目录。通过具体步骤和代码示例,帮助读者理解和掌握相关技能。 ... [详细]
  • 本文面向非计算机专业背景的编程爱好者,介绍如何仅使用基础的C语言知识——二维数组和结构体,无需掌握复杂的数据结构如链表,即可编写一款经典的贪食蛇游戏。通过本教程,您将了解游戏开发的基本原理和实现方法。 ... [详细]
author-avatar
我们每次都聊撸
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有