逻辑设计
1:将需求转化成数据库的逻辑模型
2:通过ER图的型式对逻辑模型进行展示
3:同所选用的具体的DBMS系统无关

名词解释

关系:一个关系对应通常所说的一张表
元组:表中的一行即为一个元组
属性:表中的一列即为一个属性,每一个属性都有一个名称,称为属性名
候选码:表中的某个属性组,它可以唯一确定一个元组
主码:一个关系有多个候选码,选定其中一个为主码
域:属性的取值范围
分量:元组中的一个属性值

ER图例说明

矩形:表示实体集,矩形内写实体集的名字
菱形:表示联系集
椭圆:表示实体的属性
线段:将属性连接到实体集,或将实体集连接到联系集

数据操作异常及数据冗余

插入异常:如果某实体随着另一个实体的存在而存在,即缺少某个实体时无法表示这个实体,那么这个表就存在插入异常。
更新异常:如果更改表所对应的某个实体实例的单独属性时,需要将多行更新,那么就说这个表存在更新异常。
删除异常:如果删除表的某一行来反映某实体实例,失效时导致另一个不同实体实例信息丢失,那么这个表中就存在删除异常。

注意:若一个表中存在插入异常,那它肯定存在删除异常和更新异常。

数据冗余:是指相同的数据在多个地方存在,或者说表中的某个列可以由其他列计算得到,这样就说表中存在数据冗余。

第一范式
定义:数据库表中的所有字段都是单一属性,不可再分的。这个单一属性是由基本的数据类型所构成的,如整数,浮点数,字符串等,换句话说,第一范式要求数据库中的表都是二维表。(二维表就是由行和列组成的表)

第二范式
定义:数据库的表中不存在非关键字段对任一候选关键字段的部分函数依赖。
部分函数依赖是指存在着组合关键字中的某一关键字决定非关键字的情况。
换句话说:所有单关键字的表都符合第二范式。

修改后的

存在的问题:插入异常,删除异常,更新异常,数据冗余

通俗解释
完全依赖:表中只有一个关键字(即主键),其他属性的增删改查的时候定位到这一行都是依赖此关键字的。
第二范式:只能有一个主键,不能有复合主键,可以就满足了第二范式。

由于供应商和商品之间是多对多的关系,所以只有使用商品名称和供应商名称才可以唯一标识出一件商品,也就是商品名称和供应商名称是一组组合关键字。
上表中存在以下的部分函数依赖关系
(商品名称)—>(价格,描述,重量,商品有效期)
(供应商名称)—>(供应商电话)

第三范式
定义:第三范式是在第二范式的基础上定义的,如果数据表中不存在非关键字段,对任意候选关键字段的传递函数依赖则符合第三范式。

存在问题:
(分类,分类描述)对于每一个商品都会进行记录,所以存在数据冗余,同时也会存在数据deep插入、更新及删除异常。

数据库设计三范式:
1NF:列不可分就满足1NF了。

2NF:不存在部分依赖,比如 (A,B)C。(消除非主属性对主属性的传递依赖,即完全依赖于主键)

3NF:不存在传递依赖,比如ABC。(在2NF基础上消除了传递依赖)

BC范式
定义:在第三范式的基础上,数据库表中如果不存在任何字段对任一候选关键字段的传递函数依赖则符合BC范式。也就是说如果是复合关键字,则复合关键字之间也不能存在函数依赖关系

存在下列关系因此不符合BCNF要求:
(供应商)—>(供应商联系人)
(供应商联系人)—>(供应商)
并且存在数据操作异常及数据冗余

总结
第一,二,三范式解决的是非主属性的关系。BC 范式解决的是主属性的关系;

第一范式:就是原子性,字段不可再分割,(列属性不能在细分为子列)
第二范式:就是完全依赖,没有部分依赖;【非主属性不能依赖于主键的一部分,要完全依赖于主键(主键是复合键)】
第三范式:没有传递函数依赖。【非主属性之间的依赖】
BC范式: 解决部分主键依赖于非主键部分(复合关键字之间也不能存在函数依赖关系)。

参考视频:http://www.imooc.com/learn/117

数据库设计之逻辑设计相关推荐

  1. 【数据库考试】数据库设计的四个阶段是:需求分析、概念设计、逻辑设计和物理设计

    一.选择题 (1) 在下列四个选项中,不属于基本关系运算的是(D ). A) 连接B) 投影C) 选择D) 排序 (2) 如果一个班只能有一个班长,而且一班长不能同时担任其它班的班 长,班级和班长两个 ...

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

    数据库 - 设计:逻辑设计 逻辑设计是关于将实体,关系和多值属性映射到逻辑模式中. 将公司ER模式映射到关系模式的结果. 希望你已经出现了最后一部分数据库 - 建模:实体关系图(ERD)(第5部分) ...

  3. 【数据库】概念设计、逻辑设计、关系数据库设计理论

    一:概念设计: ER模型:实体属性和联系 实体及实体集: 实体的属性:属性和实体都是名词: 需求–>ER图: 属性无法再分,实体可由多个属性组成. 同一类联系: 实体与派生实体间的基本联系: 如 ...

  4. java物理架构_Java应用架构读书笔记(1):物理设计与逻辑设计

    逻辑设计 几乎大部分帮助软件设计和架构的原则和模式主要都是关注逻辑设计.逻辑设计主要关于语言构造块,比如类,操作符,方法和包.识别一个类的方法,类之间的关系,系统包的接口等问题都是逻辑设计相关的问题. ...

  5. 数据库系统优化--业务逻辑设计优化

    当我们优化一个系统时,有时发现一种情况就是自己修改SQL,索引以及分区是不能解决性能问题的.这时你要考虑业务逻辑优化和表设计的重构.这两点的确和设计结合的很紧密.    业务逻辑优化    结合实际, ...

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

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

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

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

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

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

  9. mysql逻辑设计_一文看懂数据库设计之逻辑设计,值得收藏

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

最新文章

  1. 全国大学生智能猫竞速比赛
  2. python有哪些软件包用来考察变量之间的相关性_Python计算数据相关系数(person、Kendall、spearman)...
  3. YTKNetwork使用application json方式传递参数
  4. Linux线程——线程同步
  5. 1042 字符统计 (20分)——16行代码满分
  6. python语音分割_用7行Python代码构建自己的有声读物
  7. 怎么用js动态 设置select中的某个值为选中项
  8. 控制台怎么查看错误的详细信息_js错误处理,quot;try..catchquot;
  9. torch的model加载完怎么看_看完这篇后,别再说你不懂JVM类加载机制了~
  10. 解题报告 『占卜DIY(模拟)』
  11. centos7安装mysql教程详解(含常见问题的解决方案)
  12. 对python生成的EXE文件 进行反编译
  13. 2019,我们被“黑”科技薅过的羊毛?
  14. Microsoft Network Monitor的select network栏空白
  15. [深度学习工具]·FoolNLTK 中文处理工具包使用教程
  16. 激励视频广告 Android,激励视频广告
  17. 国产AI绘画海克斯科技——爱作画AIGC开放平台
  18. python画板——画樱花
  19. 北京等一线城市租房通鉴
  20. chrome如何添加其他搜索引擎

热门文章

  1. Android 报错:Unregister alarmreceiver to MqttServiceXXXX
  2. QDockWidget 简单的自定义标题栏
  3. 游戏本天梯_实况足球手游国服5月天梯胜率榜+极品补丁一枚
  4. NVIDIA官网页面加载慢
  5. 电子相册制作软件,还是使用 数码大师
  6. 谁说程序员不懂浪漫——我的C语言结婚请柬(附源码)
  7. HTC Vive安装详细流程
  8. first stup
  9. python基础 Networkx
  10. 想弄懂图网络为何如此强大,我们跟极验聊了聊|白洞战报