【如此简单!数据库入门系列】之数据组织的基石 -- 关系模型简介


前言

在这里插入图片描述
大家还记得这篇介绍数据库历史的文章中提到的E.F. Codd博士吗?

文章链接: 【如此简单!数据库入门系列】之前世今生 – 数据库历史

没错,他就是关系模型之父。如果有人问什么是关系模型,E.F. Codd博士的回答一定是有代表性的。


Codd’s 12 Rules

让我们来看一下Codd博士眼中的关系模式。

在Codd 博士的研究中,他提出了一系列规则,这些规则后来被称为“Codd的十二条规则”。

根据他的观点,一个数据库要想被视为真正的关系型数据库,必须遵守这些规则。这些规则定义了数据库应该如何存储和管理数据、确保数据的完整性和独立性,以及提供对数据的高效访问。

规则1:信息规则

数据库中存储的数据,无论是用户数据还是元数据,必须是某个表单元的值。数据库中的一切都必须以表格格式存储。

规则2:保证访问规则

每个数据元素(值)都必须能够通过表名、主键(行值)和属性名(列值)的逻辑组合来访问。不能使用其他方式,如指针,来访问数据。

这两条主要针对的是网络模型和分层模型。

规则3:NULL值的系统化处理

数据库中的NULL值必须得到系统化的统一的处理。这是一个非常重要的规则,因为NULL可以被解释为以下几种情况之一:数据缺失、数据未知或数据不适用。

必须正视对NULL值的处理,没有正确地处理NULL值是很多Bug的原因。

规则4:活跃的在线目录

整个数据库的结构描述必须存储在一个在线目录中,该目录被称为数据字典,可以被授权用户访问。用户可以使用与访问数据库本身相同的查询语言来访问目录。

规定了数据库元数据的存储和访问方式。

规则5:全面的数据语言规则

只能使用一种支持数据定义、数据操作和事务管理操作的线性语法语言来访问数据库。这种语言可以直接使用,也可以通过某些应用程序使用。如果数据库允许在没有这种语言的帮助下访问数据,那么它被认为是违规的。

指的是标准化SQL

规则6:视图更新规则

理论上,所有可以更新的数据库的视图,也必须能够被系统更新。

规则7:高级插入、更新和删除规则

数据库必须支持高级插入、更新和删除。这不应仅限于单行,即它还必须支持并集、交集和差集操作以产生数据集记录。

规则8:物理数据独立性

数据库中存储的数据必须独立于访问数据库的应用程序。数据库的物理结构变化不得影响外部应用程序对数据的访问方式。

规则9:逻辑数据独立性

数据库中的逻辑数据必须独立于其用户视图(应用程序)。逻辑数据的更改不得影响使用它的应用程序。例如,如果两个表合并或一个表分成两个不同的表,用户应用程序不应该受到影响或变化。这是最难应用的规则之一。

还记得数据库系统的三层架构吗?这篇文章介绍了物理模式、概念模式和外部模式。概念模式屏蔽了物理细节,实现了物理数据独立性。外部模式屏蔽了概念细节,实现了逻辑数据独立性。
文章链接: 【如此简单!数据库入门系列】之学霸数据库(3) – 数据库基本原理

规则10:完整性独立性

数据库必须独立于使用它的应用程序。所有完整性约束都可以独立修改,无需对应用程序进行任何更改。这条规则使得数据库独立于前端应用程序及其界面。

规则11:分布独立性

最终用户不能看到数据分布在不同位置上。用户应该始终认为数据仅位于一个节点。这条规则被视为分布式数据库系统的基础。

从完整性约束和数据分布角度,要求数据库系统与应用独立。针对当时某些数据库系统在使用方式上存在的问题。

规则12:非破坏性规则

如果系统具有提供对底层记录访问的接口,则该接口不能破坏系统并绕过安全性和完整性约束。

主要针对系统安全性

Codd博士的十二条规则涵盖了从数据存储、访问方式、NULL值处理、到数据的逻辑和物理独立性等多个方面,为关系型数据库的设计和实现提供了一套完整的指导原则。这些规则对于推动关系数据库技术的发展和应用起到了关键作用,也奠定了Codd博士在数据库领域的权威地位。


关系模型

回过头来,我们再看一下关系模型中的核心概念。

核心概念

  1. 表(Tables):在关系数据模型中,关系以表格的格式保存。表格存储了实体之间的关系。一个表有行和列,其中行代表记录,列代表属性。

  2. 元组(Tuple):表的单个行,也称为记录。

  3. 关系实例(Relation instance):关系数据库系统中一组有限的元组集合表示关系实例。关系实例中没有重复的元组。

  4. 关系模式(Relation schema):关系模式描述了关系名称(表名)和属性。

  5. 关系键(Relation key):每行有一个或多个属性,称为关系键,可以唯一标识关系(表)中的行。

  6. 属性域(Attribute domain):每个属性有一些预定义的值范围,称为属性域。

  7. 约束(Constraints):是指为了使一个关系成为有效的关系而必须满足的一些条件。这些条件被称为关系完整性约束(Relational Integrity Constraints)。

关系完整性约束

主要有三种完整性约束:

  1. 键约束(Key Constraints):关系中必须至少有一个属性的最小子集,可以唯一地标识一个元组(tuple)。这个属性的最小子集被称为该关系的键(key),即主键。如果有多个这样的最小子集,它们被称为候选键(candidate keys)。

  2. 域约束(Domain Constraints):每个属性都被限制在一个特定的值范围内。例如,年龄不能小于零,电话号码不能包含0-9以外的数字。

  3. 引用完整性约束(Referential Integrity Constraints):引用完整性约束基于外键(Foreign Keys)的概念。外键是可以在另一个关系中引用的关系的键属性。引用完整性约束规定,如果一个关系引用了不同或相同关系的一个键属性,那么那个键元素必须存在。

超键、候选键、主键、外键的区别?
目的都是保证数据完整性,它们之间关系:主键 ⊆ 候选键 ⊆ 超键,外键是另一个表的候选键


关系代数

关系代数是一种过程性查询语言,它以关系的实例作为输入并产生关系的实例作为输出。

关系代数使用操作符来执行查询。一个操作符可以是一元的或二元的。关系代数可以递归执行,中间结果也被视为关系。

可以将关系代数理解为,在关系上执行的一种面向过程的查询语言。

为什么突然提到关系代数?

  • 有助于理解SQL语句底层是如何执行的
  • 有助于理解数据库基本原理

SQL语句是声明式的,即告诉系统我希望得到什么样的结果,至于如何一步一步计算结果是系统自己的事情。

系统将声明式的SQL语句“翻译”成过程式的关系代数,进一步形成可以在物理模式上执行的代码。同一个SQL语句可以“翻译”成多个等价的关系代数,从这些关系代数中找出一个效率最优的,这正是优化器的工作。

关系代数有很多操作,这里介绍几个最基本的操作。

Select选择操作 (σ)

选择操作的目的是从关系 r 中选出满足给定谓词 p 的元组。

表示为: σp( r ),其中:

  • σ 是选择操作的符号。
  • p 是一个命题逻辑公式,可以包含如 and, or, not 这样的连接词,以及关系运算符如 =, ≠, ≥, <, >, ≤。
  • r 代表一个关系(即数据库中的一个表)

例如:

  • σsubject=“database”(Books)
    会从 Books 关系中选择出所有 subject 为 “database” 的元组
  • σsubject=“database” and price=“450”(Books)
    会从 Books 关系中选择出所有 subject 为 “database” 并且 price 为 “450” 的元组
  • σsubject=“database” or year>“2010”(Books)
    会从 Books 关系中选择出所有 subject 为 “database” 或者出版年份大于 “2010” 的元组

Project投影操作(∏)

投影操作(∏)根据给定的谓词来选择列。

表示为 : ∏A1, A2, An ( r ),其中,A1, A2, An 是关系 r 中的属性名。

例如

  • subject, author (Books)
    从关系Books中投影出subject和author列,形成一个新的关系。

Union并集操作(∪)

它执行两个给定关系之间的并集,定义如下:
r ∪ s = { t | t ∈ r 或 t ∈ s }

表示为 :r U s , 其中,r和s可以是数据库关系或关系结果集(临时关系)。要使并集操作有效,必须满足以下条件:

  1. r和s必须有相同数量的属性(attribute)
  2. 属性的域(domain)必须是兼容的
  3. 重复的元组(tuple)会自动消除

例如

  • author (Books) U ∏ author (Articles)
    分别从Books和Articles关系中投影出作者的名字, 然后对这两个结果进行并集,输出结果是那些写了书或文章或两者都写的作者的名字

Difference集合差(-)

集合差操作(-)的结果是在一个关系中存在但在第二个关系中不存在的元组。

表示为 : r − s,用于找出在r中但不在s中的所有元组。

例如:

  • author (Books) − ∏ author (Articles)
    输出那些写了书但没有写文章的作者的名字。

笛卡尔积(Χ)

笛卡尔积(Χ)操作将两个不同关系的信息合并到一个关系中。

表示为 :r Χ s ,其中 r 和 s 是关系,它们的输出将被定义为:
r Χ s = { q t | q ∈ r 且 t ∈ s}

例如:

  • σauthor = ‘tutorialspoint’(Books Χ Articles)
    输出一个关系,显示由 tutorialspoint 编写的所有书籍和文章。

重命名操作 (ρ)

重命名操作 (ρ) 允许为关系代数的结果命名,因为其结果也是关系,但是没有任何名称。

表示为:ρ x (E) , 其中,表达式E的结果被保存为名为x的关系。


ER模型到关系模型

上篇文章介绍了ER模型。ER模型是对现实世界的一种建模方法,它可以映射成关系模型。也就是说,我们可以使用ER图来创建关系模式。虽然我们无法将所有的ER约束导入到关系模型中,但是可以生成一个近似的模式。

这里介绍一些基础的映射算法。

实体映射

  • 为每个实体创建一个表
  • 实体的属性对应表的字段,并采用对应的数据类型
  • 声明主键

关系映射

  • 为每个关系(ER模型中的关系)创建一个表
  • 将关系相关的所有实体的主键作为表中的字段,并采用各自的数据类型
  • 如果关系具有任何属性,将每个属性添加为表的字段
  • 声明一个主键,由关系相关的所有实体的主键组成
  • 声明所有的外键约束

层次结构映射

  • 创建所有高层实体的表
  • 创建低层实体的表
  • 在低层实体的表中添加高层实体的主键
  • 在低层表中,添加低层实体的所有其他属性
  • 声明高层表的主键和低层表的主键
  • 声明外键约束

系列文章


如果喜欢这篇文章,请不要忘记关注、点赞和收藏哦!
您的鼓励将是我创作的最大动力!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

架构师昌哥

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

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

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

打赏作者

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

抵扣说明:

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

余额充值