数据库系统概念(第二周 第二堂)(关系模型)

目录

回顾

关系模型

历史与现状

 组成成分

数据结构——关系

关系定义

关系性质 

关系和关系模式

难点概念理解 

 关系属性的分类

一、超码(superkey)

二、候选码(candidate key)

三、主码(primary key)

四、外码(Foreign key)

完整性约束

 实体完整性

意义

实现

空值

参照完整性 

意义

实现

特别注意点 

用户完整性 

定义

例子 

课堂小练习 

模式图

总结 


回顾

前一堂最后在研究数据库系统结构,这也是引言最后部分。数据库系统结构包括数据库本身、数据库使用人员、编译器等。在引言整个部分,我们对数据库大体结构上有了大致的了解(模糊、大范围的了解)。

数据库这门课重点聚焦于数据库本身,并不是很关心数据库使用人员、数据库背后的编译处理器等。所以从本篇开始我们便关心数据库本身的知识(数据库设计、数据库使用等)。

对于设计一个数据库来说选择一个数据库模型是最重要的。而现阶段数据库模型中最流行的就是关系模型,所以我们先来研究关系模型

关系模型

历史与现状

 组成成分

研究任何数据库模型都考虑三个方面:数据结构、操作方式、完整性约束

数据结构——关系

单一的数据结构——关系:从数学角度,现实世界的实体以及实体间的各种联系均可用关系来表示

数据结构的逻辑结构——二维表:从用户角度,关系可视化体现出来就是一张张二维表格

关系定义

定义:

笛卡尔积D_1\times D_2\times\ldots\times D_n的子集叫做在域(相同数据结构的数据的集合)D_1D_2\ldotsD_n上的关系

理解

一、关系是笛卡尔积中有意义的子集(无限关系在数据库中没有意义)

二、关系在逻辑结构上可以表示为二维表

三、关系的表示:关系名+属性名(属性名的添加消除了笛卡尔积下关系的有序性)

四、关系由许多元组组成

五、域本身没有意义,也不存在关系,因为笛卡尔积才产生关系

六、关系的本质就是一种抽象归纳化的概念,就是让域之间产生联系,从而抽象为某种关系

关系性质 

 注意:在数据库中实际使用时,考虑到效率问题,会允许重复元组的存在

关系和关系模式

关系:是某一关系模式下,随时间变化的一个值(像面向对象编程中的对象)

关系模式:是关系的描述,包括关系名、关系属性、关系映像等(像面向对象编程中的类)

难点概念理解 

1、任何实体都可以有一系列属性(元组)来代替。任何世界上的事物本质都是一堆数据的集合。

2、实体间的产生联系都可以通过属性的交融(由旧元组通过笛卡尔积形成新元组)来实现。

3、实体间的联系也可以认为是关系与关系间的引用,用外码来体现

举个栗子:

学生+课程=学生选课关系

老师+课程=教师授课关系

学生+老师+课程=学生课程信息查询关系/教师授课信息查询关系

综上:实体和实体的联系都可以用关系来表示

 关系属性的分类

每张表都有不同的属性,但是这些属性在表格中的地位不同。同时通过笛卡尔积形成的新表格之间的联系也体现在属性之间的交融,所以更加深入地研究关系模型表格中的属性是非常有必要的。

一、超码(superkey)

是一个或多个属性的集合,这些属性能够唯一确定一个元组

二、候选码(candidate key)

是一个或多个属性的集合,这些属性都是超码,但是其任意真子集都不是超码

三、主码(primary key)

候选码中可以选择一个作为主码,用来当作表中元组的唯一标识

四、外码(Foreign key)

关系R中的一个属性,它和关系S的主码相对应,那么就称这个属性为R的外码(R和S可以是同一关系

图中班长属性与学号属性相对应,而学号属性又是同一张表的元组。所以也可以称班长为外码。 

完整性约束

目的:

完整性约束目的是为了保护数据库本身的安全,防止用户在使用数据库时向数据库中添加了非法数据

分类:

实体完整性、参照完整性、用户完整性

 实体完整性
意义

现实世界中的每一个实体都是相互可区分的(世界上没有两片完全相同的树叶),所以在数据库中每一个元组也都必须是相互可以区分的。

实现

关系的主码属性值不能为空值

空值

不知道或无意义的值。和0或空字符串不相同

课堂小练

结果为:null、null、false、true、null、null、true、false 

参照完整性 
意义

参照属性在另一个关系中属于主码,表示两个关系之间存在联系。如果在参照关系中其参照属性不是被参照关系中的值,那么代表参照关系参照了一个并不存在的实体,这在现实世界中是不允许的(例如一名学生选了一个并不存在的课程,这是不合理的)

实现

 参照属性在另一个关系中属于主码,表示两个关系之间存在联系。所以在参照关系中,其参照的对象(被参照关系)必须是被参照关系中的值(两个元组存在关系)或者空值(该元组并未实际链接上关系)

特别注意点 

一、如果外码由多个属性组成,参照时一定要一一对应,而不是分别对应(看成一个整体对应)

二、参照关系、被参照关系可以是同一个关系(外码和其对应的主码可以在同一个关系中)

用户完整性 
定义

用户根据应用的实际情况对数据具体设置的限制

例子 

如gender要求取值为“1”或“2”,考试成绩在0-100之间

课堂小练习 

结果为:Y、N、N、Y、N、Y、N 

模式图

可视化体现数据库表以及表之间关系的一种方式

特点:

一、有下划线的属性表示主码

二、箭头表示参照关系与被参照关系(箭头指向被参照关系的被参照属性)

总结 

本文的所有知识点、图片均来自《数据库系统概念》(黑宝书)、山东大学李晖老师PPT。不可用于商业用途转发。

本来想讲完关系代数的,但是篇幅实在太长啦~~本篇已经码了两个多小时了

如果能帮助到大家,大家可以点点赞、收收藏呀~ 

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

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

相关文章

智慧公厕对于智慧城市管理的意义

近年来,智慧城市的概念不断被提及,而智慧公厕作为智慧城市管理的重要组成部分,其在监测、管理和养护方面发挥着重要的作用。智慧公厕不仅是城市市容提升的重要保障,还能提升城市环境卫生管理的质量,并有效助力创造清洁…

【Paper Reading】6.RLHF-V 提出用RLHF的1.4k的数据微调显著降低MLLM的虚幻问题

分类 内容 论文题目 RLHF-V: Towards Trustworthy MLLMs via Behavior Alignment from Fine-grained Correctional Human Feedback 作者 作者团队:由来自清华大学和新加坡国立大学的研究者组成,包括Tianyu Yu, Yuan Yao, Haoye Zhang, Taiwen He, Y…

计算机二级(Python)真题讲解每日一题:《十字叉》

描述‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬ ‪‬‪‬‪‬‪‬‪‬‮‬‪…

centos创建并运行一个redis容器 并支持数据持久化

步骤 : 创建redis容器命令 docker run --name mr -p 6379:6379 -d redis redis-server --appendonly yes 进入容器 : docker exec -it mr bash 链接redis : redis-cli 查看数据 : keys * 存入一个数据 : set num 666 获取数据 : get num 退出客户端 : exit 再退…

phpcms头像上传漏洞引发的故事

目录 关键代码 第一次防御 第一次绕过 第二次防御 第二次绕过 第三次防御 第三次绕过 如何构造一个出错的压缩包 第四次防御 第四次绕过 本篇文章是参考某位大佬与开发人员对于文件包含漏洞的较量记录下的故事,因为要学习文件包含漏洞,就将大佬…

2024-Spring IOC 和 AOP源码分析(上篇)

**前言:**笔者最近面了几次大厂。。。开局Spring源码暴击 之前看过忘了写篇总结。。。 1、介绍一下Spring 核心组件: 常用模块: 常用注解: 2、说一下SpringIOC原理 概念:Spring 通过一个配置文件描述 Bean 及 B…

二叉树算法

递归序 每个节点都能回到3次! 相当于2执行完然后返回了代码会往下走,来到3节点 小总结: 也就是4节点先来到自己一次,不会执行if,先调用自己左边的那个函数,但是是null,直接返回。 这个函数执行完了,就会回到自己,调用自己右边的那个函数,结果又是空,又返回,回到…

Elasticsearch:调整近似 kNN 搜索

在我之前的文章 “Elasticsearch:调整搜索速度”,我详细地描述了如何调整正常的 BM25 的搜索速度。在今天的文章里,我们来进一步探讨如何提高近似 kNN 的搜索速度。希望对广大的向量搜索开发者有一些启示。 Elasticsearch 支持近似 k 最近邻…

基于vue实现bilibili网页

学校要求的实验设计,基于vue实现bilibili网页版,可实现以下功能 (1)基本的悬浮动画和页面渲染 (2)可实现登录和未登录的页面变化 (3)在登录页面的,实现密码判断,或者短信验证方式的倒数功能 (4)实现轮播图 (5)实现预览视频(GIF) (6)页面下拉到一定高度出现top栏以及右下角的返回…

每日五道java面试题之mybatis篇(一)

目录: 第一题. MyBatis是什么?第二题. ORM是什么?第三题. 为什么说Mybatis是半自动ORM映射工具?它与全自动的区别在哪里?第四题. 传统JDBC开发存在的问题第五题. JDBC编程有哪些不足之处,MyBatis是如何解决这些问题的…

UE5数字孪生系列笔记(二)

智慧城市数字孪生系统 制作流云动画效果 首先添加一个图像在需要添加流云效果的位置 添加动画效果让其旋转 这个动画效果是程序开始就要进行的,所以要在EventConstruct中就可以启动这个动画效果 添加一个一样的图像在这里,效果是从此处进行放大消散 添…

python 调用redis创建查询key

部署redis apiVersion: apps/v1 # 描述api版本,默认都用这个 kind: Deployment # 资源类型,可以配置为pod,deployment,service,statefulset等等 metadata: # deployment相关的元数据,用于描述deployment的…

Python——字典

一、字典特性介绍 字典在 Python 中极为重要,是属于映射类型的数据结构。 字典有⼀对⼉⼤括号组成 {} , 字典内的元素都是成对⼉出现的 {"a":1} , 他们⽤英⽂的冒号( : )隔开, 左边叫做键(key),右边的叫值(value), 通常叫做键值对⼉。 每个元素⽤英⽂的逗…

设计模式深度解析:工厂方法模式与抽象工厂模式的深度对比

​🌈 个人主页:danci_ 🔥 系列专栏:《设计模式》 💪🏻 制定明确可量化的目标,坚持默默的做事。 设计模式深度解析:工厂方法模式与抽象工厂模式的深度对比 探索设计模式的魅力&#x…

Redis 八种常用数据类型详解

夯实基础,这篇文章带着大家回顾一下 Redis 中的 8 种常用数据类型: 5 种基础数据类型:String(字符串)、List(列表)、Set(集合)、Hash(散列)、Zse…

Vue.js+SpringBoot开发食品生产管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 加工厂管理模块2.2 客户管理模块2.3 食品管理模块2.4 生产销售订单管理模块2.5 系统管理模块2.6 其他管理模块 三、系统展示四、核心代码4.1 查询食品4.2 查询加工厂4.3 新增生产订单4.4 新增销售订单4.5 查询客户 五、…

rocky9 编写一键安装mysql 的sh脚本

基本操作步骤 1、虚拟机最小化安装rocky9系统,安装后克隆一个系统;1个用来获取下载的rpm包,一个用来编写sh 测试脚本; 2、修改虚拟机的 yum配置文件,获取获取rpm程序 :启用缓存,并修改yum下载…

在Latex中优雅的插入svg图片(Ubuntu22.04)

文章目录 一、前言二、准备工作三、脚本编程四、结论 一、前言 在 LaTeX \LaTeX LATE​X 中,插入图片常用的为 figure 环境加 \includegraphics 命令: \begin{figure}[!htbp]\centering\includegraphics[width\textwidth]{图片名.jpg/jpeg/png/pdf}\c…

【LeetCode热题100】 226. 翻转二叉树(二叉树)

一.题目要求 给你一棵二叉树的根节点 root ,翻转这棵二叉树,并返回其根节点。 二.题目难度 简单 三.输入样例 示例 1: 输入:root [4,2,7,1,3,6,9] 输出:[4,7,2,9,6,3,1] 示例 2: 输入:…

文件处理(二)

CSV文件的读取和写入 CSV文件的操作 csv是逗号分隔符文本格式,常用于数据交换、Excel文件和数据库数据的导入和导出。 与Excel文件不同,CSV文件中: 值没有类型,所有值都是字符串不能指定字体颜色等样式不能指定单元格的宽高&…