关系数据库:关系模式

文章目录

    • 基本概述
      • 关系的相关名词术语
      • 笛卡儿积与关系
      • 关系的类型
    • 关系模式
    • 总结

基本概述

关系的相关名词术语

  • 关系:简单来说,就是一张二维表格。
  • 属性(Attribute):也称字段或列,在现实世界中,要描述一个事务常常取若干特征来表示。这些特征称为属性。例如学生用学号、姓名、性别、系别、年龄、籍贯等属性来描述。
  • 域(Domain):每个属性的取值范围所对应一个值的集合,称为该属性的域。如学号的域是6位整型数,姓名的域是10位字符,性别的域为{男,女}。 一般在关系数据模型中,对域还加了一个限制,所有的域都应是原子数据(at omicdata)。例如,整数、字符串是原子数据,而集合、记录、数组是非原子数据。关系数据模型的这种限制称为第一范式(first normal form,简称1NF)条件。但也有些关系数据模型突破了1NF的限制,称为非INF。
  • 元组:关系中的某一行记录。
  • 分量:某一条元组在字段上的某个值。
  • 目或度(Degree): D 1 × D 2 × . . . × D n D_1\times D_2\times ...\times D_n D1×D2×...×Dn的子集的称或关系模式作在域 D 1 , D 2 , . . . , D n D_1,D_2,...,D_n D1,D2,...,Dn上的关系,表示 R ( D 1 , D 2 , . . . , D n ) R(D_1,D_2,...,D_n) R(D1,D2,...,Dn)。这里的R表示关系的名字,n是关系的目或度。
  • 候选码(Candidate Key):若关系中的某一属性或属性组的值能唯一标识一个元组,则称该属性或属性组为候选码。
  • 主码(Primary Key):或称主键,若一个关系有多个候选码,则选定其中一个为主码。
  • 主属性(Prime attribute):包含在任何候选码中的属性称主属性。不包含在任何候选码中的属性称为非主属性(NonPrime attribute)。
  • 外码(Foreign key):如果关系模式R中的属性或属性组非该关系的码,但它是其他关系的码,那么该属性集对关系模式R而言是外码。如客户与贷款之间的借贷联系c-l(c-id,Loan-no),属性c-id是客户关系中的码,所以 c-id是外码,属性loan-no是贷款关系中的码,所以loan-no也是外码。
  • 全码(All key):关系模型的所有属性组是这个关系模式的候选码,称为全码。如R(T,C,S),属性T表示教师,属性C表示课程,属性S表示学生。

属性或字段加下划线表示该属性是主码,元组就是记录。

笛卡儿积与关系

定义1: D 1 , D 2 , D 3 , . . . , D n D_1,D_2,D_3,...,D_n D1,D2,D3,...,Dn为任意集合,定义 D 1 , D 2 , D 3 , . . . , D n D_1,D_2,D_3,...,D_n D1,D2,D3,...,Dn的笛卡尔积为
D 1 × D 2 × D 3 × . . . × D n = { ( d 1 , d 2 , d 3 , . . . , d n ) ∣ d i ∈ D i , i = 1 , 2 , 3 , . . . , n } D_1\times D_2\times D_3\times ...\times D_n=\{(d_1,d_2,d_3,...,d_n)|d_i\in D_i,i=1,2,3,...,n\} D1×D2×D3×...×Dn={(d1,d2,d3,...,dn)diDi,i=1,2,3,...,n}
其中集合的每个元素 ( d 1 , d 2 , d 3 , . . . , d n ) (d_1,d_2,d_3,...,d_n) (d1,d2,d3,...,dn)叫做一个n元组(n-tuple,即n个属性的元组),元素的每一个值 d i d_i di叫做元组一个分量。若 D i ( i = 1 , 2 , 3 , . . . , n ) 为有限集,其基数( C a r d i n a l n u m b e r , 元组的个数为 D_i(i=1,2,3,...,n)为有限集,其基数(Cardinal number,元组的个数为 Di(i=1,2,3,...,n)为有限集,其基数(Cardinalnumber,元组的个数为m_i(i=1,2,3,…,n) ,则 ,则 ,则D_1\times D_2\times D_3\times …\times D_n$的基数M为:

M = ∏ i = 1 n m i M=\prod\limits_{i=1}^{n}{m_i} M=i=1nmi

定义2: D 1 × D 2 × . . . × D n D_1\times D_2\times ...\times D_n D1×D2×...×Dn的子集的称作在域 D 1 , D 2 , . . . , D n D_1,D_2,...,D_n D1,D2,...,Dn上的关系,表示 R ( D 1 , D 2 , . . . , D n ) R(D_1,D_2,...,D_n) R(D1,D2,...,Dn),称为关系R为n元关系。

元数(属性的个数),基数(记录的条数)。

示例:若 D 1 = 0 , 1 , D 2 = a , b , D 3 = c , d D_1={0,1},D_2={a,b},D_3={c,d} D1=0,1,D2=a,b,D3=c,d,求解 D 1 × D 2 × D 3 D_1\times D_2\times D_3 D1×D2×D3,以及 D 1 × D 2 × D 3 D_1\times D_2\times D_3 D1×D2×D3的基数。

分析:根据定义1可知 D 1 × D 2 × D 3 D_1\times D_2\times D_3 D1×D2×D3中的每一个元素是一个三元组,其结果为:
D 1 × D 2 × D 3 = { ( 0 , a , c ) , ( 0 , a , d ) , ( 0 , b , c ) , ( 0 , b , d ) , ( 1 , a , c ) , ( 1 , a , d ) , ( 1 , b , c ) , ( 1 , b , d ) } D_1\times D_2\times D_3= \{(0,a,c),(0,a,d),(0,b,c),(0,b,d),(1,a,c),(1,a,d),(1,b,c),(1,b,d) \} D1×D2×D3={(0,a,c),(0,a,d),(0,b,c),(0,b,d),(1,a,c),(1,a,d),(1,b,c),(1,b,d)}
由于 D 1 D_1 D1的基数 m 1 = 2 m_1=2 m1=2 D 2 D_2 D2的基数 m 2 = 2 m_2=2 m2=2 D 3 D_3 D3的基数 m 3 = 2 m_3=2 m3=2,所以 D 1 × D 2 × D 3 D_1\times D_2\times D_3 D1×D2×D3的基数 M = m 1 × m 2 × m 3 = 8 M=m_1\times m_2\times m_3=8 M=m1×m2×m3=8,也可以用二维表来表示如下:

笛卡尔积结果

关系的类型

关系的三种类型如下:

  • 基本关系(通常又称为基本表或基表):实际存在的表,它是实际存储数据的逻辑表示。
  • 查询表:查询结果对应的表。
  • 视图表:是由基本表或其他视图表导出的表。由于它本身不独立存储在数据库中,数据库中只存放它的定义,所以常称为虚表。

关系模式

关系的描述称为关系模式(Relation Schema),可以表示为 R ( U , D , d o m , F ) R(U,D,dom,F) R(U,D,dom,F)。其中,R表示关系名,U是组成该关系的属性名集合,D是属性的域,dom是属性向域的影响集合常常直接说明属性的类型、长度,F为属性间数据的依赖关系集合。也可以简记为 R ( U ) R(U) R(U) R ( A 1 , A 2 , A 3 , . . . , A n ) R(A_1,A_2,A_3,...,A_n) R(A1,A2,A3,...,An) A 1 , A 2 , A 3 , . . . , A n A_1,A_2,A_3,...,A_n A1,A2,A3,...,An为属性名或域名,通常在关系模式主属性上加下划线表示该属性为主码属性。

完整性规则提供了一种手段来保证当授权用户对数据库做修改时不会破坏数据的一致性。分类如下:

  • 实体完整性(Entity Integrity):规定基本关系R的主属性A不能取空值。
  • 参照完整性(Referential Integrity):也称引用完整性,关系与关系间的引用。属性上加实下画线,通常表示该属性为主码属性。属性上加虚下画线,通常表示该属性为外码属性。值必须为外码中某个元组的主码值或取空值。
  • 用户定义完整性(User defined Integrity):针对某一具体的关系数据库的约束条件,反映某一具体应用所涉及的数据必须满足的语义要求,有应用的环境决定。例如,银行的用户账户规定必须大于等于100000,小于999999。

总结

关系数据库基于关系模型,该模型采用表的形式来组织和存储数据。关系模式是定义这些表格结构的蓝图,包括表的名称、表中列的名称和数据类型,以及表之间的关联关系。关系数据库的核心概念包括表、关键字(主键和外键)、数据约束(如唯一性、非空和检查约束),以及规范化过程,旨在减少数据冗余和提高数据完整性。

在关系数据库中,数据操作通常遵循ACID原则,确保事务的原子性、一致性、隔离性和持久性。此外,数据库设计者可以利用索引来提升查询性能,使用视图来简化数据操作和提供安全措施,以及通过存储过程和触发器来自动化复杂的数据处理任务。

总的来说,关系模式是关系数据库设计的基石,它支持高效的数据存储、检索和管理。通过精确的关系模式设计,我们可以构建出既灵活又强大的数据库系统,满足各种商业和技术领域的需求。

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

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

相关文章

FreeRTOS基础(五):任务挂起与恢复

今天我们将探讨FreeRTOS中的两个非常重要的函数:任务挂起和恢复函数。在实际的嵌入式系统开发中,我们常常需要在特定条件下暂停某些任务的执行,而在满足某些条件后再恢复这些任务的执行。这就像我们日常生活中的“暂停”和“继续”按钮。无论…

5月29日-shell复习

一.Shell概述 1)Linux提供的Shell解析器有:sudo cat /etc/shells /bin/sh /bin/bash /usr/bin/sh /usr/bin/bash /bin/tcsh /bin/csh 2)bash和sh的关系 cd /bin ll | grep bash 或者使用:ls -l /bin/ | grep bash 3&#xff0…

力扣257. 二叉树的所有路径

思路&#xff1a;题目需要记录从根节点开始走的路径&#xff0c;无疑选用前序遍历&#xff0c;用一个数组paths 记录走过的节点信息&#xff0c;遇到叶子节点就用另一个list记录下路径&#xff0c;回溯时删掉paths尾节点即可 class Solution {public List<String> binar…

数学函数,字符串

目录 Math类 三角函数 指数函数 取整方法 其他方法 String类 常见方法 字符串比较方法 子串和数字与字符串的转换 Math类 Math类在java.lang中&#xff0c;不用显式引入。 三角函数 private static void triangleFunc() {double degree Math.toDegrees(Math.PI / 3…

PMP学习和考试难度分析

PMP&#xff08;项目管理专业人士&#xff09;考试目前是全球范围内比较具权威性和认可度的项目管理证书之一。因此PMP考试的难度是一个备受关注的话题。根据我们以往的学员经验我从不同角度解析PMP考试的难度&#xff0c;并提供一些应对挑战的建议。希望对大家有所帮助。 PMP考…

PPT 隐藏开启对象图层

目录预览 一、问题描述二、解决方案三、参考链接 一、问题描述 制作PPT的时候&#xff0c;有时候需要在一张PPT放置多个依次出现的内容&#xff0c;然后设置对应的动画&#xff0c;要是需要对某个内容进行修改的话&#xff0c;就会很不方便&#xff0c;这个时候就需要使用&…

JSL-11G定时限过流继电器 JOSEF约瑟

JSL系列定时限过流继电器型号&#xff1a; JSL-11定时限过流继电器; JSL-12定时限过流继电器; JSL-13定时限过流继电器&#xff1b; JSL-14定时限过流继电器&#xff1b; JSL-15定时限过流继电器&#xff1b; JSL-16定时限过流继电器; JSL-21定时限过流继电器; JSL-22定时限…

【数据结构】六种排序实现方法及区分比较

文章目录 前言插入排序希尔排序选择排序堆排序快速排序冒泡排序总结 前言 众所周知&#xff0c;存在许多种排序方法&#xff0c;作为新手&#xff0c;最新接触到的就是冒泡排序&#xff0c;这种排序方法具有较好的教学意义&#xff0c;但是实用意义不高&#xff0c;原因就在于…

【文件fd】回顾C语言文件操作 | 详细解析C语言文件操作写w追加a | 重定向和“w““a“

目录 前言 回顾C语言的操作 Q1 Q2 Q3 C语言文件操作 w方式 a方式 重定向和"w""a"方式 前言 前面进程虚拟地址空间让我们对进程的理解更加深入。在基础IO我们会详细介绍文件和文件系统。本专题的核心内容是文件。 深刻理解文件&#xff08;站在…

知识库管理系统:是什么、作用、如何搭建

你有没有遇到过这种情况&#xff1a;在工作中想要查找某个信息&#xff0c;查找了很多个文档还是没找到准确的信息&#xff1b;或者在团队中&#xff0c;总是在重复做着相同的资料搜集工作&#xff0c;浪费了大量时间和精力&#xff1f;如果你在烦恼这个问题&#xff0c;那么跟…

【Vue3】自定义组件directiveapp.use()

历史小剧场 崇祯很勤政&#xff0c;崇祯并非王国之君&#xff0c;弘光很昏庸&#xff0c;弘光活该倒霉&#xff0c;几百年来&#xff0c;我们都这样认为。 但我们之所以一直这样认为&#xff0c;只是因为有人这样告诉我们。 之所以有人这样告诉我们&#xff0c;是因为他们希望我…

Java | Leetcode Java题解之第121题买卖股票的最佳时机

题目&#xff1a; 题解&#xff1a; public class Solution {public int maxProfit(int prices[]) {int minprice Integer.MAX_VALUE;int maxprofit 0;for (int i 0; i < prices.length; i) {if (prices[i] < minprice) {minprice prices[i];} else if (prices[i] -…

PieCloudDB Database Flink Connector:让数据流动起来

面对客户环境中长期运行的各种类型的传统数据库&#xff0c;如何优雅地设计数据迁移的方案&#xff0c;既能灵活地应对各种数据导入场景和多源异构数据库&#xff0c;又能满足客户对数据导入结果的准确性、一致性、实时性的要求&#xff0c;让客户平滑地迁移到 PieCloudDB 数据…

快递100使用

1.快递100 接口文档 链接: 接口文档 2.授权参数 授权Key: qZgsNFSo5391 customer&#xff1a;8EEA8C4FB90B275E228CA322EF0E61E5 3.技术文档 链接: 技术文档 4.使用 <dependency><groupId>com.github.kuaidi100-api</groupId><artifactId>sdk&l…

AI大模型探索之路-实战篇12: 构建互动式Agent智能数据分析平台:实现多轮对话控制

系列篇章&#x1f4a5; AI大模型探索之路-实战篇4&#xff1a;深入DB-GPT数据应用开发框架调研 AI大模型探索之路-实战篇5&#xff1a;探索Open Interpreter开放代码解释器调研 AI大模型探索之路-实战篇6&#xff1a;掌握Function Calling的详细流程 AI大模型探索之路-实战篇7…

【CPP】双端队列简介(deque)

简介&#xff1a;双端队列(deque) 目录 1.概述2.特点3.底层原理 1.概述 双端队列&#xff1a;是一种顺序表和顺序表的结合数据结构&#xff0c;不是队列。 它提供顺序表的[]下标访问和链表的中间头部的较高效率插入删除操作。 2.特点 顺序表的优缺点&#xff1a; 优点&…

网络安全基础技术扫盲篇 — 名词解释之“数据包“

用通俗易懂的话说&#xff1a; 数据包就像是一个信封。当你写信给某个人时&#xff0c;你将内容写在一张纸上&#xff0c;然后将纸叠起来并放入信封中&#xff0c;就形成了一个完整要发送的数据内容。信封上有发件人和收件人的详细地址&#xff0c;还有一些其他必要的信息&…

动态规划(Dynamic-Programming)问题讲解

动态规划类问题 从已知子问题的解&#xff0c;推导出当前问题的解 推导过程可以表达为一个数学公式用一维或二维数组来保存之前的计算结果&#xff08;可以进一步降维优化&#xff09; 将当前问题 分解成子问题 &#xff0c;找出递归公式&#xff0c;分阶段进行求解 求解过程中…

【scau大数据技术与原理2】综合性实验Spark集群的安装和使用——安装启动spark shell篇

实验内容简介&#xff1a; Spark是一个分布式计算框架&#xff0c;常用于大数据处理。本次实验中&#xff0c;首先设计一个包含主节点和从节点的Spark集群架构&#xff0c;并在CentOS的Linux环境下进行搭建。通过下载并解压Spark安装包&#xff0c;配置环境变量和集群参数&…

python分别保存聚类分析结果+KeyError: ‘CustomerID‘报错

如何在完成聚类分析后按聚类编号保存数据并且带上原数据所属ID # 将每个聚类的数据保存到不同的文件中 for cluster_id in range(6): # 假设共有6个聚类cluster_data data[data[cluster] cluster_id]cluster_data_with_customer_id cluster_data.copy()cluster_data_with_…