关系型数据库表之间的联系[关系]详解

article/2025/9/1 12:47:23

关系型数据库表之间的联系[关系]详解

在表中,行和列的逻辑顺序无关紧要。每个表至少包含一列,该列被称为主键,它唯一地标识了表中的每一行。

是表中扮演特殊角色的列,有两种键:主键、外键。

主键(Primary Key)由一列或多列组成,唯一地标识了表中的每一行(主键由多列组成时称为复合主键,对于多列组合的主键,某列值可以重复,但列的组合值必须唯一),其值标识了数据库中的特定行,实现了表级完整性——确保没有重复的行。它还被用来和数据库中的其他表之间建立关系。如下面两个表,AgentID列是一个典型的主键,它唯一地标识了Agents(经纪人)表中的每一行,并通过确保没有重复的行来实现表级完整性。它还被用来在Agents表和数据库中的Entertainers(艺人)表之间建立关系。

通常复制第一个表的主键,并将其插入到第二个表(称为从表)中。在第二个表中,这个主键被称为外键。(为何称为外键?因为第二个表有自己的主键,而你引入的第一个表的主键原本并不在第二个表中。在从表中外键的列名不必主表中主键的列名相同,虽然一般相同。

外键(Foreign Key):关系R中的一个属性组,它不是R的候选键,但它与另一个关系S的候选键相对应,则称这个属性组为R的外键(外码)。关系R称为参照关系(Referencing Relation也称为参照表从表),关系S称为被参照关系(Referenced Relation也称为被参照表主表)

外键很重要,这不仅是因为它被用来在两个表之间建立关系,还因为它可确保关系级完整性。保关系级完整性意味着两个表中的行将被正确地关联起来,因为外键的值必须与其引用的主键的值相同。外键还有助于避免出现致命的“孤行”。

 

建立外键约束(FOREIGN KEY)后,从表中的外键的取值,要么在主表有对应的值,要么为NULL,但不能是主表中没有对应的值。特殊情况下,从表和主表可以是同一个表。

 

表之间可存在的联系/关系(relationship)有三种:一对一、一对多和多对多。

【请注意,在英语国家讲数据库的英语文献中,relation有时指“表”,有时指两表之间的联系(relationship)。

relationship和relation通常都翻译为关系,但在数据库中两者含义不同。relationship[关系;联系;关联],在数据库中指不同表之间的数据彼此联系的方法。数据库表之间的表之间的relationship有:一对一、一对多、多对多。relation[关系],在数据库指表,从本质上说,关系是一个包含行和列的二维表或数组。应根据语境区别理解。】

先介绍一对一,如下图,其中Agents(经纪人)为主表,而Compensation(报酬)为从表。Agents表中的每行都只关联到Compensation表中的一行,而Compensation表中的每行也都只关联到Agents表中的一行。请注意,AgentID实际上是这两个表的主键,它还是从属表的外键。

 

一对多,如下图,其中一个表中的一行可能关联到另一个表中的多行,但后者中的一行只关联到前者中的一行。要建立这种关系,可将位于“一”端的表中的主键作为外键插入到位于“多”端的表中。

下图演示了一个典型的一对多关系。在这个示例中,Entertainers( 艺人)表中的一行可能关联到Engagements(预约)表中的多行,但Engagements表中的一行只关联到Entertainers表中的一行。你可能猜到了,在Engagements表中,EntertainerID为外键。

 

多对多,两个表的任一个表中的一行都可能关联到另一个表中的多行,为了正确地建立这种关系,必须创建链接表(linking table)。链接表让你能够将一个表中的行关联到另一个表中的行,还可避免添加、删除或修改相关的数据时出现问题。为了定义链接表,可复制多对多关系中每个表中的主键,并根据它们来定义链接表的结构。这些列有两个作用:它们一起构成了链接表的复合主键,同时单独充当外键。

下图演示了一个无法解析的多对多关系,其中Customers( 客户)表中的一行可能关联到Entertainers(艺人)表中的多行,同时Entertainers表中的一行可能关联到Customers表中的多行。

多对多关系是无法直接解析的,通过创建并使用链接表,可正确地解析多对多关系,如下图所示:

链接表是以Customers(客户)表中的CustomerID和Entertainers(艺人)表中的EntertainerID为基础创建的。与数据库中的其他表一样,这个新的链接表也有名称——Engagements(预约)。实际上,Engagements是一个典型的存储事件信息的表。演唱组合1003(JV & the Deep Six)在2月23日为顾客10001(Doris Hartwig)演出了。链接表让你能够存储有关这种关联的额外信息,如日期,还可能有演出合约的价格。链接表能够将多对多关系涉及的两个表中的任意数量的行关联起来。

 

外键约束详解及术语释疑 https://blog.csdn.net/cnds123/article/details/39827049


http://chatgpt.dhexx.cn/article/TRQs3rr2.shtml

相关文章

解析SQL的表间血缘关系工具

一、sqllineage SQL Lineage Analysis Tool powered by Python 源码地址:https://github.com/reata/sqllineage 安装:pip install sqllineage 使用:sqllineage -e "select * from tabA" sqllineage -f demo.sql 二、在线工具 http…

数据库进阶3--表之间的关联关系

学习这一部分之前先去回顾一下之前的基础知识哦!!! 这里写目录标题 关联关系关联关系分类关联关系的创建关联查询等值连接内连接外连接左连接右连接 关联关系 指一个业务中创建的表与表之间的关系。其关联关系有一下几种: 关联…

小感悟:多对多关系,一定要创建关系表吗?

- 感悟:多对多关系,一定要创建关系表吗? 初学数据库时,如果出现多对多关系,那么就需要额外创建一个关系表,将两边的外键存入,以此建立连接; 但是遇到多对多关系,一定需…

关系推理

知识图谱 知识图谱本质上是语义网络,是一种基于图的数据结构,由节点(“实体”)和边(“关系”)组成。在知识图谱里,每个节点表示现实世界中存在的“实体”,每条边为实体与实体之间的“…

【数据库专题】智多星带你五分钟攻略“关系代数”——《狗叫江湖》第二幕续集

、 “百分百无规则教学时间!🔥🔥🔥” 兄弟萌晚上好!我是无规则教学创始人【东星耀杨】,感谢兄弟萌对我的不离不弃,爱你们熬爱你们!还望兄弟萌给为师一个三连支持,要不然我…

互联网人的职场关系攻略

本篇文章原本是给公司校招新人的做的一个内部培训ppt(需要的可以找我),作为一名技术人员,真是不太擅长处理职场关系,但身在职场,估计都能感到其重要性,要想愉快恰饭,万万不可忽视,为了防止误导新…

vue 生命周期详解 (附代码)

一、 vue的生命周期是什么 vue每个组件都是独立的,都有自己的生命周期,从一个组件创建、数据初始化、挂载、更新、销毁,就是一个组件的生命周期。 一个组件首次加载时,也就只执行 创建、数据初始化到挂载。 生命周期给了用户在…

详解vue生命周期(常问面试题)

面试常问:1、vue生命周期是什么? Vue 实例从创建到销毁的过程为生命周期。从开始创建、初始化数据、编译模板、挂载Dom→渲染、更新→渲染、卸载等一系列过程,称之为 Vue 的生命周期。 2、vue生命周期的作用是什么? 在控制整个…

Vue学习 — 详解Vue生命周期

目录 一、前言二、生命周期1、beforeCreat / created(1)、beforeCreat:(2)、created: 2、eforeMount / mounted(1)、beforeMount:(2)、mounted: 3、beforeUpd…

Vue生命周期详解学习笔记

生命周期 生命周期又名生命周期回调函数,生命周期函数,生命周期钩子。生命周期是Vue在关键时刻帮我们调用的一些特殊名称的函数。生命周期函数的名字不可更改,但函数的具体内容是程序员根据需求编写的。生命周期中的this指向vm或组件实例对象…

Vue的生命周期详解,一文带你弄懂Vue的生命周期

大家好,我是Ned👀,一个刚刚入门前端未满两年的大三小学生🌹 未来路还长🎉, 一起努力加油吧❤~ 前言 我记得尤大曾经说过,你看Vue源码干嘛?你使用Vue又不需要它的源码,你只需要会用就…

Vue系列之vue生命周期详解

文章の目录 1、什么是 vue 生命周期2、生命周期钩子函数2.1、beforeCreate(创建前)2.2、created(创建后)2.3、beforeMount(挂载前)2.4、mounted(挂载后)2.5、beforeUpdate&#xff0…

Vue的生命周期详解(简单易懂)

一、定义 Vue的生命周期就是实例从创建到销毁的一个过程,即从创建、初始化数据、编译模板、挂载Dom->渲染、更新->渲染,卸载等一系列的过程。 写代码时注意: Vue的生命周期钩子函数会自动绑定this上下文到实例中,这意味着…

【Vue】 Vue生命周期详解

每一个vue实例从创建到销毁的过程,就是这个vue实例的生命周期。在这个过程中,它经历了从开始创建、初始化数据、编译模板、挂载Dom、渲染→更新→渲染、卸载等一系列过程。 通过这张流程图已经可以清晰的看到Vue整个生命周期的过程 beforeCreate( 创建前…

Vue极简教程,生命周期详解

Vue | 渐进式 | JS框架 | 极简教程 生命周期详解

vue实例的生命周期详解

Vue实例的生命周期 简介 此篇文章说的是最简单的单个VUE组件的生命周期。 官网中的长图诠释了Vue实例从创建,运行到销毁的整个过程。从vue实例的创建,运行,销毁期间,总是伴随着各种各样的事件,这些事件统称为生命周期…

【Vue生命周期详解】

细谈Vue声明周期 什么是生命周期?Vue的生命周期beforeCreate( 创建前 ):created ( 创建后 ):beforeMount:mounted:beforeUpdate:updated:beforeDestroy:destroyed&#x…

VUE的十一个生命周期详解

生命周期可以分为三个阶段: 挂载阶段 更新阶段 销毁阶段 创建前:beforeCreate() 无法获取data数据 创建后:created() 可以获取data数据和操作methods 但不能使用DOM 挂载前:beforeMount() 挂载后:mounted() …

Vue生命周期和钩子函数详解

Vue生命周期和钩子函数详解 Vue生命周期介绍: 组件每个阶段它的内部构造是不一样的,所以一般特定的钩子做特定的事,比如Ajax获取数据就可以在mounted阶段。从Vue实例被创建开始到该实例最终被销毁的整个过程叫做VUE的生命周期,在…

vue生命周期详解(一)----创建期间的生命周期函数

文章目录 vue生命周期一、beforeCreate1.在beforeCreate函数里面调用data里面的属性2.在beforeCreate钩子函数里面调用methods里面的方法 二、created生命周期钩子函数1.在created钩子函数里面调用methods里面的方法和data里面的属性 三、beforeMount和mountedbeforeMount生命周…