数据库 - 设计:逻辑设计

逻辑设计是关于将实体,关系和多值属性映射到逻辑模式中。

将公司ER模式映射到关系模式的结果。

希望你已经出现了最后一部分数据库 - 建模:实体关系图(ERD)(第5部分)

我们将逐步完成定义的步骤,将我们刚刚创建的概念模式(由ER模型描述)映射到逻辑模式(由关系模型描述)。

当我们描绘我们的ER图时,我们发现我们的实体之间存在某种关系,但为了更接近在数据库中实际构建它,我们需要在数据库中翻译这些关系(以及其他类似多值属性) 。

我们确定的所有关系都将通过创建新表或仅创建新列在数据库中实现,或者我们将在此处介绍其他一些选项。

那么,以下是步骤:

1.正则实体类型的映射

对于每个实体,创建一个包含其所有简单属性的表。然后,选择主键,如果它是复合键,则一组简单属性将与主键一起形成。

复合列将分解为单独的简单列。

2.弱实体类型的映射

对于每个弱实体,创建一个包含其所有简单属性的表。并且包括指向所有者实体的主键的外键,其中外键和部分键将是弱实体的主键。

一个关键字唯一标识一个弱实体对于给定的所有者实体。

3. 1:1关系类型的映射

有三种方法:

  1. 外键方法:从任一实体中选择主键,并在引用第一个主键的另一个实体中创建外键。
  2. 合并关系选项:合并两个实体,因为任何实体中的每一行在另一个实体中只有相应的行。
  3. 交叉引用或关系关系选项:创建第三个表,该表具有来自两个实体的主键的两个外键(矫枉过正!)。

4. 1:M关系类型的映射

考虑例子中,我们一直在使用,其中每个员工适用于只有一个部门,而一个部门可以有一个以上的员工。

现在,为了映射这种关系,我们在employee表(多面)中添加了一个外键,而这又指向department表的主键(1面)。

还包括许多方面的1-M关系的任何简单属性。

映射1:M关系

递归关系

不要让递归关系欺骗你!您会将其视为一个实体与另一个实体之间的任何其他关系。

在我们的示例中,我们有一个一对多的递归关系,称为员工实体与自身之间的监督

在其他情况下,您可能具有多对多递归关系或其他内容。

同样的事情在这里,只需在多方(即员工表)中添加一个外键,它指向1方的主键(也是员工表)。

映射一对多递归关系

现在,如果员工受到另一名员工的监督SUPERSSN将被分配给主管员工的ID。否则,它被赋予null。

关于外键的更多信息

  • 外键的值必须随时存在于主键中。就是这样,外键不能具有不在其引用的主键中的值。
  • 外键可以具有不同的值,并且可以不是唯一的。
  • 外键可能是主键但是,一个外键不能,两个外键可以; 复合主键。
  • 外键可能与主键具有不同的名称。
  • 外键的数据类型必须与主键的数据类型匹配。
  • 外键可能包含NULL(基于用户定义的规则)。

5.M:N关系类型的映射

这种关系的一个很好的例子是,每个员工都可以一个或多个项目上工作,每个项目都可以让一个或多个员工参与到这个项目中。所以,双方都有很多。

现在,为了映射这种关系,我们创建了一个新表,这个表只存在于连接员工和项目表。首先添加两个外键,每个外键都指向两个表之一的主键。两个外键一起构成新表的主键。

可能有一位名叫Adam的员工在项目A项目B上工作。另一位正在研究项目A的员工。但是,你不能有重复; 意思是,您不能拥有两个具有相同员工和同一项目的行。

M:N关系的简单属性

如果存在与MN关系相关的简单属性,则将它们添加到创建的新表中。例如,我们有几个小时,即每个在特定项目上工作的员工都有特定的工作时间。

6.多值属性的映射

记得?多值属性是一组不同的值。

例如,部门可能具有不同的位置,因此每个部门的位置值都不同。

因此,我们创建一个新表,其外键指向department的主键,另一列表示多值属性(一对多关系)。这是针对每个多值属性完成的。

外键和多值属性一起构成新表的主键。

如果多值属性是复合属性; 由多个属性组成。您将复合属性分解为简单属性。

7. N元关系类型的映射

“如果你有一个连接超过两个表的关系怎么办?”。它与我们在M:N关系中的解决方案几乎相同。

创建一个新表,该表具有来自所有参与实体的主键的外键,外键一起将形成新实体的主键。还包括新表中该关系的任何简单属性。


关系完整性约束

我们可以定义一些约束,它们由DBMS强制执行,以使您的数据在所有表中保持有效和有意义。有三个主要限制:

  1. 唯一键约束:唯一标识每一行的唯一列或一组列不能重复(尽管它们可能为)。
  2. 实体完整性约束:主键唯一标识每一行,不能重复,并且不能为
  3. 参照完整性约束:外键......(见上文)。

以一对多关系从M侧表中删除行,或者以多对多关系从链接表中删除行不会违反参照完整性约束。

翻译自:https://medium.com/omarelgabrys-blog/database-modeling-logical-design-part-6-af029e93cc1f

数据库 - 设计:逻辑设计相关推荐

  1. 数据库设计-逻辑设计

    数据库设计 逻辑设计: 什么是逻辑设计? 独立于具体的物理数据库之外,抽象出的数据库通用的设计模型. 逻辑设计是做什么的? 将需求分析转化为数据库的逻辑模型. 通过常用的数据库设计方法,如ER图对逻辑 ...

  2. 数据库设计-逻辑设计 1

    数据库设计 逻辑设计: 什么是逻辑设计? 独立于具体的物理数据库之外,抽象出的数据库通用的设计模型. 逻辑设计是做什么的? 将需求分析转化为数据库的逻辑模型. 通过常用的数据库设计方法,如ER图对逻辑 ...

  3. 【数据库】逻辑设计-ER模型转换为关系模型

    转载: https://blog.csdn.net/HaoDaWang/article/details/78098937?locationNum=4&fps=1 如何把ER模型转换为关系模型 ...

  4. 概念设计.逻辑设计.物理设计.的简单说明

    从项目中总结出来的如何写说明书的部分.可能有人认为这个比较浅,实际上我只是说明一个问题,就是这些说明书的概要书写思想,因为每个公司的说明书都有自己的风格. 什么是概念设计说明书 <概念设计说明书 ...

  5. 数据库的概念设计与逻辑设计

    概念设计的目的是根据需求分析的结果,将用户对数据的需求综合成一个统一的概念模型,它是整个数据库设计的关键.概念模型是现实世界和DBMS支持的数据模型之间的桥梁 1.真实准确.概念模型是对现实世界的抽象 ...

  6. 数据库的逻辑结构设计

    逻辑结构是独立于任何一种数据模型的,在实际应用中,一般所用的数据库环境已经给定(如SQL Server或Oracle或MySql).由于目前使用的数据库基本上都是关系数据库,因此首先需要将E-R图转换 ...

  7. 很多字段的数据要插入另一张表_一文看懂数据库设计之逻辑设计,值得收藏

    概述 数据库逻辑设计是从事数据库应用设计.开发.运行维护等各方面工作的一个重要的基础性工作.根据不同业务和应用需求,确定并遵循数据库逻辑设计原则,例如按照第三范式开展逻辑设计,不仅能满足减少数据冗余. ...

  8. mysql数据库业务逻辑_Mysql业务设计(逻辑设计)

    逻辑设计 数据库设计三大范式 数据库设计第一大范式 数据库表中所有的字段都只具有单一属性 单一属性的列是由基本数据类型所构成 设计出来的表都是简单的二维表 数据库设计的第二大范式 要求表中只有一个业务 ...

  9. 数据库设计_数据库设计(一)分析及逻辑设计

    ​作为一个后端开发者,数据库设计是我们避不开的课题,不管是面试的时候,还是在真实工作的情境下,我们的工作不仅仅是将代码开发出来,根据开发的项目,设计出支撑项目的数据库,也是一个合格的开发者所应该具备的 ...

最新文章

  1. 将DataTable中的数据导入到数据库中
  2. Java opengl openal_项目里用到了openal,特分享一下openal全教程
  3. main.c(53): error: #268: declaration may not appear after executable statement in block
  4. 操作系统服务:其它模块
  5. 【虹膜识别】基于matlab GUI滤波器虹膜识别【含Matlab源码 917期】
  6. 【纸牌识别】基于matlab灰度二值化纸牌识别【含Matlab源码 464期】
  7. 预测大盘最准确的指标_通达信大盘预测指标,通达信副图指标,需要写一个关于大盘每日成交量的指标高手请进啊...
  8. Android sdk 环境变量配置无效
  9. Theano入门神经网络(三)
  10. HTML5中weight属性的作用,css font-weight属性怎么用
  11. 期待可能性理论的司法适用
  12. 双非渣本,他是如何逆袭拿到3W高薪
  13. 2021国潮新消费大会落幕,新国潮产业进入“黄金十年”
  14. 淘宝商品图文详情(wdescContent)
  15. w3cschool菜鸟教程离线版chm手册正式发布
  16. 扩散模型加持下,机器人模型DALL-E-Bot可以轻松完成自主重新排列任务
  17. CSS--怪异盒子模型
  18. 东区机房浏览器问题记录排查
  19. 经纬度计算他们距离的算法(!!!!!!!!!求助啊)
  20. html5 复制到剪贴板 兼容,JS实现复制内容到剪贴板功能兼容所有浏览器(推荐)

热门文章

  1. LWIP Socket UDP接收数据无法获取IP地址信息
  2. 牛顿迭代法求一个数开方
  3. Linux 时间钟和时间同步
  4. Java实验3 第九题:梅森素数
  5. 如何用Python 看遍女神视界?美女咋越看越精神呢~(内含完整源码)
  6. 3.HAL库-STM32的OLED开发基础
  7. 给定一个整数数组和一个目标值,找出数组中和为目标值的两个数
  8. 机器学习基础-11:机器学习的分类
  9. 用PHP实现一个简单的网页计算器
  10. 浏览器中支持硬件加速