数据库系统原理与实践 笔记 #7

文章目录

  • 数据库系统原理与实践 笔记 #7
  • 数据库设计和E-R模型(续)
    • 转换为关系模式
      • 具有简单属性的实体集的表示
      • 复合属性
      • 多值属性
      • 联系集的表示
      • 模式的冗余—合并
    • 实体-联系设计问题
      • 设计问题
      • 联系属性的布局
    • 扩展的E-R特性
      • 特化
      • 概化
      • 属性继承
      • 特化/概化的设计约束
      • 聚集
      • E-R图表示方法总结
      • E-R设计方案
    • UML
      • E-R图与UML类图对比
  • 关系数据库设计
    • 好的关系设计的特点
      • 设计选择1:更大的模式?
      • 设计选择2:更小的模式?
      • 有损分解
      • 无损分解的例子
    • 函数依赖
      • 函数依赖和码
      • 函数依赖是码的概化
      • 函数依赖的使用
      • 函数依赖相关术语
      • 函数依赖集的闭包
      • 函数依赖的路基蕴含
      • 函数依赖的推理规则
      • 属性闭包的应用

数据库系统原理与实践 笔记 #7

数据库设计和E-R模型(续)

转换为关系模式

  • 一个符合E-R模式的数据库可以表示为一些关系模式的集合
    • 实体集联系集都可以用表示数据库内容的统一的关系模式来表示
    • 每个实体集合联系集独有一个特有的关系模式与其对应,并分配相应的名字
    • 每个关系模式都有一些列,每个列多有唯一的名字

具有简单属性的实体集的表示

  • 从强实体集转换而来的模式与强实体集具有相同属性、主码
  • 从弱实体集转换的模式包含弱实体集的属性表示强实体集的主码
  • 该模式的主码由强实体集的主码与弱实体集的分辨符组合而成

复合属性

  • 复合属性通过为每个子属性创建单独的属性
    • 实体集instructor有复合属性name:由first_name, middle_name和last_name构成
    • 转化成关系模式后,该实体集具有name_first_name,name_middle_name和name_last_name

多值属性

  • 实体集E的多值属性M用一个独立的模式EM表示
  • 模式EM包含对应于的E主码及多值属性M的属性
  • 多值属性的每个值映射到关系模式EM的每一个独立元组
  • 不需要建立一个对应于实体集的模式,只需创建一个对应于多值属性的关系即可

联系集的表示

  • 联系集关系模式属性的选择
  • 联系集主码选择:二元联系集主码选择、多元联系集主码选择
  • 注意:需要为联系集的属性建立外码约束

模式的冗余—合并

  • 多对一和一对多的联系集的模式,如果“多”方参与是全部的,那么可以将 “多”方实体集和联系集的模式合并成单个包含两个模式所有属性并集的关系模式
  • 合并后模式加入原联系集的外码约束
  • 如果“多”方参与是部分的,也可以通过使用空值来进行模式合并。转换为关系模式时,联系集中 “一”方的相关属性应注意不能设置为not null
  • 在一对一联系的情况下,联系集的关系模式可以跟参与联系的任何一个实体集的模式进行合并
  • 一般而言,连接弱实体集与其标识强实体集之间的标识性联系集转换出的模式是冗余

实体-联系设计问题

设计问题

  • 常见错误:用一个实体集的主码作为另一个实体集的属性、将相关实体集的主码属性作为联系集的属性
    在这里插入图片描述

  • 如果注册信息还与其他实体集相联系,那么上述E-R设计更有效

  • 一般而言,通过创建一个实体集可以将非二元联系集转换为二元联系集

  • 所有的费二元联系集都可以用多个二元联系集来表示,但有时n元的联系集能够更清楚的表示几个参与的实体集之间的联系

联系属性的布局

  • 设计时将联系集的描述性属性作为联系集的属性还是实体集的属性这一选择应由映射基数约束决定

扩展的E-R特性

特化

  • 自顶向下设计过程:从初始实体集到一系列不同层次的实体子集的细化(具体化
  • 在实体集内部进行分组的过程称为特化
  • 子集中的实体在某些方面区别于实体集中的其他实体:这些子集成为了较低层的实体集,可能具有高层实体集不具有的属性、或者参与到高层实体集不参与的实体集
  • 特化通过从特化实体指向另一个实体的空心箭头来表示

概化

  • 自底向上设计过程:多个实体集根据共同具有的特征综合称一个较高层的实体集
  • 概化是高层实体集与一个或多个底层时提及间的包含关系
  • 概化是特化的逆过程,可互换使用
  • 它们在E-R图中的表示是相同的,区别在于不同的出发点和目标

属性继承

  • 属性继承—底层实体集继承了与其相关联的高层实体集的所有属性,并且继承地参与到其高层实体所参与的联系集中

特化/概化的设计约束

  • 成员资格判断约束:条件/属性定义的、用户定义的:用户将实体指派给某个实体集
  • 实体是否可以属于同一概化中的多个低层实体集的约束:不相交重叠
  • 完全性约束:定义高层实体集中的一个实体是否必须属性该概化的至少一个低层实体集:全部:每个高层实体必须属于一个低层实体集、部分:允许一些高层实体不属于任何低层实体集
  • 默认部分概化

聚集

  • 考虑我们之前看到的三元联系proj_guide,假设我们要记录某个项目中导师对学生的评价
    在这里插入图片描述

  • 为不引入冗余,用聚集来表示E-R模型,如下图所示:一个学生在一个指定的项目中由一个指定导师辅导;学生、导师、项目的组合可能有相关联的评价信息

E-R图表示方法总结

在这里插入图片描述

在这里插入图片描述

E-R设计方案

  • 实体或者属性表示一个对象
  • 实体集联系集更好地表达现实世界的概念
  • 强/弱实体集的使用
  • 概化/特化的使用—有助于模块化设计
  • 聚类的使用—将聚集实体集作为单一单元,不必考虑其内部结构

UML

  • UML(Unified Modeling Language): 统一建模语言
  • UML包含了将整个软件系统图形化的很多组件
  • UML类图与E-R图类似,仅有一些不同

E-R图与UML类图对比

在这里插入图片描述

在这里插入图片描述

关系数据库设计

好的关系设计的特点

设计选择1:更大的模式?

  • 通过E-R图转换得出一组关系模式后

  • 选择1:把一些关系模式合并为更大的关系,例如inst_dept(ID,name,salary,dept_name,building,budget)
    在这里插入图片描述

  • 如果通过E-R模型转换得出如下的两个关系模式sec_class(sec_id, building, room_number) and section(course_id, sec_id, semester, year)

  • 那么在逻辑设计中,我们可以将上述两个关系合并为如下关系:section(course_id, sec_id, semester, year, building, room_number),这样的关系模式不会产生数据冗余

设计选择2:更小的模式?

  • 如果通过E-R模型转换得出inst_dept关系模式,那么在逻辑设计中,我们可以将其分解为两个关系模式instructor(ID, name, salary, dept_name)department(dept_name, building, budget)
  • 这样可以避免(building, budget)的数据冗余
  • 可以通过如下一条规则:dept_name确定(building,budget)数据,即保持函数依赖:dept_name → \rightarrow building,budget
  • 由于dept_name在inst_dept关系中不是主码,因此需要将其拆分为更小的关系模式
  • 并不是所有的关系模式拆分都是有益的:
    • 例如,将employee(ID,name, street)分解为employee_attr1(ID, name)employee_attr2(name, street, city, salary)
  • name无法作为employee_attr2关系的主码,有可能会重名:无法通过分解出的employee_attr1employee_attr2重建(自然连接)得出原始关系
  • 我们称无法通过自然连接重建原始关系元组的分解为有损分解

有损分解

在这里插入图片描述

无损分解的例子

  • 无损分解(lossless decomposition)

  • R = ( A , B , C ) R=(A,B,C) R=(A,B,C)的分解: R 1 = ( A , B ) ,   R 2 = ( B , C ) R_1=(A,B),\ R_2=(B,C) R1=(A,B), R2=(B,C)
    在这里插入图片描述

  • r = ∏ A , B ( r ) ⋈ ∏ B , C ( r ) r = \prod_{A,B}(r)\bowtie \prod_{B,C}(r) r=A,B(r)B,C(r)

  • inst_dept分解为instructor和department关系是无损分解

函数依赖

  • 假设 r ( R ) r(R) r(R)是一个关系模式, α ⊆ R , β ⫅ R \alpha \subseteq R,\beta \subseteqq R αR,βR,模式R上的函数依赖
    α → β \alpha\rightarrow\beta αβ
  • 成立的条件是:如果对于任意关系实例r中任意两个元组 t 1 t_1 t1 t 2 t_2 t2,如果两者的属性(集) α \alpha α 的值相同,那么它们的属性(集) β \beta β 取值也相同。也就是:
    t 1 [ α ] = t 2 [ α ] ⇒ t 1 [ β ] = t 2 [ β ] t_1[\alpha] =t_2[\alpha] \Rightarrow t_1[\beta]=t_2[\beta] t1[α]=t2[α]t1[β]=t2[β]
  • α \alpha α函数确定 β \beta β β \beta β函数依赖于 α \alpha α

函数依赖和码

  • 超码:在某关系中,若一个或多个属性的集合 { A 1 , A 2 , . . . , A n } \{A_1, A_2,...,A_n\} {A1,A2,...,An}函数决定该关系中的其它全部属性,则称该关系的超码
  • 候选码:若集合 { A 1 , A 2 , . . . , A n } \{A_1, A_2, ..., A_n\} {A1,A2,...,An}任何真子集均不能函数决定该关系中的其它属性,则此时 { A 1 , A 2 , . . . , A n } \{A_1, A_2, ..., A_n\} {A1,A2,...,An}是最小的超码,即候选码
  • 外码:若关系模式R中属性或属性组X是另一个关系模式的主码,则称X是R的外码

函数依赖是码的概化

  • 函数依赖允许我们表达超码不能表达的约束,考虑下面的模式:inst_dept(ID, name, salary, dept_name, building, budget)

函数依赖的使用

  • 函数依赖在关系实例和关系模式上的体现区别:
    • 如果关系实例r咋函数依赖集F上合法,则称r满足F
    • 如果模式R上的所有合法关系实例都满足函数依赖集F,我们说F在关系模式R上成立
  • 注意:即使函数依赖并没有对关系模式 r ( R ) r(R) r(R)所有合法实例成立,这个关系模式的其中一个具体实例r可能满足函数依赖

函数依赖相关术语

  • 有些函数依赖被称为平凡(trivial) 的因为它们在所有关系中都是满足的
  • 例如:name → \rightarrow name,ID,name → \rightarrow ID
  • 通常,如果 β ⊆ α \beta \subseteq \alpha βα,那么 α → β \alpha \rightarrow \beta αβ平凡的函数依赖
  • α → β \alpha\rightarrow\beta αβ,但 β ⊈ α \beta\nsubseteq\alpha βα,则称 α → β \alpha\rightarrow\beta αβ非平凡的函数依赖
  • α → β \alpha\rightarrow\beta αβ,则称 α \alpha α为决定因素
  • 函数依赖 α → β \alpha\rightarrow\beta αβ称为部分依赖的条件是:存在 α \alpha α的真子集 γ \gamma γ,使得 γ → β \gamma\rightarrow\beta γβ

函数依赖集的闭包

  • 从给定函数依赖集f能够推导出的所有函数依赖的集合,我们称之为F集合的闭包
  • 我们用 F + F^+ F+来表示函数依赖集F的闭包

函数依赖的路基蕴含

  • 给定关系模式 r ( R ) r(R) r(R),如果 r ( R ) r(R) r(R)的每个满足F的实例也满足某个函数依赖f,则R上的函数依赖f逻辑蕴含于r上的函数依赖集F
  • 已知关系R上的函数依赖集T、F,如果对于该关系中满足F的每一个关系实例都满足T,则称函数依赖集F逻辑蕴涵函数依赖集F

函数依赖的推理规则

  • Armstrong公理
    • 如果 β ⊆ α \beta\subseteq\alpha βα,则有 α → β \alpha\rightarrow\beta αβ(自反律)
    • 如果 α → β \alpha\rightarrow\beta αβ,则有 γ α → γ β \gamma\alpha\rightarrow\gamma\beta γαγβ增补律
    • 如果 α → β \alpha\rightarrow\beta αβ β → γ \beta\rightarrow\gamma βγ,则有 α → γ \alpha\rightarrow\gamma αγ传递律
  • 附加定理:
    • 如果 α → β \alpha\rightarrow\beta αβ α → γ \alpha\rightarrow\gamma αγ,则有 α → β γ \alpha\rightarrow\beta\gamma αβγ(合并律)

    • 如果 α → β γ \alpha\rightarrow\beta\gamma αβγ,则有 α → β \alpha\rightarrow\beta αβ α → γ \alpha\rightarrow\gamma αγ(分解律)

    • 如果 α → β \alpha\rightarrow\beta αβ γ β → δ \gamma\beta\rightarrow\delta γβδ,则有 α γ → δ \alpha\gamma\rightarrow\delta αγδ伪传递律

属性闭包的应用

  • 超码的判断
  • 验证函数依赖
  • 计算F的闭包

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/118082.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

聚会娱乐喝酒游戏小程序源码系统 可开流量主 带完整的搭建教程

今天罗峰来给大家分享一款聚会娱乐喝酒游戏小程序源码系统 。在聚会娱乐活动中,喝酒游戏是一种非常受欢迎的活动方式。但是,往往由于缺乏有效的组织和规则,导致游戏的进行不够顺畅,甚至出现混乱的情况。因此,开发一款能…

Java-Hbase介绍

1.1. 概念 base 是分布式、面向列的开源数据库(其实准确的说是面向列族)。HDFS 为 Hbase 提供可靠的 底层数据存储服务,MapReduce 为 Hbase 提供高性能的计算能力,Zookeeper 为 Hbase 提供 稳定服务和 Failover 机制&#xff0c…

云计算实战项目之---学之思在线考试系统

简介: 学之思开源考试系统是一款 java vue 的前后端分离的考试系统。主要优点是开发、部署简单快捷、界面设计友好、代码结构清晰。支持web端和微信小程序,能覆盖到pc机和手机等设备。 支持多种部署方式:集成部署、前后端分离部署、docker部…

一文深入了解 CPU 的型号、代际架构与微架构

在 10 月 16 号的时候,Intel 正式发布了第 14 代的酷睿处理器。但还有很多同学看不懂这种发布会上发布的各种 CPU 参数。借着这个时机,给大家深入地讲讲 CPU 的型号规则、代际架构与微架构方面的知识。 CPU 在整个计算机硬件中、技术体系中都算是最最重…

Wpf 使用 Prism 实战开发Day04

一.菜单导航实现 1.首先创建出所有的页面(View)及对应的页面逻辑处理类(ViewModel) IndexView(首页)-----------------IndexViewModelToDoView(待办事项)------------ToDoViewModelMemoView(忘备录)--------------MemoViewModelSettingsView(设置)--------------SettingsViewMo…

防逆流系统中防逆流电表的正确安装位置-安科瑞黄安南

随着光伏行业的发展,部分地区村级变压器及工业用电变压器容量与光伏项目的装机容量处于饱和。电网公司要求对后建的光伏并网系统为不可逆流发电系统,指光伏并网系统所发生的电由本地负载消耗,多余的电不允许通过低压配电变压器向上级电网逆向…

【漏洞复现】Apache_HTTP_2.4.50_路径穿越漏洞(CVE-2021-42013)

感谢互联网提供分享知识与智慧,在法治的社会里,请遵守有关法律法规 文章目录 1.1、漏洞描述1.2、漏洞等级1.3、影响版本1.4、漏洞复现1、基础环境2、漏洞扫描3、漏洞验证方式一 curl方式二 bp抓捕 1.5、修复建议 说明内容漏洞编号CVE-2021-42013漏洞名称…

【GEE】6、在 Google 地球引擎中构建各种遥感指数

1简介 在本模块中,我们将讨论以下概念: 如何在 GEE 中重命名图像的波段。如何使用已有的遥感指数。如何使用波段数学生成自己的遥感指数。 一个田地已经灌溉的年数的卫星图像。灌溉水最可能的来源是奥加拉拉含水层。图片来自科罗拉多州霍利奥克附近。资料…

设计模式之迭代器模式

什么是迭代器模式 迭代器模式(Iterator pattern)是一种对象行为型设计模式,它提供了一种方法来顺序访问聚合对象中的元素,而又不暴露该对象的内部表示,同时也可以将迭代逻辑与聚合对象的实现分离,增强了代码…

信驰达RF-DG-52PAS CC2652P Zigbee 3.0 USB Dongle烧录指南

一、使用前准备 RF-DG-52PAS是信驰达科技基于美国 TI CC2652P和CP2102为核心设计的Zigbee 3.0 USB Dongle,可烧录 Z-Stack 3.x.0协调器固件,可以直接连接到计算机或树莓派,通过ZHA或 Zigbee2MQTT连接到 Home Assistant或其他开源物联网平台。还可以烧录…

uniapp小程序刮刮乐抽奖

使用canvas画布画出刮刮乐要被刮的图片&#xff0c;使用移动清除画布。 当前代码封装为刮刮乐的组件&#xff1b; vue代码&#xff1a; <template><view class"page" v-if"merchantInfo.cdn_static"><image class"bg" :src&q…

ElasticSearch与Lucene是什么关系?Lucene又是什么?

一. ElasticSearch 与 Lucene 的关系 Elasticsearch&#xff08;ES&#xff09;和Apache Lucene之间有密切的关系&#xff0c;可以总结如下&#xff1a; Elasticsearch构建于Lucene之上&#xff1a;Elasticsearch实际上是一个分布式的、实时的搜索和分析引擎&#xff0c;它构建…

成员变量为动态数据时不可轻易使用

问题描述 业务验收阶段&#xff0c;遇到了一个由于成员变量导致的线程问题 有一个kafka切面&#xff0c;用来处理某些功能在调用前后的发送消息&#xff0c;资产类型type是成员变量定义&#xff1b; 资产1类型推送消息是以zichan1为节点&#xff1b;资产2类型推送消息是以zi…

在现在大环境下如何回到月薪过万的软件测试工程师?

测试工程师这个岗位对于有些人来说&#xff0c;可能月薪过万很容易&#xff0c;可对于有些人来说&#xff0c;仿佛已经达到瓶颈&#xff0c;任凭工作再卖力每月也只是四五千的薪资&#xff0c;月入过万对于这些人来说就是可望不可即&#xff0c;那么这些人怎么才能冲破瓶颈&…

Docker学习——④

文章目录 1、Docker Image&#xff08;镜像&#xff09;2、镜像命令详解2.1 docker rmi2.2 docker save2.3 docker load2.4 docker image inspect2.5 docker history2.6 docker image prune 3、镜像综合实战3.1 离线镜像迁移3.2 镜像存储的压缩与共享 1、Docker Image&#xff…

Flask(Jinja2) 服务端模板注入漏洞(SSTI)

Flask&#xff08;Jinja2&#xff09; 服务端模板注入漏洞(SSTI) 参考 https://www.freebuf.com/articles/web/260504.html 验证漏洞存在 ?name{{7*7}} 回显49说明漏洞存在 vulhub给出的payload: {% for c in [].__class__.__base__.__subclasses__() %} {% if c.__name__…

UE4 Niagara Module Script 初次使用笔记

这里可以创建一个Niagara模块脚本 创建出来长这样 点击号&#xff0c;输出staticmesh&#xff0c;点击它 这样就可以拿到对应的一些模型信息 这里的RandomnTriCoord是模型的坐标信息 根据坐标信息拿到位置信息 最后的Position也是通过Map Set的号&#xff0c;选择Particles的P…

【年底不想背锅!网络工程师必收藏的排障命令大全】

网络故障排除工具是每个网络工程师的必需品。 为了提升我们的工作效率&#xff0c; 不浪费时间&#xff0c;工具的重要性显而易见 特别是每当添加新的设备或网络发生变更时&#xff0c;新的问题就会出现&#xff0c;而且很难快速确定问题出在哪里。每一位网络工程师或从事网…

【MySQL--->索引】

文章目录 [TOC](文章目录) 一、索引概念二、B树与B树1.B树的特点:2.B树的特点:3.为什么使用B树而不使用B树 三、聚簇索引和非聚簇索引四、索引操作1.创建索引2. 删除索引3.全文索引 一、索引概念 mysql的查询的过程是从文件中提取到内存中查询,MySQL启动时会在内存中维护一个b…

基于 NGram 分词,优化 Es 搜索逻辑,并深入理解了 matchPhraseQuery 与 termQuery

基于 NGram 分词&#xff0c;优化 Es 搜索逻辑&#xff0c;并深入理解了 matchPhraseQuery 与 termQuery 前言问题描述排查索引库分词&#xff08;发现问题&#xff09;如何去解决这个问题&#xff1f;IK 分词器NGram 分词器使用替换 NGram 分词器后进行测试matchPhraseQuery 查…