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

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

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

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

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

  • 3
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
关系型数据库关系型数据库都有各自的特点和应用场景。关系型数据库是基于关系模型创建的数据库,使用集合代数等数学概念和方法来处理数据。它以、列和行的形式组织数据,用于示实体和实体之间联系。\[2\] 非关系型数据库则更加注重数据的存储,不同于关系型数据库结构,非关系型数据库使用不同的数据模型,如键值对、文档、列族和图形等。这种数据库适用于需要处理大量非结构化数据或需要高度可扩展性和性能的场景。\[1\] 在实际应用中,通常会将非关系型数据库关系型数据库结合使用,以充分发挥各自的优势。例如,在读写分离的MySQL数据库环境中,可以将经常访问的数据存储在非关系型数据库中,以提升访问速度。这样的组合可以为Web2.0数据库的发展带来新的思路。\[1\] 总之,非关系型数据库关系型数据库各有所长,根据具体需求和场景选择合适的数据库类型可以更好地满足数据管理和处理的需求。\[3\] #### 引用[.reference_title] - *1* [关系型数据库与非关系型数据库详解](https://blog.csdn.net/weixin_51468875/article/details/114087402)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [关系型数据库与非关系型数据库](https://blog.csdn.net/u010026657/article/details/125273104)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

学习&实践爱好者

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值