前面的两篇博客分别介绍了概念数据模型、逻辑数据模型以及物理数据模型和逻辑数据模型经常使用的三种数据模型,这篇博客介绍在数据库的设计过程中将概念数据模型转化为逻辑数据模型的方法,以及涉及的一些基本的概念。本篇文章所介绍的主要是针对关系数据库中概念数据模型和逻辑数据模型之间的转换。

  一、码

  首先,说明一下数据库中经常用到的用于标示一条记录(元组)的的码的概念,码又分为超码、候选码、主码。

  超码:在一个关系中,可以用来唯一标识一个元组的属性的集合称之为超码。

  候选码:在一个关系中,能够用来唯一标识一个元组的最少属性集合称之为候选码。

  主码:在一个关系中,如果用来唯一标识一个元组的候选码中只有一个属性,则这个属性称之为主码。

  三者之间的关系如下:超码是候选码的超集,候选码是主码的超集。下面以一个讲解清楚。假设一个关于学生信息的表格student,其中的属性有,stu_id(学号),name(姓名),age(年龄),address(地址)。那么超码可以由所有的属性组成的集合构成,例如(stu_id,name,age,adress)、(stu_id,name)、(stu_id,age)等都可以叫做student的超码;候选码为(stu_id);因为候选码只是由其中的一个属性组成,因此这个候选码又可以称之为主码。

  二、概念数据模型到逻辑数据模型的转化(以关系数据模型为例)

  前面博文讨论过,概念数据模型是用E-R图表示的,其中的三要素是实体、属性、联系。将概念数据模型转化为逻辑数据模型的步骤其实就是将E-R图中的各个部分转化为逻辑数据模型中使用的具体数据模型的各个部分。如果没有特别的交代,下面所说的逻辑数据模型指代的是关系数据模型。将概念数据模型转化为逻辑数据模型的大体规则如下:概念数据模型中的实体转化为逻辑数据模型中的关系,对应的实体的属性转化为关系数据模型关系的属性(也就是列);根据实体之间联系的不同具有不同的处置策略。

  实体之间的联系分为1:1、1:n、和m:n。下面分别对这三种联系转化为关系的步骤做讨论。

  1:1:这种关系是最好理解,同时也是最容易处理的关系。实体之间存在着一一对应的关系。在这种联系中,可以创建新的关系描述这种联系,这事将两个实体的主码作为新的关系的候选码;当然也可以不必创建新的关系,将一方关系的主码作为另一方关系的外键。例如两个关系A和B存在1:1联系,那么可以将A的主码作为B的外键,同时将B的主码作为A的外键,具体情况依据于具体的环境。以所做的红包的小练习为例,注册用户和账户之间存在着1:1的联系,用户管理者账户。E-R图如下:

图 1 用户与账户的E-R图

  用户与账户之间存在一一对应关系,但是创建账户的时候需要用户已经存在,因此这种情况下需要将用户的"uid"作为账户的外键,那么对应的关系如下:

图 2 用户和账户的关系

  因为,在这个例子中额外的创建关系会导致不必要的额外存储空间的增加,因此不再重新创建额外的关系。

  1:n:一个实体可以对应额外的多个实体。这种联系中可以不必创建额外的关系表示二者之间的1:n的联系,此时只需要将“1”方的关系的主码放入到“n”方的关系的属性中作为其外键即可,同时将联系的属性加入到“n”方的关系中;当然也可以创建额外的关系表示二者之间的联系,那么“1”和“n”方的关系的主码作为候选码,同时将联系的属性加入到新建立的关系中。但是,这种情况下额外的创建新的关系显得冗余。还是以所练习的红包项目为例,一个大的红包根据指定的数值可以派生出很多的小红包。这两个实体分别对应着一个关系,其E-R图如下:

图 3 小红包的大红包的E-R图

  由图3得知,小红包必须依赖大红包存在,因此在小红包中将大红包的bid作为小红包的外键即可,这样就不必建立额外的关系了。对应的关系如下:

  

图 4 大红包和小红包对应的关系

  m:n:对于这种多对多的联系,必须建立新的关系以描述这种联系。“联系”对应的关系的属性中至少包含他说关联的双方实体的“主键”,若联系也有自身的属性,那么该属性一样纳入新建立的关系的属性中。由于红包项目中没有遇到类似的联系,因此以最经典的学生选课系统为例。很明显学生选课系统中的实体对应有学生和课程,一个学生可以选修多门课程,一门可能可被多个学生选修,因此两个实体之间是一种多对多的关系,对应的E-R图如下:

图 5 学生与课程多对多关系图

图 6 学生与课程对应关系

  在上例中,学生与课程之间存在着多对多的联系,因此建立起新的选课关系来描述这种联系。在新的关系中将学生的主码和课程的主码作为选课的候选码,学生的主码和选课的主码的组合会出现在对应的选课关系中。如果此时要查询一个学生的成绩,需要使用联合查询的方式。

概念数据模型到逻辑数据模型的转化相关推荐

  1. 【数据架构】概念数据模型和逻辑数据模型有什么区别

    概念数据模型和逻辑数据模型的主要区别在于,概念数据模型表示实体及其关系,而逻辑数据模型除了提供实体和关系之外,还提供了更多的细节,包括属性.主键和外键. 通常,数据建模是创建可用数据的数据模型的过程. ...

  2. [GIS笔记] 模型篇-数据模型、空间数据模型、GIS数据模型、逻辑数据模型的种类

    文章目录 模型篇 数据模型.空间数据模型.GIS数据模型 数据模型(逻辑数据模型)的种类 模型篇 数据模型.空间数据模型.GIS数据模型 数据模型 说明 是什么 为了将复杂的地理事物和现象重载到计算机 ...

  3. 数据模型:概念数据模型,逻辑数据模型,物理数据模型

    数据模型所描述的内容包括三个部分:数据结构.数据操作.数据约束. 1)数据结构:数据模型中的数据结构主要描述数据的类型.内容.性质以及数据间的联系等.数据结构是数据模型的基础,数据操作和约束都建立在数 ...

  4. 概念数据模型,逻辑数据模型,物理数据模型

    概念数据模型设计与逻辑数据模型设计.物理数据模型设计是数据库及数据仓库模型设计的三个主要步骤. 在数据仓库领域有一个概念叫conceptual data model,中文一般翻译为"概念数据 ...

  5. Libra教程之:Libra protocol的逻辑数据模型

    文章目录 Libra protocol简介 逻辑数据模型 账本状态 交易 账本历史 Libra protocol简介 Libra区块链本质上是一个加密数据库,这个数据库是通过Libra protoco ...

  6. 逻辑数据模型之层次数据模型、网状数据模型和关系数据模型

    上一篇文章简单介绍了概念数据模型.逻辑数据模型.物理数据模型的基本概念.特性以及三者所对应的数据库的开发阶段.现在针对逻辑数据模型中所用到的三种数据模型---层次数据模型.网状数据模型以及关系数据模型 ...

  7. 《数据库技术原理与应用教程(第2版)》——第3章 数据管理中的数据模型 3.1 数据模型的基本概念...

    本节书摘来自华章计算机<数据库技术原理与应用教程(第2版)>一书中的第3章,第3.1节,作者 徐洁磐 操凤萍,更多章节内容可以访问云栖社区"华章计算机"公众号查看. 第 ...

  8. 数据模型,数据模型概述,数据模型基本概念

    数据模型 数据模型是对现实世界数据特征的抽象,用来描述.组织.操作数据,通俗来讲是对现实世界的模拟 数据模型是数据库系统的核心和基础 为了把现实世界中的具体事物抽象﹑组织为某一数据库管理系统支持的数据 ...

  9. mysql数据模型三要素_2.3.1 逻辑数据模型概述

    2.3  逻辑数据模型 2.3.1  逻辑数据模型概述 1. 数据模型的三要素 逻辑数据模型(Logic Data Model)又称为结构数据模型(Structure Data Model).逻辑数据 ...

  10. FS-LDM第一讲-----金融业务逻辑数据模型

    文章内容来自于NCR数据仓库事业部 背景: 逻辑数据模型(Logical Data Model)是一种图形的展示方式,采用面向主题的方法.按照3NF的规则有效组织来源多样的各种业务数据 ,同时采集成了 ...

最新文章

  1. Linux 最常用命令整理,建议收藏!
  2. 看到一个词语提取小工具,分享给有标签、词库需求的同学们
  3. python中uss的用法_使用不同内存ussag管理Python多进程进程进程
  4. 我对“POST和GET的区别”的理解
  5. 【C++深度剖析教程9】初探C++标准库
  6. 为什么网格布局不显示java_java – 在GridLayout中不显示组件的FlowLayout?
  7. 给刚入行的存储工程师10+1点建议
  8. Gartner发布2011十大关键技术
  9. python3----字典
  10. java.sql.SQLException: Access denied for user 'root'@'localhost'
  11. 禁用Chrome Frame
  12. 浏览器解析jsx_jsx的本质
  13. 上帝视角-我是一个线程『转』
  14. 玩转WSL 2(一)——WSL的介绍和安装
  15. pikachu~~~验证码绕过(on client on server)
  16. 我们正在努力; 具备人工智能的测试机器人
  17. 六月份阶段性大总结之Doris/Clickhouse/Hudi一网打尽
  18. 设置什么加快计算机启动速度,如何设置CPU加速对电脑启动速度的方法(更改CPU数量可开机提速)...
  19. 前端项目中常用的工具包(拖拽排序表格、打印导出表格、文本复制等)【持续更新~~~】
  20. 如何在JavaScript中对对象数组进行排序

热门文章

  1. 计算机键盘中英文,电脑键盘指法练习(英文+数字)
  2. Excel 批量增加行高,解决打印表格部分行显示不全的问题
  3. 安装GitExtentions KDiff3已配置为合并工具,kdiff3的路径未配置
  4. ubuntu安装nginx详细步骤
  5. 企业微信客户端web页面调试
  6. 谷歌 Chrome 浏览器 隐藏标题 缩小标签页
  7. python图片换脸_无需PS,200 行 Python 代码实现简单图片人像识别换脸
  8. 王道机考系列——数学问题
  9. 钱晓捷第五版习题4 题4.8 bufx bufy bufz 为三个有符号十六进制数编写一个比较相等关系的程序如果这三个数都不相等则显示0,其中两个相等显示1 ,三个都相等则显示2
  10. Https所涉及名词及相关后缀名解释