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

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

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

主键(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

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

  1. Java中常见RuntimeException与其他异常表及Exception逻辑关系详解

    Java中常见RuntimeException与其他异常表及Exception逻辑关系详解 前言 常见`RuntimeException` 其他错误类型 `Error`类 `Exception`类 E ...

  2. MYSQL (关系型数据库管理系统)的基础知识详解

    一.什么是数据库? 数据库,简而言之可视为电子化的文件柜--存储电子文件的处所,用户可以对文件中的数据进行新增.查询.更新.删除等操作 所谓"数据库"是以一定方式储存在一起.能与多 ...

  3. 什么是腾讯云关系型数据库(MySQL/SQL Server/MariaDB/PostgreSQL详解)

    什么是腾讯云关系型数据库?腾讯云关系型数据库提供 MySQL.SQL Server.MariaDB.PostgreSQL详细介绍.腾讯云关系型数据库让您在云中轻松部署.管理和扩展的关系型数据库,提供安 ...

  4. 三维坐标系之间的转换关系详解与推导

    文章目录 前言 三维坐标系之间的转换关系:R(旋转矩阵) .T(平移矩阵) 数学模型描述 布尔莎模型:前提是旋转角为微小旋转角 罗德里格矩阵模型 尺度相同: 存在的一些问题: 主要参考来源: 前言 三 ...

  5. MySQL总结(八)数据库表与表之间的关系-详解

    精选30+云产品,助力企业轻松上云!>>> 表与表之间的关系 1.表关系的概念 在现实生活中,实体与实体之间肯定是有关系的.比如:员工和部门,老师和学生等.那么我们在设计表的时候,就 ...

  6. 关系型数据库表结构的两个设计技巧

    关系型数据库表结构的设计,有下面两个设计技巧: 物理主键作为关联的外键 关系型数据库,由多个数据表构成.每一个数据表的结构是相同的,不同表之间可能存在关联关系.表之间的关联关系,正是关系型数据库得名的 ...

  7. SAP库存表之间的逻辑关系

    SAP库存表之间的逻辑关系 转载于SAP学习门户网,原文链接: http://www.sap6.com/learn/mm/073504302015/3370.html 当前库存: 一般保存在 MARD ...

  8. 微服务下数据表之间的耦合关系

    微服务下数据表之间的耦合关系 1.问题产生 今天同事给我发了一个链接,问我这种做可视化建表的过程觉得怎么样?(如下图) 同事的意思主要是,在微服务架构下,新建单一数据表,然后表内数据需要引用其他数据表 ...

  9. MySQL数据库增删改查常用语句详解

    MySQL数据库增删改查常用语句详解 一 MySQL数据库表结构 1.1 常见数据类型 1.2 常用约束类型 1.3 MySQL存储引擎 二 DDL语句:数据定义语句 2.1 修改数据库密码 2.1. ...

最新文章

  1. 开源网络备份软件bacula学习笔记
  2. mac的mysql数据库管理_Mac使用MySQL Workbench管理MySQL数据库
  3. zcu102 hdmi example(一)
  4. 如何隐藏iPhone导航栏上的“后退”按钮?
  5. 背包问题(Knapsack problem)采用动态规划求解
  6. 使用Jsonp(JQ+C#)
  7. python apache配置_Apache运行Python的配置
  8. python列表生成时 if_Python列表生成式
  9. Struts2使用Interceptor实现权限控制的应用实例详解
  10. Disabling contextual LOB creation as createClob()
  11. 基于Python+Django的失物招领平台系统设计
  12. java 打文件传输超时_java I/O 一次批量插入保存文件,导致超时问题?
  13. 【广度优先搜索】一个实例+两张动图彻底理解 BFS | 思路+代码详解 | 用 DFS 自动控制我们的小游戏
  14. SaltStack 拉取和推送文件
  15. 在maya中安装numpy
  16. 手机html在哪个文件里,手机录像在哪个文件夹
  17. Java使用WebService调用远程服务wsdl的方法,搭建一个demo,简单易用的教程
  18. 《高分辨率被动微波遥感——综合孔径微波辐射成像》附录仿真代码
  19. google地图通过经纬度查询位置
  20. texture_laws 纹理滤波用于缺陷检测

热门文章

  1. 2021SC@SDUSC-Zxing(一):Zxing初步认识
  2. 关于SG/SP, GG/GP的一点个人理解
  3. nodejs zip 解压zip文件
  4. 解决CDH HiveServer2 因OutOfMemory errors原因造成异常退出问题
  5. Translation插件异常解决
  6. 【Python】使用pandas_datareader获取股票信息并进行可视化分析
  7. 关于github的license选择
  8. Go语言Web项目搭建
  9. splatter包安装
  10. 常见的 @Transactional 注解,你确定用对了吗?