关系数据库:关系模式

news2024/11/26 5:35:46

文章目录

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

基本概述

关系的相关名词术语

  • 关系:简单来说,就是一张二维表格。
  • 属性(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原则,确保事务的原子性、一致性、隔离性和持久性。此外,数据库设计者可以利用索引来提升查询性能,使用视图来简化数据操作和提供安全措施,以及通过存储过程和触发器来自动化复杂的数据处理任务。

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

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

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

相关文章

私域加持业务 快消门店运营新玩法

两个月前,某快消品企业的李总急切地联系了纷享销客,希望能找到解决终端门店运营难题的有效方法。 Step1、连接终端门店,导入私域进行深度维系与运营 一、与终端门店建立联系 为了与众多门店老板建立紧密的联系,并将他们转化为企…

ERV-Net:一种用于脑肿瘤分割的高效3D残差神经网络| 文献速递-深度学习肿瘤自动分割

Title 题目 ERV-Net: An efficient 3D residual neural network for brain tumor segmentation ERV-Net:一种用于脑肿瘤分割的高效3D残差神经网络 01 文献速递介绍 脑肿瘤在全球范围内是致命的,与其他类型的肿瘤相比。胶质瘤是最具侵略性的脑肿瘤类…

pyinstaller将py文件打包成exe

pyinstaller将py文件打包成exe 一、为什么需要将python文件打包成exe文件?二、具体操作步骤一、为什么需要将python文件打包成exe文件? python文件需要在python环境中运行,也就是需要安装python解释器。有时我们自己写的python程序需要分享给自己的朋友、同事或者合作伙伴,…

两数之和 II - 输入有序数组,三数之和

题目一&#xff1a; 代码如下&#xff1a; vector<int> twoSum(vector<int>& numbers, int target) {int left 0;int right numbers.size() - 1;vector<int> ret;while (left < right){int tmp numbers[left] numbers[right];if (tmp target){r…

flink 操作mongodb的例子

简述 该例子为从一个Collection获取数据然后插入到另外一个Collection中。 Flink的基本处理过程可以清晰地分为以下几个阶段&#xff1a; 数据源&#xff08;Source&#xff09;&#xff1a; Flink可以从多种数据源中读取数据&#xff0c;如Kafka、RabbitMQ、HDFS等。Flink会…

SpringBoot案例,通关版

项目目录 此项目为了伙伴们可以快速入手SpringBoot项目,全网最详细的版本,每个伙伴都可以学会,这个项目每一步都会带大家做,学完后可以保证熟悉SpringBoot的开发流程项目介绍:项目使用springboot mybatis进行开发带你一起写小项目先把初始环境给你们第一步新建springboot项目返…

HTTP协议介绍与TCP协议的区别

1、HTTP介绍 HTTP&#xff08;超文本传输协议&#xff0c;Hypertext Transfer Protocol&#xff09;是一种用于从网络传输超文本到本地浏览器的传输协议。它定义了客户端与服务器之间请求和响应的格式。HTTP 是基于TCP/IP 进行数据的通信&#xff0c;通常使用端口 80/8080。HTT…

项目纪实 | 版本升级操作get!GreatDB分布式升级过程详解

某客户项目现场&#xff0c;因其业务系统要用到数据库新版本中的功能特性&#xff0c;因此考虑升级现有数据库版本。在升级之前&#xff0c;万里数据库项目团队帮助客户在本地测试环境构造了相同的基础版本&#xff0c;导入部分生产数据&#xff0c;尽量复刻生产环境进行升级&a…

机器学习笔记(1):sklearn是个啥?

sklearn 简介 Sklearn是一个基于Python语言的开源机器学习库。全称Scikit-Learn&#xff0c;是建立在诸如NumPy、SciPy和matplotlib等其他Python库之上&#xff0c;为用户提供了一系列高质量的机器学习算法&#xff0c;其典型特点有&#xff1a; 简单有效的工具进行预测数据分…

GEYA格亚GRT8-S1S2间歇性双时间循环继电器时间可调交流220V 24v

品牌 GEYA 型号 GRT8-S2 AC/DC12-240V 产地 中国大陆 颜色分类 GRT8-S1 A220,GRT8-S1 AC/DC12-240V,GRT8-S2 A220,GRT8-S2 AC/DC12-240V GRT8-S&#xff0c;循环延时&#xff0c;时间继电器&#xff1a;LED指示灯&#xff0c;触头容量大&#xff0c;电压超宽&#xff0…

构建树结构的几种方式

表结构 CREATE TABLE sys_dept (dept_id bigint(20) NOT NULL AUTO_INCREMENT COMMENT ID,pid bigint(20) DEFAULT NULL COMMENT 上级部门,sub_count int(5) DEFAULT 0 COMMENT 子部门数目,name varchar(255) NOT NULL COMMENT 名称,dept_sort int(5) DEFAULT 999 COMMENT 排…

【C#】类和对象的区别

1.区别概述 结构体和类的最大区别是在存储空间上&#xff0c;前者是值类型&#xff0c;后者是引用类型&#xff0c;它们在赋值上有很大的区别&#xff0c;在类中指向同一块空间的两个类的值会随一个类的改变而改变另一个&#xff0c;请看如下代码所示&#xff1a; namespace …

020.有效的括号,用栈来解决的 Java 版 LeetCode 刷题笔记

题意 给定一个只包括 (&#xff0c;)&#xff0c;{&#xff0c;}&#xff0c;[&#xff0c;] 的字符串 s &#xff0c;判断字符串是否有效。 有效字符串需满足&#xff1a; 左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。每个右括号都有一个对应的相同类型…

FreeRTOS【12】队列集使用

1.开发背景 基于以上的章节&#xff0c;了解了 FreeRTOS 多线程间的信号量、队列的使用&#xff0c;已经满足了日常使用场景。这个篇章要介绍的是队列集&#xff0c;实际上队列的升级版&#xff0c;存储信号量和队列等的触发事件。 队列集在实际的开发项目中应用相对比较少&…

linux同步搭建多台服务器

前言&#xff1a; 如果在安装服务器的过程中&#xff0c;需要安装多台服务器&#xff0c;同样的配置&#xff0c;同样的步骤就可以使用此方法&#xff0c;搭建集群同步安装 1.配置网卡 想要两台机器进行同步的话&#xff0c;必须网段是同样的&#xff0c;保持在同一网段并且能…

科技智慧园区解决方案

随着科技创新的推动和城市化进程的加速&#xff0c;城市面临着诸多挑战和机遇。如何提升城市的竞争力和可持续性&#xff0c;是一个亟待解决的问题。在这个背景下&#xff0c;科技智慧园区作为一种新型的城市发展模式&#xff0c;引起了越来越多的关注和探索。 什么是科技智慧园…

Jmeter的线程组之间传递参数

使用jemter做接口测试&#xff0c;有时候需要会遇到不同线程组之间调用相同变量的情况&#xff0c;最多见的就是token的传递&#xff0c;网上有很多处理方法&#xff0c;这里只记录setProperty的办法&#xff0c;一招鲜走遍天&#xff01; 首先我有两个线程组&#xff1a; 线程…

Servlet搭建博客系统

现在我们可以使用Servlet来搭建一个动态(前后端可以交互)的博客系统了(使用Hexo只能实现一个纯静态的网页,即只能在后台自己上传博客)。有一种"多年媳妇熬成婆"的感觉。 一、准备工作 首先创建好项目,引入相关依赖。具体过程在"Servlet的创建"中介绍了。…

WiFi蓝牙模块促进传统零售数字化转型:智能零售体验再升级

随着科技的不断发展&#xff0c;数字化转型已经成为了各行各业的必然趋势。在传统零售业中&#xff0c;WiFi蓝牙模块的应用正逐渐推动着行业的数字化转型&#xff0c;为消费者带来更加智能化、便捷化的零售体验。本文MesoonRF美迅物联网将从以下几个方面阐述WiFi蓝牙模块在传统…

Claude 3可使用第三方API,实现业务流程自动化

5月31日&#xff0c;著名大模型平台Anthropic宣布&#xff0c;Claude3模型可以使用第三方API和工具。 这也就是说&#xff0c;用户通过文本提问的方式就能让Claude自动执行多种任务&#xff0c;例如&#xff0c;从发票中自动提取姓名、日期、金额等&#xff0c;该功能对于开发…