关系表的构成要素主键_关系模型简述

2023-11-05

关系模型简述

关系模型是基于表的处理方式抽象形成的。是在对传统表及其操作进行数学化严格定义基础上,引入集合理论与逻辑学理论提出的。

关系模型也是数据库的三大经典数据模型之一,也是现在大多数商品化数据库系统所仍然再用的数据模型。数据库标准语言也是基于关系型数据库的。

形象地来说,一个关系(relation)就是一个Table。关系模型就是处理Table的,他由三个部分组成:

  • 描述DB各种数据库的基本结构形式
  • 描述Table与Table之间所可能发生的各种操作(关系运算)
  • 描述这些操作所应遵循的约束条件(完整性约束)

研究关系模型就是研究如何描述Table,研究Table的操作的含义与结果、研究Table的各种约束。

其实关系并不等同于Table,关系是一个数学概念,是一种集合。而Table是我们实际生活中的一个抽象,是一个实例。集合是不允许重复的,但是在实际生活中可能会出现两组完全一样的数据。

关系模型的三要素

基本结构

基本操作

  • 集合运算符:∪:并(Union);∩:交(Intersection);—:差(Difference);×:广义积(ProDuct);
  • 关系运算符:σ:选择(Selection);π:投影(Projection);⋈:连接(join);÷:除运算(Divsion);

完整性约束

实体完整性、参照完整性、用户自定义完整性

关系模型和关系数据库语言的关系

关系代数

元组演算

域演算

数学描述->用户使用的语言->开发软件

什么是关系?

严格定义一个表,我们先说明一些有关关系的重要概念

域(Domain)

域(Domain)是数据库中列可能取的值的集合,例如性别的域就是{男,女},课程的域是{数据库系统,离散数学,Java程序设计语言,….}。

笛卡尔积

笛卡尔积(Cartesian product)是元组及所有可能组合成的元组。从n个域中中可以取得所有的情况的集合就是笛卡尔积。

例如下面有两个域:

R1 = {小明,小红,小强}
R2 = {男, 女}

那么笛卡尔积就是

D = R1×R2。也就是下面这组元组

D = {(小明,男),(小明,女),
  (小红,男), (小红,女), 
  (小强,男), (小强,女)}

容易看出来,笛卡尔积就是各个域中所有元素能够组成的元组的集合。

我们假设一个表中有三个域,每个域含有1000个元素。那么它们的笛卡尔积所组成的新集合会达到十亿个元素,实际应用中,这种集合是没有研究价值的。为了能够集合能够被研究,我们引入了关系的概念。

关系

一组域的笛卡尔积的子集。笛卡尔积中不是每一个组合都是有意义的,关系就是笛卡尔积中有意义的组合的集合。由于关系的不同列可能来自同一个域,为了区分,需要为每一列起一个属性名。

表示为:R(D1,D2,…,Dn)

  • R:关系名
  • n:关系的目或度

如上面的笛卡尔积,假设小红是女生,那么(小红,男)这个元组是无意义的。假设我们新添加一个配偶的属性,这个配偶的属性的域是和最开始的那个名字的域一样的。为了区分,我们为最开始的属性取名为username,后面加入的取名为husband/wife。

下面是关系的描述:

R(A1:D1,A2:D2,…,An:Dn)A是属性名、D是域,n是度或目,元组的个数称为基数

在许多DBMS中,属性向域的映像直接说明为属性的类型、长度等。如varchar(10)。

关系的特性

  1. 列是同质。每一个列的分量来自同一域
  2. 不同的列可以来自同一个列,所以要有属性名
  3. 关系的任意两个元组不能完全相同。这是集合的要求。不过在实际应用中,表可能不遵从此特性,所以关系不一定完全等同于表
  4. 属性不可再分特性:又被称为关系第一范式。
  5. 分量必须取原子值

候选码/候选键

关系中的一个属性组,其值能唯一标识一个元组。从该属性组中去掉任何一个属性,他就不具有这一性质了。

?:有时关系中有很多组候选码。

主码(Primary)/主键

当有多个候选码时,可以选择一个候选码作为主键。DBMS以主码为主要线索管理关系中的各个元组.

主属性/非主属性

包含在任何一个候选码中的属性被称作主属性,而其他属性被称作非主属性.

最简单的情况:候选码只包含一个属性

最极端的情况:所有属性构成这个关系的候选码,称为全码

外码/外键

关系R中的一个属性组,它不是R的候选码,但他与另一个关系S的候选码相对应,这个属性组被称为R的外码

三类关系

  • 基本关系(基本表或基表):实际存在的表,是实际存储数据的逻辑表示
  • 查询表:查询结果对应的表
  • 视图表:由基本表或其他视图表导出的表,是虚表,不对应实际存储的数据。

关系模式

关系模式是型,关系是值。关系模式是对关系的描述。

关系模式表示为:R(U,D,DOM,F)

  • R:关系名
  • U:组成该关系的属性名
  • D:U中属性所来自的域
  • DOM:属性向域的映像集合
  • F:属性间数据依赖关系的集合

关系的完整性约束规则

实体完整性

关系的主码中的属性值不能为空值(不知道或无意义的值),因为主码具有唯一性,空值无法保证这一要求

空值不参与算术、比较和逻辑运算。用来表现暂时不详的信息。一般有运算需求的属性组中会用默认值来代替暂时不知道的信息

参照完整性

如果关系R1的外码Fk域关系R2的主码Pk相对应,则R1中的每一个元组的Fk值要么等于R2中某个元组的Fk值,要么为空值,不允许出现R2中没有的值。

用户自定义完整性

用户针对具体的应用环境定义的完整性约束条件。如约束字符个数,数字范围等等。

DBMS在更新操作发生时,会按照用户定义的约束检查语句是否符合要求。达到用户自定义完整性。

关系代数介绍

基于集合,提供了一系列关系代数操作,如:并、差、笛卡尔积(广义积)、选择、投影等基本操作,以及交、连接和关系除等扩展操作,关系代数是基于集合思维的一种操作语言。

关系代数是一种抽象的语言,是学习其他数据库语言(如SQL)的基础。

关系代数操作

为什么需要关系代数

c07a7f1baf0248fe03f35cfeb1a3a3c1.png
image-20200721201357070

在计算机底层都是与或非等简单的操作,我们程序中的所有复杂操作到底层都需要拆解成这些简单的指令。

对于数据库来说也是如此,我们复杂的功能都需要拆解成简单的操作。这些简单的操作在关系型数据库中被称为关系代数操作,数据库管理系统将复杂的数据库语言转化为关系代数就不可避免地需要对关系代数的研究。

基本操作

集合操作:∪:并(Union);∩:交(Intersection);—:差(Difference);×:广义积(ProDuct);

纯关系操作:σ:选择(Selection);π:投影(Projection);⋈:连接(join);÷:除运算(Divsion);

并相容性

一些关系代数操作,如并、差、交等,需要满足“并相容性”。即要求参与运算的两个关系及其相关属性之间有一定的对应性、可比性或意义关联性。

定义:关系R与关系S存在相容性,当且仅当:

  • 关系R和关系S的属性数目必须相同;
  • 对于任意i,关系R的第i个属性的域必须和关系S的第i个属性的域必须相同

这是进行并操作等操作的前提!

集合运算

并(Union)

定义:假设关系R和关系S是并相容的,则关系R和关系S的并运算结果也是一个关系,记作:R∪S,它由出现在关系R中,或者S中的元组构成。

数学描述:

形象来说:并运算就是将两个关系的元组合并成一个关系,在合并时去掉重复的元组。

差(Difference)

定义:假设关系R和关系S是并相容的,则关系R与关系S的差运算结果也是一个关系,记作:R-S。它由出现在关系R中但不出现在关系S中的元组组成。

数学描述:

广义笛卡尔积

定义:关系R和关系S的广义笛卡尔积由关系R和关系S的元组所有可能的元组的集合组成

笛卡尔集是后面所有连接运算的基础

笛卡尔积操作:

  1. R×S=S×R
  2. 假设两个关系R和S,它们的元组个数分别为x和y(关系R的基数x,S的基数y)。R和S的笛卡尔积的元组个数是:x*y

关系运算

选择操作(Select)

定义:给定一个关系R,同时给定一个选择的条件Condition(简记con),选择操作的结果也是一个关系,记作:

条件con由逻辑运算符连接比较表达式组成

投影(Project)

一个关系的投影也是一个关系,记作。从关系R中选出属性包含在A中的列构成。

关系Sd31de38253a1583e9e52b9e1917adc87.png关系R07139720c8db2f4179b9c354dcf56c84.png

如上:关系R就是关系S中对id_card这个属性的投影

连接运算(join)
自然连接

对于关系R与关系S自然连接是写为 (R ⋈S)的二元运算。自然连接的结果是在RS中的在它们的公共属性名字上相等的所有元组的组合。

这里引用维基百科的一张表:c1244337508cccd758259ab433a49dd1.png

可以看到自然连接相当于将两张表按照名字相同的一列连接起来。

相关概念:

θ-连接
等值连接
半连接
1714286122e07d3613210bcb8dfeb867.png
半连接
反连接
除法
外连接
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

关系表的构成要素主键_关系模型简述 的相关文章

  • androidstudio 导入git问题 is under Git, but is not registered in the Settings

    从git项目第一次导入数据到本地可能会出现以上问题 1 针对此图 首先选择Configure 2 针对上图选择加号 然后选择指定的项目路径以及类型 点击OK apply
  • Java案例:实现杨辉三角

    Java案例 实现杨辉三角 前言 本篇文章我将讲述使用Java实现杨辉三角的实现 而且可以根据用户输入的正整数输出指定行数的杨辉三角 一 杨辉三角是什么 杨辉三角 是二项式系数在三角形中的一种几何排列 中国南宋数学家杨辉1261年所著的 详
  • dockerfile

    当我在dockerfile里面想安装torchvision WORKDIR vision 0 8 1 WORKDIR相当于cd 进入文件夹执行 RUN python3 setup py install user 想要安装时 报错 Trace
  • LayUi 折叠表格

    表格会以代码的形式写到里面 大家可以将代码copy到项目中新建一个HTML尝试 下面用到的JS都会进行展示JS的内容 可以完全还原我当时的环境 lt include common layout html gt lt header gt
  • jQuery中的.bind()、.live()和.delegate()之间区别分析

    DOM树 首先 可视化一个HMTL文档的DOM树是很有帮助的 一个简单的HTML页面看起来就像是这个样子 事件冒泡 又称事件传播 当我们点击一个链接时 其触发了链接元素的单击事件 该事件则引发任何我们已绑定到该元素的单击事件上的函数的执行
  • 机器学习-KNN近邻算法

    参看文章 机器学习 周志华 机器学习实战 Peter Harrington 统计学习方法 李航 算法介绍 k近邻学习是一种常用的监督学习方法 其工作机制如下 给定测试样本 基于某种距离度量 曼哈顿距离 欧氏距离 切比雪夫距离 Lp距离 Mi
  • thinking 程序员思维习惯 .

    程序员 天职 gt 用计算机解决复杂 重复性 精确性问题 创造性 gt 养成一遇到问题 麻烦 应通过google相关的答案或 工具来解决 或写程序来解决的方法的思维习惯 case 导数程序 多库之间的同步 gt add UI 技术人员使用
  • 软件安全性测试

    软件安全性是一个广泛而复杂的主题 每一个新的软件总可能有完全不符合所有已知模式的新型安全性缺陷出现 要避免因安全性缺陷问题受各种可能类型的攻击是不切实际的 在软件安全测试时 运用一组好的原则来避免不安全的软件上市 避免不安全软件受攻击 就显
  • 如何在pycharm上安装tensorflow

    TensorFlow 是一个基于数据流编程 dataflow programming 的符号数学系统 被广泛应用于各类机器学习 machine learning 算法的编程实现 其前身是谷歌的神经网络算法库DistBelief Tensor
  • CMake命令之add_custom_comand 和 add_custom_target

    一 背景 在很多时候 需要在cmake中创建一些目标 如clean copy等等 这就需要通add custom target来指定 而add custom command则可以用来完成对add custom target生成的target
  • 一个变量越界导致破坏堆栈的bug

    前一段时间在商用系统上出现了core dump 原因是由于一个局部变量写越界导致堆栈被破坏了 在这里 我把这个bug分享一下 希望给需要的朋友一点帮助 简化的代码如下 typedef struct A void func1 char p v
  • 投资还是创业?我以亲身经验告诉你真相

    编者按 本文作者徐薇 前创新工场投资总监 现创业中 做女性生活方式社区电商 本文原载于徐薇的个人公众号 人生异想 life essay 授权 36 氪转载 欢迎交流讨论 最近真是很巧 有好几个朋友在考虑做新的事业选择 来找我聊 聊完之后 大
  • 腾讯云学生服务器2核2G和4核8G申请详细流程

    腾讯云学生服务器2核2G和4核8G申请详细流程 学生机申请流程 腾讯云学生服务器优惠活动 轻量应用服务器2核2G学生价30元3个月 58元6个月 112元一年 轻量应用服务器4核8G配置191 1元3个月 352 8元6个月 646 8元一
  • ymPrompt消息提示组件 2.0版

    组件功能介绍 1 调用方式简单 直接使用ymPrompt alert 的方式调用 传入相应的参数即可 2 兼容IE6 0 FF1 5 Opear9 在Opear下显示有一个小缺陷 兼容HTML4 XHTML1 0页面渲染模式 3 完全的CS
  • 图像超分辨率重建原理学习

    原文链接 https blog csdn net gwplovekimi article details 83041627 目录 超分辨率 Super Resolution SR 传统的图像超分辨率重建技术简介 基于插值的图像超分 基于重建
  • JDK20又来了!你还在用JDK8么?

    文章目录 前言 JDK 20发布 JDK20下载 JDK 20新特性 矢量API 虚拟线程 第二次优化 结构化并发 Scoped values 作用域值 记录模式 第二次优化 外部函数和内存API switch语句和表达式的模式匹配 写在最
  • Linux命令+shell脚本大全:shell 的父子关系

    用于登录某个虚拟控制器终端或在GUI中运行终端仿真器时所启动的默认的交互shell 是一 个父shell 本书到目前为止都是父shell提供CLI提示符 然后等待命令输入 在CLI提示符后输入 bin bash 命令或其他等效的 bash
  • 网络编程(三次握手、四次挥手)

    一 Wireshark 窗口介绍 二 wireshark与对应的OSI七层模型 服务器和客户端的代码不能都运行在ubuntu 因为wireshark抓的是流经真实网卡的数据包 若将服务器客户端都运行在ubuntu 数据直接经过虚拟网卡通信

随机推荐

  • Spring cloud Gateway版本升级踩坑总结

    目录 背景 问题及方案 1 Kubernetes pom文件中的依赖包名称不同 2 项目引入 OpenFeign 或者 RestTemplate 启动假死 解决方案有以下三种 1 使用异步方法并且延迟注入 OpenFeignClient 推
  • 什么是机器学习分类算法?【K-近邻算法(KNN)、交叉验证、朴素贝叶斯算法、决策树、随机森林】

    Python微信订餐小程序课程视频 https edu csdn net course detail 36074 Python实战量化交易理财系统 https edu csdn net course detail 35475 1 K 近邻算
  • C++异常处理机制详解

    异常处理是一种允许两个独立开发的程序组件在程序执行期间遇到程序不正常的情况 异常exception 时相互通信的机制 本文总结了19个C 异常处理中的常见问题 基本涵盖了一般C 程序开发所需的关于异常处理部分的细节 1 throw可以抛出哪
  • 区块链概念、原理、特点

    01 区块链概念 区块链可以借由密码学 串接并保护内容的串联交易记录 又称区块 在区块链中 区块内容具有难以篡改的特性 每一个区块都包含了前一个区块的加密散列 相应时间戳记以及交易数据 通常用Hash树计算的散列值表示 用区块链串接的分布式
  • 【问答】区块链遇到Waiting for cache lock: Could not get lock /var/lib/dpkg/lock-frontend. It is heWaiting for

    前言 在日常区块链或是正常的使用中 总是会遇到这个问题 Waiting for cache lock Could not get lock var lib dpkg lock frontend It is heWaiting for cac
  • 微服务化之无状态化与容器化(转载)

    一 为什么要做无状态化和容器化 很多应用拆分成微服务 是为了承载高并发 往往一个进程扛不住这么大的量 因而需要拆分成多组进程 每组进程承载特定的工作 根据并发的压力用多个副本公共承担流量 将一个进程变成多组进程 每组进程多个副本 需要程序的
  • ASP快速入门教程

    ASP快速入门教程 ASP快速入门教程能让你一个小时就学会ASP 如果想看懂更多的ASP代码 希望大家在网上找找ASP教程 相信看完后大家对ASP更有个感性的认识 请熟记下面的ASP语句是你快速入门的不二法则 lt 1 gt lt 2 gt
  • R语言学习:数据结构8-日期和时间

    日期和时间 date time 日期 Date 内部存储的是距离1970 01 01的天数 相关函数 date Sys Date weekdays months quarters 查看日期 date x lt date 查看当前系统日期和时
  • 数据清洗的步骤和注意事项:提高数据分析的准确性和可靠性

    作为一名数据分析师 我深知数据清洗是数据分析的重要一步 数据清洗的质量直接影响到数据分析的准确性和可靠性 在这篇文章中 我将分享一些数据清洗的步骤和注意事项 帮助你提高数据分析的准确性和可靠性 1 确定数据清洗的目标和指标 在开始数据清洗之
  • 腾讯云部署(gin框架+vue3.0)前后端分离项目

    腾讯云部署 gin框架 vue3 0 前后端分离项目 项目架构和部署工具 项目工具 部署工具 后端项目准备及部署 购买云端服务器 以下是腾讯云 阿里云请点击我 https blog csdn net it vegetable article
  • C++ · 求和篇

    C 求和法千万条 等差数列第一条 哈哈 跟大家开个玩笑 现在咱们步入正题 求和法之一 等差数列 没错 等差数列是最简便的解法 众所周知 等差数列求和公式为 首项 末项 项数 2 首项即是等差数列的起始数 末项是等差数列的结束项 好 问题来了
  • 实例化和具体化详解

    在解释具体化和实例化看的有点乱 分解出来备忘 在代码中包含函数模板本身并不会生成函数定义 它只是用于生成函数定义的方案 编译器使用模板为我写类型生成函数定义时 得到的是模板实例 如这个模板 template
  • keil5 编辑栏一直是灰色

    无语了 气炸了 愤怒啊 查了一下 有很多 arm 和 c51 并存 不管他了 之前装了用完51 又装了arm 现在反而什么都用不了 打开license 发现过期了 重新破解 即可 注意音乐 大半夜吓死人 你以为这样就可以了 你就太天真了 网
  • java:最差产品奖

    import java util Scanner 注意类名必须为 Main 不要有任何 package xxx 信息 public class Main public static void main String args Scanner
  • dll文件反编译源代码 C#反编译 dotpeek反编译dll文件后export

    目录 背景 下载安装dotpeek 导入dll文件 export导出文件 参考 背景 项目合作的时候 使用前人的或者其他部门dll文件直接在机台运行 会出现很多问题 逻辑 效率等等 此时我们可以选择对他们的代码进行反编译和重构 重新梳理逻辑
  • Windows C++运行命令编程

    Windows C 运行命令编程 一 命令处理方式 二 popen函数 三 重定向的子进程 四 参考链接 一 命令处理方式 Windows下编程经常需要使用批处理指令 bat或cmd 因此如何执行命令和获取返回数据是一个关键点 对于控制台程
  • STM32+IAP方案的实现,IAP实现原理(详细解决说明)。

    此文档内容摘自 http www 51hei com stm32 4315 html 可参考文档 https blog csdn net gin love article details 82015646 基于STM32F103ZET6的U
  • 力扣 剑指 Offer 25. 合并两个排序的链表

    简单题 就不多写了 class Solution public ListNode mergeTwoLists ListNode l1 ListNode l2 ListNode head new ListNode t head while l
  • 一文读懂大语言模型

    以ChatGPT为代表的大语言模型被很多人认为是新一轮科技革命的起点 本文旨在通过概念性介绍 让普通人能够尽可能理解人工智能以及大语言模型的基本概念 从而了解这些技术能做以及不能做什么 原文 A Very Gentle Introducti
  • 关系表的构成要素主键_关系模型简述

    关系模型简述 关系模型是基于表的处理方式抽象形成的 是在对传统表及其操作进行数学化严格定义基础上 引入集合理论与逻辑学理论提出的 关系模型也是数据库的三大经典数据模型之一 也是现在大多数商品化数据库系统所仍然再用的数据模型 数据库标准语言也