当前位置: 首页 > news >正文

关系模型的数据结构及形式化定义

1 关系模型的核心结构

①单一的数据结构(关系)

        现实世界的实体以及实体间的各种联系均用关系来表示

②逻辑结构(二维表)

        从用户角度,关系模型中数据的逻辑结构是一张二维表,行代表元组(记录),列代表属性(字段)

2 相关定义

(1)域(Domain):一组具有相同数据类型的值的集合。      

例如:整数、实数、介于某个取值范围的整数、指定长度的字符串集合、{‘男’,‘女’}等。

  • 示例

    • 性别域:{'男', '女'}

    • 年龄域:1~120的整数;

    • 课程域:{'数学', '英语', '物理'}

(2)笛卡尔积(Cartesian Product)        

给定一组域D1,D2,…,Dn,这些域中可以有相同的。        

D1,D2,…,Dn的笛卡尔积为:                  

注意:

所有域的所有取值的一个组合

不能重复

笛卡尔积中每一个元素(d1,d2,…,dn)叫作一个n元组或简称元组

笛卡尔积元素(d1,d2,…,dn)中的每一个值di叫作一个分量

基数:若Di(i=1,2,…,n)为有限集,其基数为mi(i=1, …,n),则D1×D2×…×Dn的基数M为:

示例

  • 域 𝐷1={𝑎,𝑏},𝐷2={1,2}}

  • 笛卡尔积:{(𝑎,1),(𝑎,2),(𝑏,1),(𝑏,2)}

  • 基数:2×2=4

  • 关键点

    • 元组(Tuple):笛卡尔积中的每个元素,如 (𝑎,1)。

    • 分量(Component):元组中的每个值 𝑑𝑖,如 𝑎或 1。

    • 基数(Cardinality):若域 𝐷𝑖Di​ 的基数为 𝑚𝑖mi​,则笛卡尔积的基数为 𝑀=𝑚1×𝑚2×…×𝑚𝑛

(3)关系

D1×D2×…×Dn的子集叫作在域D1,D2,…,Dn上的关系,表示为:                      

        R(D1,D2,…,Dn)            

        R:关系名            

        n:关系的目或度(Degree)      

关系也是一个二维表,表的每行对应一个元组,表的每列对应一个域。

属性

        关系中每一列必须起一个名字,称为属性。比如上表中的“导师”、“专业”、“研究生”就是属性

        候选码:      若关系中的某一属性组的值能唯一地标识一个元组,且没有多余属性,则称该属性组为候选码。

        主码(Primary key)      若一个关系有多个候选码,则选定其中一个为主码。  

        全码(All-key)      所有属性组共同组成的候选码,称为全码(All-key)。

看到这里是不是很迷糊,没关系我们下面通过一个具体的例子来说明这几个码的概念!

现有如下两个表:

学生信息表

学号姓名性别年龄
1001张三22
1002李四21
1003王五20

选课表

学号课程号成绩
1001H00198
1002H00188
1001H00278

1. 属性

在 “学生信息表” 中,“学号”“姓名”“性别”“年龄” 是该表的属性,它们分别为每一列命名,用于区分不同类型的数据。同样,在 “选课表” 中,“学号”“课程号”“成绩” 是属性。

2. 候选码

  • 在 “学生信息表” 中,“学号” 可以唯一地标识一个元组(每一个学号对应唯一的学生),且没有多余属性,所以 “学号” 是候选码。“姓名” 不是候选码,因为可能存在重名的学生,不能唯一标识元组。
  • 在 “选课表” 中,“学号” 和 “课程号” 的组合能唯一地标识一个元组(一个学生选一门课的记录是唯一的),且没有多余属性,所以 “学号” 和 “课程号” 这个属性组是候选码。单独的 “学号” 或 “课程号” 都不能唯一标识元组,因为一个学生可以选多门课,一门课可以被多个学生选。

3. 主码

  • 在 “学生信息表” 中,由于只有 “学号” 这一个候选码,所以 “学号” 就是主码。
  • 在 “选课表” 中,因为 “学号” 和 “课程号” 的组合是候选码,我们可以选定这个组合作为主码。如果还有其他候选码,比如在特定情况下有另外一个能唯一标识元组的属性组,就可以从这些候选码中选择一个作为主码。

4. 全码

        假设存在一个关系表 “学生 - 课程 - 教师 - 教室”,记录学生选课后上课对应的教师和教室信息。在这个表中,可能需要 “学生”“课程”“教师”“教室” 所有属性组共同才能唯一地标识一个元组(因为可能存在不同学生选同一门课,不同教师教同一门课,同一门课在不同教室上的情况),此时 “学生”“课程”“教师”“教室” 就共同构成了全码。


下面再来介绍几个概念,数据库这块的概念非常多,不过不用太担心,我尽量用浅显的语言的给大家讲明白、讲到位。

主属性与非主属性

候选码的诸属性称为主属性。例如在 “学生信息表” 中,“学号” 是候选码,那么 “学号” 就是主属性,它对于确定表中的唯一元组至关重要。

不包含在任何侯选码中的属性称为非主属性非码属性。以 “学生信息表” 为例,“姓名”“性别”“年龄” 都不能单独或组合起来唯一标识一个元组,它们也不是候选码的一部分,所以属于非主属性

三类关系

基本关系(基本表基表):实际存在的表,是实际存储数据的逻辑表示。比如学校用来存储学生基本信息的 “学生信息表”,存储课程信息的 “课程表” 等,这些表中的数据会被实际存储在数据库中。

查询表:查询结果对应的表。例如在 “学生信息表” 中查询年龄大于 20 岁的学生信息,查询结果所形成的表就是查询表,它是基于查询操作临时生成的。

视图表:由基本表或其他视图表导出的表,是虚表。 比如可以从 “学生信息表” 和 “选课表” 导出一个 “学生选课成绩视图表”,该视图表中可能包含学生姓名、所选课程名称、成绩等信息,它本身并不实际存储数据,而是在使用时根据定义从相关的基本表中获取数据。


关系与表的对应

数学术语数据库术语示例
数据类型INTVARCHAR(10)
笛卡尔积所有可能组合全排列(无实际意义)
关系表(Table)学生表、课程表
元组行(Row)一条学生记录
分量列值(Cell)学生姓名为“张三”

3 关系模式

关系模式是对关系的描述。包括:

①元组集合的结构:

        属性构成;        

        属性来自的域 ;

        属性与域之间的映象关系。

②元组语义以及完整性约束条件。常见的完整性约束有实体完整性(如主码不能取空值,确保每个元组能被唯一标识)、参照完整性(用于维护表与表之间的关联关系,比如外键的值必须在相关表的主码取值范围内)和用户定义的完整性(根据具体业务需求定义的约束条件,如学生的年龄必须大于 0 等) 。

③属性间的数据依赖关系集合。例如函数依赖,若在 “学生 - 课程 - 成绩” 关系中,知道了 “学号” 和 “课程号”,就能唯一确定 “成绩”,那么 “成绩” 函数依赖于 “学号” 和 “课程号”。


关系模式可以形式化地表示为:         

        R(U,D,DOM,F)         

        R       关系名         

        U       组成该关系的属性名集合         

        D       属性组U中属性所来自的域         

        DOM  属性向域的映象集合         

        F        属性间的数据依赖关系集合

关系模式的简化形式:      

        R (U)    或    R (A1,A2,…,An)    

        R (U,F)

R: 关系名

A1,A2,…,An  : 属性名

假设我们要设计一个用于存储员工信息的数据库关系。
关系名:我们将关系命名为 Employee,这里 Employee 就是R。
属性名:员工信息可能包括员工编号(EmployeeID)、员工姓名(EmployeeName)、年龄(Age)、部门(Department)。那么用 R (A1,A2,…,An)的形式表示这个关系模式就是 Employee (EmployeeID, EmployeeName, Age, Department)

 4 关系模式与关系的区别

关系模式:对关系的描述,静态的、稳定的。

关系:关系模式在某一时刻的状态或内容,是动态的、随时间不断变化的。

关系模式和关系往往统称为关系,通过上下文加以区别

相关文章:

关系模型的数据结构及形式化定义

1 关系模型的核心结构 ①单一的数据结构(关系) 现实世界的实体以及实体间的各种联系均用关系来表示 ②逻辑结构(二维表) 从用户角度,关系模型中数据的逻辑结构是一张二维表,行代表元组(记录&a…...

【C++入门讲解】

目录 ​编辑 --------------------------------------begin---------------------------------------- 一、C简介 二、开发环境搭建 主流开发工具推荐 第一个C程序 三、核心语法精讲 1. 变量与数据类型 2. 运算符大全 3. 流程控制结构 4. 函数深度解析 5. 数组与容…...

数据表中的视图操作

文章目录 一、视图概述二、为什么要使用视图三、创建视图四、查看视图 一、视图概述 小学的时候,每年都会举办一次抽考活动,意思是从每一个班级里面筛选出几个优秀的同学去参加考试,这时候很多班级筛选出来的这些同学就可以临时组成一个班级…...

BFS算法篇——广度优先搜索,探索未知的旅程(上)

文章目录 前言一、BFS的思路二、BFS的C语言实现1. 图的表示2. BFS的实现 三、代码解析四、输出结果五、总结 前言 广度优先搜索(BFS)是一种广泛应用于图论中的算法,常用于寻找最短路径、图的遍历等问题。与深度优先搜索(DFS&…...

mongodb 使用内存过大分析

os 分析 内存使用 ps aux|head -1;ps aux|grep -v PID|sort -rn -k 4|head -10swap 使用 for i in $(ls /proc | grep "^[0-9]" | awk $0>100); do awk /Swap:/{aa$2}END{print "$i",a/1024"M"} /proc/$i/smaps;done| sort -k2nr | headmo…...

CNN-day5-经典神经网络LeNets5

经典神经网络-LeNets5 1998年Yann LeCun等提出的第一个用于手写数字识别问题并产生实际商业(邮政行业)价值的卷积神经网络 参考:论文笔记:Gradient-Based Learning Applied to Document Recognition-CSDN博客 1 网络模型结构 …...

登录到docker里

在Docker中登录到容器通常有两种情况: 登录到正在运行的容器内部:如果你想要进入到正在运行的容器内部,可以使用docker exec命令。 登录到容器中并启动一个shell:如果你想要启动一个容器,并在其中启动一个shell&…...

利用PHP爬虫开发获取淘宝分类详情:解锁电商数据新视角

在电商领域,淘宝作为中国最大的电商平台之一,其分类详情数据对于市场分析、竞争策略制定以及电商运营优化具有极高的价值。通过PHP爬虫技术,我们可以高效地获取这些数据,为电商从业者提供强大的数据支持。本文将详细介绍如何使用P…...

LeetCode 142题解|环形链表II的快慢指针法(含数学证明)

题目如下: 解题过程如下: 思路:快慢指针在环里一定会相遇,相遇结点到入环起始结点的距离 链表头结点到入环起始结点的距离(距离看从左往右的方向,也就是单链表的方向),从链表头结点…...

[图文]课程讲解片段-Fowler分析模式的剖析和实现01

​ 解说: GJJ-004-1,分析模式高阶Fowler分析模式的剖析和实现,这个课是针对Martin Fowler的《分析模式》那本书里面的模式来讲解,对里面的模式来剖析,然后用代码来实现。 做到这一步的,我们这个是世界上独…...

Dify使用

1. 概述 官网:Dify.AI 生成式 AI 应用创新引擎 文档:欢迎使用 Dify | Dify GITHUB:langgenius/dify: Dify is an open-source LLM app development platform. Difys intuitive interface combines AI workflow, RAG pipeline, agent capabilities, model management, ob…...

解锁 DeepSeek 模型高效部署密码:蓝耘平台全解析

💖亲爱的朋友们,热烈欢迎来到 青云交的博客!能与诸位在此相逢,我倍感荣幸。在这飞速更迭的时代,我们都渴望一方心灵净土,而 我的博客 正是这样温暖的所在。这里为你呈上趣味与实用兼具的知识,也…...

7.PPT:“中国梦”学习实践活动【20】

目录 NO1234​ NO5678​ NO9\10\11 NO1234 考生文件夹下创建一个名为“PPT.pptx”的新演示文稿Word素材文档的文字:复制/挪动→“PPT.pptx”的新演示文稿(蓝色、黑色、红色) 视图→幻灯片母版→重命名:“中国梦母版1”→背景样…...

Linux系统-centos防火墙firewalld详解

Linux系统-centos7.6 防火墙firewalld详解 1 firewalld了解 CentOS 7.6默认的防火墙管理工具是firewalld,它取代了之前的iptables防火墙。firewalld属于典型的包过滤防火墙或称之为网络层防火墙,与iptables一样,都是用来管理防火墙的工具&a…...

零基础都可以本地部署Deepseek R1

文章目录 一、硬件配置需求二、详细部署步骤1. 安装 Ollama 工具2. 部署 DeepSeek-R1 模型3. API使用4. 配置图形化交互界面(可选)5. 使用与注意事项 一、硬件配置需求 不同版本的 DeepSeek-R1 模型参数量不同,对硬件资源的要求也不尽相同。…...

通过Ollama本地部署DeepSeek R1以及简单使用的教程(超详细)

本文介绍了在Windows环境下,通过Ollama来本地部署DeepSeek R1。该问包含了Ollama的下载、安装、安装目录迁移、大模型存储位置修改、下载DeepSeek以及通过Web UI来对话等相关内容。 1、🥇下载Ollama 首先我们到Ollama官网去下载安装包,此处我…...

css实现长尾箭头(夹角小于45度的)

1. 长尾夹角小于45度的箭头 代码 //h5<div class"singleArrow"></div>//css .singleArrow {width: 150px;height: 1px;position: relative;background-color: #15ff00;/* transform: rotate(-40deg); */ /* 旋转角度 */}.singleArrow::after{ // 成品-有…...

封装descriptions组件,描述,灵活

效果 1、组件1&#xff0c;dade-descriptions.vue <template><table><tbody><slot></slot></tbody> </table> </template><script> </script><style scoped>table {width: 100%;border-collapse: coll…...

OC-Block

关于OC中的block作为属性时&#xff0c;为什么要要用copy修饰 property (nonatomic, copy) void (^completionBlock)(void);很多文章包括AI都会给出类似结论 Block 默认分配在栈上&#xff0c;如果没有 copy&#xff0c;当方法退出后&#xff0c;Block 会被销毁。使用 copy 修…...

关于知识蒸馏的概念原理以及常见方法

1. 概念与原理 知识蒸馏的基本定义 知识蒸馏(Knowledge Distillation) 是一种将模型压缩与迁移学习结合的技术:它利用预先训练好的大模型(通常参数量大、精度高、计算开销大)指导一个更轻量(参数量小、推理速度快)的学生模型进行训练,从而在保持模型精度的同时显著减少…...

C++轻量级桌面GUI库FLTK

C轻量级桌面GUI库FLTK Screenshots - Fast Light Toolkit (FLTK) 这里写个备忘录,可以参考一下....

C++20导出模块及使用

1.模块声明 .ixx文件为导入模块文件 math_operations.ixx export module math_operations;//模块导出 //导出命名空间 export namespace math_ {//导出命名空间中函数int add(int a, int b);int sub(int a, int b);int mul(int a, int b);int div(int a, int b); } .cppm文件…...

PID 算法简介(C语言)

一、简介: PID是比例、积分、微分三个环节的组合,用来进行反馈控制。每个部分都有对应的系数,也就是Kp、Ki、Kd。PID 算法实现这三个部分的计算,然后综合起来得到控制输出。 二、PID控制器结构体: PID控制器结构体:包含PID参数(Kp, Ki, Kd);存储积分项和上一次误差;…...

Java中的继承及相关概念

在 Java 中&#xff0c;继承是一种允许一个类继承另一个类的特性。通过继承&#xff0c;子类可以获取父类的属性和方法&#xff0c;这有助于减少代码冗余并提高代码的可维护性。以下是关于文件内容的相关分析和知识点总结&#xff1a; 一、继承的核心概念 1.继承的语法 Java …...

语言月赛 202308【小粉兔做麻辣兔头】题解(AC)

》》》点我查看「视频」详解》》》 [语言月赛 202308] 小粉兔做麻辣兔头 题目描述 粉兔喜欢吃麻辣兔头&#xff0c;麻辣兔头的辣度分为若干级&#xff0c;用数字表示&#xff0c;数字越大&#xff0c;兔头越辣。为了庆祝粉兔专题赛 #1 的顺利举行&#xff0c;粉兔要做一些麻…...

云原生后端|实践?

云原生&#xff08;Cloud Native&#xff09;是一种构建和运行应用程序的方法&#xff0c;它充分利用云计算的优势&#xff0c;包括弹性、可扩展性、高可用性和自动化运维。云原生后端开发通常涉及微服务架构、容器化、持续集成/持续部署&#xff08;CI/CD&#xff09;、服务网…...

GrassWebProxy

GrassWebProxy第一版&#xff1a; using System; using System.Collections.Generic; using System.Linq; using System.Net.Sockets; using System.Net; using System.Text; using System.Threading; using System.Threading.Tasks; using System.IO; using Newtonsoft.Json;…...

6.Python函数:函数定义、函数的类型、函数参数、函数返回值、函数嵌套、局部变量、全局变量、递归函数、匿名函数

1. 函数定义 Python函数通过def关键字定义。一个函数通常包括函数名、参数列表和函数体。 def greet(name):return f"Hello, {name}!"2. 函数的类型 Python中的函数主要有以下几种类型&#xff1a; 普通函数&#xff1a;具有明确的输入参数和返回值。递归函数&am…...

青少年编程与数学 02-008 Pyhon语言编程基础 22课题、类的定义和使用

青少年编程与数学 02-008 Pyhon语言编程基础 22课题、类的定义和使用 一、类类的定义和使用示例 二、定义1. 类定义语法2. 属性和方法3. 构造器和初始化4. 实例化5. 类变量和实例变量6. 类方法和静态方法7. 继承8. 多态总结 三、使用1. 创建类的实例2. 访问属性3. 调用方法4. 修…...

CosyVoice /F5-TTS /GPT-SoVITS /Fish-Speech 开源语音克隆与文本转语音(TTS)项目的对比整理

四个主流开源语音克隆与文本转语音&#xff08;TTS&#xff09;项目的对比整理&#xff0c;基于公开资料与实测反馈总结&#xff1a; 项目CosyVoice F5-TTS GPT-SoVITS Fish-Speech 核心技术双向流式语音合成&#xff0c;支持离线与流式一体化建模基于流匹配的ConvNeXt文本表示…...