开启数据库关系:理解一对一、一对多和多对多

通过安迪标志2017年11月29日

在当今的互联世界中,数据库是无价的。他们存储数据有很多用途,从人们组织他们的记录收集到亚马逊管理产品和客户,再到联邦调查局追踪罪犯和恐怖分子。ob欧宝娱乐app手机下载

数据库通过连接位于不同位置的文件中的数据而变得更加强大——例如,人们可以将同一作者或同一类别的一本书链接到另一本书,亚马逊可以将客户与他们查看和购买的产品连接起来,联邦调查局可以看到连接不同犯罪的可比较线索。ob欧宝娱乐app手机下载继续阅读,了解一对一、一对多和多对多关系,以及链接数据如何使其更有价值。

数据库是如何工作的?

数据库始于大量的信息,即数据。每条数据都被输入到一个字段中(例如,您最喜欢的专辑中的歌曲名称及其作曲家)。字段被组合成唱片(专辑中的所有歌曲,以及创作这些歌曲的每个人)。类似的记录被组合成一个文件(你的黑胶唱片集)。如果你还收集了CD和盒式磁带,那么这些数据也是文件。所有这些文件合在一起就是一个数据库。

但这些文件之间没有联系,所以你看不出有没有德沃的文件现在的责任,未来的责任黑胶唱片和CD,或者你的收藏中有多少披头士乐队的《Eleanor Rigby》的翻唱版本,除非你打开并搜索每个文件。这叫做平面文件数据库.如果没有太多的数据需要管理,那么平面文件数据库可能很有用,但是如果要比较每个文件的内容,则需要使用关系数据库

关系数据库与平面文件数据库的不同之处在于,它允许在字段和记录之间建立连接。而不是文件,关系数据库有一组相关数据,以行和列的形式显示,类似于电子表格。表中的每一行都是一个记录

数据库程序的例子包括Microsoft Access、MySQL、IBM DB2、SAP Sybase(现在称为SAP Adaptive Server Enterprise)和Oracle。因为数据库是软件,所以它们可以存储在计算机的硬盘驱动器上、服务器上或云中。

什么是数据库表关系?

主键和外键

表中的每条记录都有一个唯一的标识符。它可以是单列(如学生ID号)或列的组合(例如,文件创建的日期和时间加上客户的姓氏)。这个标识符叫做a关键

当一个表引用另一个表的数据时,它被称为的关系.被引用表中的键称为外键,引用表中的键称为主键.但这是一个角度问题:如果表a链接到表B,那么确定哪个是主键和外键取决于您要查看的是哪个表。虽然主键不是必需的,但它是标准的。主键和外键必须具有相同的数据类型(例如,数字或字母数字)才能相互关联。


使用的关系

关系是关系数据库的基石。用户可以查询数据库并获得将来自不同表的数据合并到单个表中的结果。例如,如果您拥有一个记录存储,则数据库可能有一个用于专辑的表,另一个用于歌名的表,还有一个用于艺术家的表。

关系数据库示例

假设一位顾客问你是否有杰夫·巴克利版本的伦纳德·科恩的歌曲《哈利路亚》。使用关系数据库,您的查询可能会告诉您,您在相册中拥有它格蕾丝,可以作为一张新CD或二手黑胶唱片,以及巴克利精选专辑的两张二手CD。根据您存储的其他数据,您可能能够让客户知道每件商品的价格、使用过的副本的状况、每件商品可以在商店的哪个通道找到,以及您还有威利·纳尔逊和约翰·凯尔的歌曲版本。

使数据有用

为了使数据有用,您需要知道这些信息是如何关联的。要创建这些关系,数据库管理员必须熟悉数据,以及用户提供的模式和业务规则。然后,它们匹配表中的值以形成关系并创建虚拟记录。表的关联方式将影响用户用来查看数据的查询、报表和表单的设计。在上面的例子中,数据库管理员必须理解专辑、歌名和艺术家对唱片商店所有者的重要性,然后创建一个系统,该系统将用清晰、相关的结果响应查询。

由于数据是动态的,因此数据库还必须能够处理不断变化的数据。尽管数据可能会改变,但关系应该是一致的。这被称为参照完整性.如果引用表中的外键发生了变化,那么引用它的所有主键都必须更新以反映这一变化。例如,如果将保存歌曲数据的表中的字段从仅包含歌曲的标题更改为歌曲的标题加上作曲家的姓氏和创作年份,则必须更新专辑表中的主键引用,否则歌曲和专辑之间的连接将被破坏。

数据库中有哪些不同类型的关系?

在数据库中,有几个不同的术语来描述记录之间的关系。

一对一的

这是最不常见的一种关系,但它是最容易想象的。在这个关系中,在关系的每一边有且只有一条记录。表中的每一行都连接到另一个表中的单行。它被描绘成这样:

一对一的数据库关系

无论从哪个表开始,一对一的关系总是一对一的。

一对一关系的例子:

  • 在世界上的许多地方,配偶关系是一对一的。
  • 您的地址与一个邮政编码相关,而该邮政编码与一个地理区域相连。
  • 公司的员工有一个单一的基本工资率。
  • 一次只有一位读者可以借阅图书馆的一本书。
  • 企业的客户只有一个客户ID。
  • 学校的学生ID连接到单个学生。
  • 圣诞老人只属于一个节日。
  • 司机一般只有一张驾照。
  • 一本书的一个版本只有一个出版商。
  • 大多数国家只有一面国旗和一个首都,但也有少数国家有两面(如玻利维亚、斯威士兰和洪都拉斯),还有一个国家有三个首都(南非)。由于此类异常很少,数据库管理员需要仔细考虑是否应该将关系设置为一对一。

一对一数据库关系示例

这种关系在数据分析方面提供不了多少(您可以向行添加更多字段,并将所有数据包含在一个表中),但它确实允许不同的用户或多或少地访问链接表中的数据。假设医生办公室有一个患者数据库,管理人员应该只能看到患者的联系信息,而医务人员可以看到这些信息和医疗记录。通过将联系信息和医疗信息放在不同的表中,数据库管理员可以很容易地让用户只访问他们应该看到的信息。

一对一的数据库关系安全性

一对多

在这个关系中,在关系的一边有一条记录,而在另一边有零、一条或多条记录。它被描绘成这样:

这是最常见的关系类型。从链接表中,一对多关系变成了多对一关系。例如,一个亲生母亲可以有很多孩子,但每个孩子只能有一个亲生母亲。

一对多关系的示例:

  • 一本书可以有多个作者。比如1996年出版的那本书管:电视的发明是由David E. Fisher和Marshall Jon Fisher撰写的。
  • 一个城市可以有许多邮政编码。
  • 一个州可以有多个区号。
  • 一个州可以有许多城市。
  • 客户可以向供应商下许多订单,每个订单可以有多个产品。ob欧宝娱乐app手机下载
  • 一个学生可以注册多个班级。
  • 一张专辑(通常)包含许多歌曲。


多对多

这是最灵活的关系类型。在关系的一边有0、1或多个记录,在另一边也有0、1或多个记录。它被描绘成这样:

多对多数据库关系

多对多关系的例子:

  • 一本书可以与许多类别联系在一起。例如,亨丽埃塔·拉克斯不朽的一生丽贝卡·斯克鲁特(Rebecca Skloot)于2010年出版的一本书,与国会图书馆的以下类别相关联:缺乏,亨丽埃塔,1920-1951-健康;癌症患者——弗吉尼亚——传记;非裔美国妇女-历史/医学人体实验-美国-历史;海拉细胞;癌症,研究/细胞培养;医学伦理。这些类别中的每一个都与许多其他书籍相关联。
  • 一个家庭的成员可以拥有许多宠物。
  • 食谱有多种成分,一种成分可以在许多食谱中使用。
  • 一个医生有很多病人,有些病人看多个医生。
  • 一个工作人员可以负责许多任务,每个任务可以由许多工作人员处理。
  • 许多客户可以购买多种产品。ob欧宝娱乐app手机下载
  • 每个班有多个学生;每个老师教多个课程。
  • 一个销售人员可以有许多客户,而每个客户可能有许多销售人员(特别是当他们是大客户时)。
  • 一个Twitter用户可能被很多人关注,也可能被很多人关注;这两个群体不一定匹配。

多对多数据库关系示例

多对多关系需要一个中间表来建立连接,因为关系系统不能直接管理连接。这些表有许多名称,包括:

  • 链接
  • 交叉引用
  • 映射
  • 加入
  • 联想

连接表是这样工作的:

多对多数据库关系连接表


自我指涉

自引用关系是链接到同一表中的另一行的关系。这用于特定情况—例如,如果您有一个图书列表,并且您想要连接来自同一系列的所有卷,例如《指环王》沙丘.它的图表是这样的:

自引用数据库关系示例

计算字段

表可以包含用公式而不是数据填充的字段。例如,在在线商店订单的数据库中,total字段很可能是通过添加所有商品的成本、税(可能是一个计算字段,它将州、县和市政税百分比加在一起)和运输成本,然后减去任何折扣或促销来计算的。

访问中的关系是什么?

Access是微软的数据库程序,它使用与其他数据库相同的概念和类型的关系。

什么是SQL连接?

到目前为止,SQL(结构化查询语言)是用于与数据库交互和管理数据库的最常用方法。SQL连接是允许将两个表(可能称为父表)中的数据合并到一个新的临时表(也称为子表)中的语句。(可以引用两个以上的表,但为了保持示例的简单性,下面只使用两个表。)有几种类型的连接;最常见的是:

  • 内部:返回两个表中主键和外键与查询匹配的记录。
  • 左外:返回左表(带有主键的表)和右表(带有外键的表)中匹配查询的所有记录。
  • 正确的外:返回右表中的所有记录加上左表中与查询匹配的记录。
  • 完全外:返回两个表中与查询匹配的所有记录。

SQL连接示例关系数据库维恩图
  • 交叉:第一个表中的每一行都与第二个表中的每一行连接。结果中的总行数将是第一个表中的行数乘以第二个表中的行数。
    SQL交叉连接示例关系数据库
  • 自然:在连接的表中具有相同名称的列将只出现一次。
    SQL自然连接示例关系数据库

可以使用WHERE、USING和HAVING等子句调整连接,这些子句将更改将要返回的数据。

关于SQL join的更多信息可以在w3resource.com

其他数据库语言,如OQL和XQuery,使用不同的术语来做同样的事情。

什么是数据库规范化?

数据库规范化是关系数据库的基础。它是将数据组织到表中的过程,然后这些表可以通过上面描述的方法相互连接。每个表应该是关于一个特定的主题,并且只有那些支持该主题的列才包含在表中。

数据库规范化提供了以下好处:

  • 减少重复数据,减少数据存储需求。
  • 对数据的更改只能发生在一个地方。
  • 访问数据的速度更快,效率更高。

一旦建立了数据库的数据模式和业务规则,就可以按以下步骤处理数据:创建表和主键、消除重复数据、通过将数据拆分为新表并为这些表创建外键来构建数据之间的关系。这些步骤被称为第一范式(1NF),第二范式(2NF)和第三范式(3NF)。每个步骤都试图进一步细化数据并缩小每个表的焦点。

复杂的数据模式可能需要第四和第五种标准形式。形式有多种变体,例如Boyce-Codd范式(BCNF),它是3NF的一个更健壮的版本,用于特殊情况。

对规范化过程的完整描述超出了本文的范围,本文只是摘自2002年出版的那本书数据库绝对初学者指南约翰·彼得森(John Petersen)著,可在informIT网站,覆盖得很好。

使用Smartsheet改善IT和Ops的数据库关系

通过设计一个灵活的平台来满足你的团队的需求,并随着需求的变化而适应,从而使你的员工能够超越自己。

Smartsheet平台可以轻松地从任何地方计划、捕获、管理和报告工作,帮助您的团队更有效地完成更多工作。报告关键指标,并通过汇总报告、仪表板和自动工作流实时了解工作情况,以保持团队的联系和信息。

当团队对要完成的工作有了清晰的认识时,就不知道他们在同样的时间内能完成多少工作。今天就免费试用Smartsheet吧。

了解为什么超过90%的财富100强公司信任Smartsheet来完成工作。

免费试用Smartsheet 获得一个免费的Smartsheet演示