数据库杂谈(四)——关系演算和E-R数据模型

文章目录

  • 3 形式化关系查询语言
    • 3.2 关系演算和E-R数据模型
      • 3.2.1 概述
      • 3.2.2 元组关系演算
        • 3.2.2.1 概述
        • 3.2.2.2 形式化定义
        • 3.2.2.3 表达式的安全性
      • 3.2.3 域关系演算
      • 3.2.4 关于关系演算的习题
      • 3.2.5 对传统数据模型的评价
      • 3.2.6 E-R数据模型
        • 3.2.6.1 基本概念
        • 3.2.6.2 E-R图
      • 3.2.7 题型总结
        • 3.2.7.1 如何画E-R图
        • 3.2.7.2 E-R图转关系模式
      • 3.2.8 扩充E-R数据模型

3 形式化关系查询语言

3.2 关系演算和E-R数据模型

3.2.1 概述

除了用关系代数表示关系操作外,还可以用谓词演算来表达关系的操作,这称为关系演算

关系代数表示关系的操作,须标明关系操作的次序,哪个操作先哪个后你要说清楚,所以以关系代数为基础的数据库语言是过程化查询语言。用关系演算表示关系的操作,只要说明所要得到关系的结果,而不必标明操作的过程,因而他是非过程的。关系演算分为元组关系演算域关系演算

3.2.2 元组关系演算

3.2.2.1 概述

元组关系演算就是以元组为变量,一般形式是t[<属性表>]∣P(t){t[<属性表>]|P(t)}t[<>]P(t)

一般形式描述了其为使谓词P为真的元组t的集合。当我们选的不是元组,而是元组的部分属性的时候,就可以采用属性表。

利用关系演算是可以做关系代数的所有操作的。举一个例子,如果我们要查询江苏籍贯的女大学生姓名,那么我们会这么写:
t[姓名]∣t∈STUDENTANDt.性别=′女′andt.籍贯=′江苏′{t[姓名]|t∈STUDENT AND t.性别 = '女' and t.籍贯 = '江苏'} t[]tSTUDENTANDt.=andt.=
但是对于上面的查询,我们只是表达了要查找的元组是在所表达的条件之中。为了表达要查询的请求,我们需要引入数理逻辑的“存在”这一结构。记法为:∃t∈r(Q(t))\exist t∈r(Q(t))tr(Q(t))。这样的意思是表示关系r中存在元组t使谓词Q(t)为真。并且,我们在考试中很少写and和or,而是改用⋀和⋁\bigwedge和\bigvee来代替。

用上面的表达来表示上面的例子,即为:t[姓名]∣∃t∈STUDENT⋀t.性别=′女′⋀t.籍贯=′江苏′{t[姓名]|\exist t∈STUDENT \bigwedge t.性别 = '女' \bigwedge t.籍贯 = '江苏'}t[]tSTUDENTt.=t.=

那如果我们想表示学生表里不是江苏籍贯的女大学生的姓名呢?这只需要用 ┐\urcorner,即否定符号,如下:t[姓名]∣¬∃t∈STUDENT⋀t.性别=′女′⋀t.籍贯=′江苏′{t[姓名]|¬ \exist t∈STUDENT \bigwedge t.性别 = '女' \bigwedge t.籍贯 = '江苏'}t[]¬tSTUDENTt.=t.=

如果我们要表达那些是江苏所有的大学生呢?我们会发现,这里面含有一个所有的概念,为了用元组关系演算书写此查询,我们引入了∀\forall

在上面的叙述中我们发现,我们基本都是把高中课本上面的谓词全部搬上来关系演算使用。

3.2.2.2 形式化定义

结果上一小节的叙述,我们知道元组关系演算表达式具有如下形式:t∣P(t){t | P(t)}tP(t)。其中P是一个公式,公式中可以出现多个元组变量。对于没有被量词绑定的变量,我们称为自由变量。如果被量词绑定了,我们称为受限变量

对于元组关系演算的公式,其由原子组成,原子可以是如下的形式之一:

  • 如果是s∈r,那么代表s是元组变量r是关系。这是需要注意的是我们不允许使用∉∉/
  • 对于s[x]op[y],那么其中op为<,>,=,<=,>=,!=当中任意一个。

3.2.2.3 表达式的安全性

元组关系演算与关系代数具有同等表达能力,也是关系完备的。用谓词演算表示关系操作时,只有结果是有限集才有意义。也就是说,一个表达式的结果如果是有限的,我们叫做表达式是安全的。反之,我们说他是不安全的。例如{t∣t¬∈STUDENT}\{t| t ¬ ∈STUDENT\}{tt¬STUDENT},宇宙中不属于学生的东西是无限的,这个表达式是不安全的

3.2.3 域关系演算

关系演算的另一种形式为域关系演算,使用从属性域中取值的域变量,而不使用一整个元组的值。

就是关系代数是SQL语言的基础一样,域关系演算是被广泛采用的QBE语言。

域关系演算一般以域为变量,其一般形式为:<x1,x2,…,xn>∣P(x1,x2,…x(n+m)){<x1,x2,…,xn>|P(x1,x2,…x(n+m))}<x1,x2,,xn>P(x1,x2,x(n+m))

这样说我们可能有点费解。在下面,我们有完整的习题可供练习。

域关系演算也是完备的,实际上这个案例和选择操作很像。

3.2.4 关于关系演算的习题

对于1、3、5写出元组关系演算,对于2、4、6写出域关系演算。

image-20220130150227058 image-20220130150818174

image-20220202231246548

这里留给各位看官一个BUG,第5题由于我的技术可能写的不对,网上的答案也是错的。所以如果是错的可以给我来个答案,如果是对的给我个提醒哈哈。

3.2.5 对传统数据模型的评价

一般来说,我们把层次,网状和关系数据模型称为传统数据模型。对于传统数据模型来说有四个弱点:

  • 以记录为基础,不能很好地面向用户和应用

    比如衣服,有一个衣服的表,里面有个属性是衣服的袖口类型,但是在现实世界中有很多连袖口都没有的衣服,虽然有NULL可以作为填补,但是用NULL是迫不得已,并不是一种自然的表示。

  • 不能以自然的方式表示实体之间的联系。

    有些联系本来不是那种PCR关系,不是链表关系,但是我们还是要引入什么link,什么虚记录来表示这些关系,这些表示是很不自然的。

  • 语义贫乏。

    比如你定义了一个表,表里面有学生的性别、年龄、身高、体重,但是你却不知道他们本身代表什么意思,我可以说这是学生的医疗记录,也可以说这是入学信息报告。还有表与表直接的联系,由于没有标明联系,有时候用户还需要查帮助文档和一些文件才能了解。所以,由于语义不明,导致就算语义理解错了也要用户自己负责。

  • 数据类型太少,难以满足应用需要。

3.2.6 E-R数据模型

3.2.6.1 基本概念

E-R数据模型,也叫实体联系数据模型。其提出的目的如下:

  1. 企图建立一个统一的数据模型,以概括三种传统的数据模型;
  2. 作为三种传统数据模型互相转换的中间概念
  3. 作为超脱DBMS的一种概念数据模型,以比较自然的方式模拟现实世界。

在E-R数据模型中有三个概念我们需要先知道,分别是实体属性联系

实体

  • 概念:凡是可以被人互相区别的东西就叫实体。

  • 范例:飞机,春游,神,梦。

  • 注意:同类实体我们可以归为一类,称为实体集

  • 范例:用E代表学生的实体集,那么E = {e|e是学生}

属性

  • 概念:实体的特征叫实体的属性,属性取值的范围叫值集。值集的说法相当于关系数据模型里的属性域。

联系

  • 概念:实体之间(也包括和实体集)的各种关系我们称之为联系。

  • 范例:某个学生(实体)和课程(实体)之间有选课关系。学生(实体集)和课程之间的选课关系。人与人直接有领导关系,夫妻关系。

  • 表示方法:如果实体e1,实体e2之间有联系,我们用<e1,e2>来表示,扩展到n个实体,我们用<e1,e2…,en>来表示,当n>2的时候,我们称为多元联系。

联系集

概念:比如说夫妻是一种联系,那么具体的比如:<e1,e2>两个人就是这个联系的实例,生活中是夫妻的不止一对,所以多个实例我们用集合包括起来,称为联系集。

有时为了表明实体在联系中的作用,我们会这么表示,以夫妻为例:

<r1/e1,r2/e2,…,rn/en><r1/e1,r2/e2,…,rn/en> <r1/e1,r2/e2,rn/en>
其中r表示哪个是夫,哪个是妻。

说明:联系虽然用元组表示,但实体间的次序不是重要的,尤其标明作用后,他们的次序可以任意。

3.2.6.2 E-R图

用E-R数据模型对一个单位的模拟,称为一个单位的E-R数据模式。E-R数据模式可以用非常直观地E-R图来表示。

image-20211002153926103

其中矩形框代表实体,菱形代表联系,椭圆代表属性。

需要注意的是,上述的表示实际上是不完整的,但是在大学考试以及考研中只要求用上述表述即可。

其他表示:

  • 未分割的矩形代表联系集的属性
  • 虚线将联系集属性连接到联系集
  • 双线显示实体在联系集中的参与度
  • 双菱形表示弱实体集

image-20220203115430184

对于E-R图来说有两个约束:基数比约束参与度约束。它们两个合称联系约束

基数比约束

比如联系有1:1,1:N,N:1,M:N。我们把这个数量上实体间的约束称为基数比约束。基数比约束在数据库原书上也被称为映射基数

范例:一个员工只能在一个工作部门工作,这就是1:1。

参与度约束

比如这个银行卡账号你最多只能取钱5次,比如这门课最多容纳学生150人,这就是参与度约束。

表达方式:(min,max)

3.2.7 题型总结

3.2.7.1 如何画E-R图

步骤总结:

  1. 找出实体并用矩形表示
  2. 找出实体的属性用椭圆表示
  3. 找出实体间的关系,用菱形表示

image-20211230212433335

image-20211230220040718


3.2.7.2 E-R图转关系模式

步骤总结:

  1. 实体转换为一个关系模式

  2. 实体的属性就是关系的属性,实体的码就是关系的码

  3. 实体间联系的转换

    • 1:1联系:在任意一方加入对方的主码变为外码,并加入联系本身的属性。

    • 1:n联系:将1方的主键加入n方作为其外键,并同时将联系的属性也加入n方。

    • m:n联系:将联系本身本身转化为一个关系模式,联系双方的主码加入其中,并将联系的属性加入其中。

image-20211230212450984

image-20220202231534255

3.2.8 扩充E-R数据模型

扩充E-R数据模型我们通常称为EER,在EER引入以下的几个概念:弱实体、特殊化和普遍化、聚集、范畴。

弱实体(Weak entity)

弱实体实际上可以当成实体,可以当成属性,由数据库库设计者决定。

范例:比如一个职工,他的家属实体集可能有姓名,出生日期,和职工的关系这些属性,但是家属的姓名是可以重复的。什么意思呢,简而言之就是家属实体集中的表没有键(没有实体键),导致失去了辨认家属的能力了,所以一般来说弱实体可以不做实体,只当做拥有这个实体集的那个实体(所有者实体)的组合属性。

特殊化和普遍化(Specialization and Generalization)

范例:从普遍到特殊叫特殊化,在一些书上也叫做特化;如学生是普遍,划分为研究生高中生本科生是特殊,研究生还可以继续划分为学术型研究生和专业性研究生。反之叫普遍化,在一些书上叫做概化

聚集(Aggregation)

就是把实体集和联系看成新的一个实体集,新的实体集中的属性是原来实体集的属性和联系的属性的并。

image-20211007134053250

范畴(Category)

在模拟现实世界时,有时候要用到不同类型的实体组成的实体集。我们把这类实体集叫做范畴。

  • 范例:车主有可能是一个人,有可能是一个企业的单位。

  • 表达方式:T(E1,E2,E3,…,En)

  • 说明:其中里面的不同的实体集我们叫做超实体集,例如E1是超实体集。

  • 图例:圆圈∪代表并操作。

image-20211007134142274

这里有一点需要说明一下,我们前面说过特殊化,特殊化也就是一个子类对于父类的继承,并且继承了所有的属性,但是范畴不一样。拿这个例子来说,单位和人构成范畴,但是这个账户不是说既是单位又是人的,他的继承具有选择性,如果账户是单位的,则继承单位的属性,是个人的继承个人的属性,这叫选择性继承

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

小程序获取微信用户绑定的手机号

小程序API内提供getPhoneNumber借口来获取用户已经绑定到微信的手机号,但需要用户主动触发才能发起获取手机号接口&#xff0c;所以该功能不由 API 来调用; 基本流程如下: 使用方法 需要将 <button> 组件 open-type 的值设置为 getPhoneNumber&#xff0c;当用户点击并同…

华为正式发布鸿蒙多久可以用,华为正式发布鸿蒙OS,手机随时能用

8月9日下午&#xff0c;华为在松山湖召开了HDC2019开发者大会&#xff0c;而在此次大会上华为正式发布了传说中的华为鸿蒙系统&#xff0c;也就是Harmony OS。鸿蒙系统它是一个基于微内核的全新全长近分布式的操作系统&#xff0c;它不仅仅局限于某一个设备使用而是可以在其智慧…

WCF rest 的帮助页面和缓存机制

打开vs2010 在工具选项中选择扩展管理器——联机库 安装WCF REST Service Template 40(CS)模板 安装后新建wcf服务应用程序&#xff0c;删除默认建立的文件。 新建RestWcf4HelpPage.svc&#xff0c;代码如下 using System; using System.Collections.Generic; using System.Lin…

数据结构杂谈番外篇——时间复杂度计算

我们先给出推导的方法&#xff0c;然后下面一步一步来推导。 推导大O阶 用常数1取代运行时间中的所有加法常数在修改后的运行次数函数中&#xff0c;只保留最高阶项如果最高阶存在且不是1&#xff0c;则去除这个项相乘的常数所得结果即为大O阶 示例 int sum 0&#xff0c;…

Java学习笔记(二):String

String 在Java中String是作为引用对象存在的一种数据类型&#xff0c;用来保存字符串。 实例化和赋值 //直接声明 String s1 "Hello world!"; //通过构造函数创建, 提供了 11 种不同参数创建的方法 char[] c { h, e, l, l, o, .}; String s2 new String(c); Strin…

数据结构杂谈(一)

在你点进来这里的一瞬间&#xff0c;欢迎你找到了宝藏 这是一些关于数据结构和算法里最详细的阐述和学习心得&#xff0c;我十分乐意和你分享这些知识。 如果你已经看完这篇杂谈&#xff0c;可以前往下一篇→数据结构杂谈&#xff08;二&#xff09;_尘鱼好美的小屋-CSDN博客 1…

计算器排html页面,htmltest~计算器界面的实现

通过divcss和部分布局的作用&#xff0c;实现了&#xff0c;如下效果的计算器展示页面![C%]R$IGDK4J(%3LJXD3]SY.png&#xff0c;废话不多说&#xff0c;最主要的还是分享代码&#xff1a;html&#xff1a;Title.计算器-口 X编辑(E)查看(V)帮助(H)BackspaceCECMC789/sqrtMR456*…

win7 git 添加 ssh key

分两步走&#xff0c;借助git bash客户端&#xff1a;第一步&#xff1a;生成秘钥创建SSH key. 在用户主目录下&#xff0c; 看看有没有.ssh目录&#xff0c; 如果有&#xff0c; 再看看这个目录下有没有id_rsa 和 id_rsa.pub 这两个文件&#xff0c; 如果已经有了&#xff0c;…

解决三星手机EditText背景色的问题

问题描述android:background"#ffffff"其他手机手机背景都是白色&#xff0c;三星却是黑色的。怎么办 解决方案1写个主题测试下 解决方案2检查是三星的手机换背景色解决方案3你自己设置下edittext的背景就好了 解决方案4三星手机没这bug&#xff0c;你的固件不是正常的…

操作系统随笔(二)

如果你还没有读过第一篇随笔&#xff0c;请点击这里→操作系统随笔&#xff08;一&#xff09; 文章目录[toc]2 进程和线程2.1 进程2.1.1 进程模型2.1.2 进程的创建2.1.3 进程的终止2.1.4 进程的层次结构2.1.5 进程的状态2.1.6 进程的实现2.2 线程2.2.1 进程的使用2.2.2 经典的…

golang实现常用数据结构

2019独角兽企业重金招聘Python工程师标准>>> 1.数组栈的实现 package mainimport ( "fmt")type ItemType inttype Stack struct { node [10]ItemType maxsize int top int}func StackInit(p *Stack) { p.top -1}func StackCheckFull(p *Stack) bo…

【问题解决】无法创建新的堆栈防护页面

【问题发现】 项目中需要几个自定义的控件,菜鸟D定义了一个接口,打算使用多态来统一调用。在完成两个自定义控件后&#xff0c;项目都能正常运行。但是在第三个控件使用的时候就出了问题&#xff1a;将控件拖到界面上以后&#xff0c;不能拖动改变控件的宽度&#xff0c;一拖动…

java及python调用RabbitMQ

1,python调用MQ发送消息(生产者),话不多说,直接上干货 import pika 如下图 2.java调用MQ发送消息(生产者) 具体代码如下: python 的代码如下 connection pika.BlockingConnection(pika.ConnectionParameters(IP,端口,/))channel connection.channel()msg_props pika.Bas…

html知识收集(一)

1.页内跳转iframe <ul> <li><a href"1.html" target"iframe1">1</a></li> <li><a href"2.html" target"iframe1">2</a></li> </ul> </ul> <iframe name"i…

设定Word段落的背景色

段落背景不同于文字区别。很多新接触word的朋友都找不到怎么弄。 先把光标停留在需要设置的段落文字上&#xff0c;或者选择需要设置的段落文字。 点击段落里的边框和底纹&#xff0c;如图 在弹出框中选择底纹。 选择需要填充的颜色&#xff0c;在左下角处把文字切换成段落。…

Hadoop随笔(二)

文章目录[toc]2 Hadoop概念2.1 Hadoop简介2.2 MapReduce编程模型简介2.3 Hadoop系统的组成2 Hadoop概念 面对大数据量的处理需求&#xff0c;一个常用的方法就是把它们分割成互不依赖的小份数据来分别计算处理&#xff0c;这就是所谓的单指令多数据流(SIMD)的数据计算模式。Ha…

HDU 5102 The K-th Distance

题意&#xff1a;给你n-1条边&#xff0c;然后没两个节点的距离按照递增的顺序&#xff0c;求出前k项的和。 官方题解&#xff1a; 把所有边(u,v) 以及(v,u)放入一个队列&#xff0c;队列每弹出一个元素(u,v)&#xff0c;对于所有与u相邻的点w&#xff0c;如果w!v&#xff0c;就…

spring AOP 之五:Spring MVC通过AOP切面编程来拦截controller

示例1&#xff1a;通过包路径及类名规则为应用增加切面 该示例是通过拦截所有com.dxz.web.aop包下的以Controller结尾的所有类的所有方法&#xff0c;在方法执行前后打印和记录日志到数据库。 新建一个springboot项目 1&#xff1a;首先定义maven <?xml version"1.0&q…

数据结构杂谈(二)

本文的所有代码均由C编写 如果你已经看完这篇杂谈&#xff0c;可以前往下一篇→数据结构杂谈&#xff08;三&#xff09;_尘鱼好美的小屋-CSDN博客 文章目录2 顺序表2.1 线性表的类型定义2.2 类C语言有关操作补充2.2.1 ElemType的解释2.2.2 数组定义2.2.3 建立链表可能会用到的…

2月份Web服务器份额:排名不变 仅Microsoft份额上扬

IDC评述网&#xff08;idcps.com&#xff09;02月29日报道&#xff1a;近日&#xff0c;Netcraft公布了全球Web服务器最新数据。根据显示&#xff0c;2016年2月&#xff0c;Netcraft收到调查的网站共计933,892,520家&#xff0c;相比上月增加3%。在全球主流Web服务器市场上&…