日志

数据库概论 (二)关系

 来源    2021-01-14    1  

关系

域的定义

一组拥有相同数据类型的集合。

{'男','女'}

本质上就是一组规范的集合。

域的操作

笛卡尔积

给定一组域D1,D2,…,Dn ,这些域中可以有相同的D1,D2,…,Dn的笛卡尔积为:
$$
D_1×D_2×…×D_n ={(d_1,d_2,…,d_n)|d_i\in D_i,i=1,2,…,n}
$$

  • 所有域的所有取值的一个组合
  • 不能重复

相当于将做运算的两个域的所有元素进行全排列,并组合在一起形成一个新的域。

举例

$$
R_1 \times R_2
$$

关系的定义

$$
D_1×D_2×…×D_n ={(d_1,d_2,…,d_n)|d_i\in D_i,i=1,2,…,n}
$$

上述式子的子集叫做在$D_1...D_n$上的关系,并表示为:
$$
R(D_1,D_2,D_3...,D_n)
$$
关系中的每一列也就是一个域,为了区分不同的域,也就是给相同数据类型的数据添加不同的语意,就给每一个域起一个名字,称之为属性。n目关系必定有n个属性。

关系中的每一行称之为一个元组,也就是一条记录。

  • 候选码:关系中的某一属性组中可以唯一标识一个元组,则称之为候选码,候选码可以由多个属性组成,例如书号和书名唯一确定了一本书,那就说书号和书名是书的候选码。不过在一些简单的情况下,候选码只由一个属性组成。
  • 全码:关系中所有的属性组合在一起才能唯一标识某一元组,称这种情况为全码。
  • 主码:当一个关系有多个候选码时,就选择其中的一个作为这个关系的主码。
  • 主属性:包含在候选码中的属性称之为主属性,并不是只有在主码中的属性才是主属性!!!
  • 非主属性:不包含在任何候选码中的属性称之为非主属性。

关系模式

关系模式可以形式化地表示为: R(U,D,DOM,F)

  • R:关系名
  • U:组成该关系的属性名集合
  • D:属性组U中属性所来自的域 Domain
  • DOM:属性向域的映象集合 Domain Orient Map
  • F:属性间的数据依赖关系集合 Function

也可以简单的记作:
$$
R(A_1,A_2,A_3...,A_n)
$$
其中的$A_n$为属性名。

关系代数

关系操作有两部分

  • 查询操作 Query
  • 修改操作:插入 Insert ,删除 Delete , 修改 Update

查询操作是关系操作中最重要的部分,包括:选择 select,投影 project,连接 join,除 divide,并 union,差 except,交 intersection,笛卡尔积等。

其中的五个基本操作为:

  1. 选择
  2. 投影
  3. 笛卡尔积

其中的$\sigma$代表选择一个关系中的某一行,而$\pi$代表选择某几列

$\theta$连接

也就是在两个关系的笛卡尔积上进行选择运算。

先做笛卡尔积,再找出满足条件的笛卡尔积结果,通常在两个关系之间有可以比较的属性。

自然连接

两个不同的关系模式中有相同类型的属性组,将两个关系模式中相同的属性组按照相同的值连接起来,然后去掉重复的值,得到的结果就是自然连接的结果。

自然连接是一种特殊的等值连接,也需要做笛卡尔积,是特殊的$\theta$连接。

等值连接和自然连接的区别

在自然连接中把相同的属性合并成了一个属性列。

左连接,右连接以及外连接

左连接

先做笛卡尔积,取出其中满足on子句的部分,然后再加上第一个关系中的剩余记录。由左上角第一个维恩图可知。

右连接

先做笛卡尔积,取出其中满足on子句的部分,然后加上第二个关系中的剩余记录,如上图第一行第二个维恩图可知。

外连接

类似于全连接,不过是先将满足条件字句的部分取出来,再合并两个关系模式中的剩余部分。

运算

象集的定义 Image Set

给定一个关系R(X, Z),X 和Z为属性组,当t[ X ]= x 时 x 在R中的象集(Images Set)为:
$$
Z_x ={t[Z]|t\in R \and t[X] = x}
$$
象集 $Z_x$ 表示R中属性组X上值为x 的诸元组在Z上分量的集合

除运算

给定关系R(X,Y)和S(Y,Z),其中X,Y,Z为属性组。R中的Y与S中的Y可以有不同的属性名,但必须出自相同的域集。
R与S的除运算得到一个新的关系P(X),P是R中满足下列条件的元组在X属性列上的投影:元组在X上分量值x的象集$Y_x$包含S在Y上投影的集合。

相当于除了之后只剩下X一个属性列,而保留的条件是X的象集在S对应的属性组中。

举例

解释

也就是说被除的关系的分量的象集必须包含S在对应属性组上的投影的集合!

关系的完整性

实体完整性

关系数据库中的每一个元组都是独一无二的,也就是说是可以区分的,唯一的。这样的约束条件用实体约束完整性来保证。

规则:若属性(一个或者是一组属性)A是基本关系R 的主属性,则A不能为空值NULL。

参照完整性

设F是基本关系R的一个或者一组属性,但不是关系R的码,$K_s$是基本关系S的主码,如果F与$K_s$对应,则称F为R的外码,并将基本关系R称为参照关系,基本关系S为被参照关系。

用户定义的完整性

不同数据库系统根据其应用环境的不同往往还需要一些特殊的约束条件,它反映某一具体应用所涉及的数据必须满足的语义要求。

相关文章
数据库 – 规范化依赖关系
问答我只是想确保我正确地思考它 1)完全依赖性是指一个或多个主键确定另一个属性 2)部分依赖性是当其中一个主键确定另一个或多个属性时 3)传递依赖性是当nonkey属性确定另一个属性时 我在想它吗?::这 ...
1
php – 在Laravel中跨多个数据库的belongsToMany关系
问答我有模型A和模型B,它们位于两个不同的数据库中. 现在我在与模型A相同的数据库中有一个名为a_bs的pivot_table. 我在模型A中设置了这样的belongsToMany relatinoshi ...
2
数据库 – 功能到关系映射比对象关系更容易?
问答对象关系映射已经很好的讨论,包括在这里.我有一些方法的经验和陷阱和妥协.真正的分辨率似乎需要改变OO或关系模型本身. 如果使用功能语言,同样的问题是否存在?在我看来,这两种模式应该比OO和RDBMS更 ...
1
mongodb – 文档导向数据库中的关系?
问答我对文档导向的数据库感兴趣,我想和MongoDB一起玩.所以我开始了一个相当简单的项目(一个问题跟踪器),但是很难以非关系的方式思考. 我的问题: >我有两个对象相互关联(例如issue = { ...
1
google-app-engine – GAE / J中的数据库设计:关系建模与实体属性值
问答想象一下,您计划创建一个在GAE / Java上运行的社交网络,其中每个用户都有一组属性(即年龄,当前城镇,兴趣). 备选方案1:经典方法 – user_id和每个属性作为"行" ...
5
数据库设计 – 创建关系模型图的工具
问答我正在寻找一个免费和简单的工具来创建关系模型图. 我需要的是能够绘制表格和字段,并将外键字段连接到引用的表. 作为一个例子,我发现这个image在网上. 我不需要任何东西:我想保持架构简单干净. 感谢 ...
1
postgresql – Postgres Plus云数据库与Amazon关系数据库服务(Amazon RDS)
问答Postgres Plus Cloud Database是在今年年初宣布的. 由于我在数据库集群方面没有很多经验,所以我想知道应该使用哪一个.任何人都可以在功能,成本和维护方面给我比较Postgres ...
2
数据库 – 在数据仓库(关系)中拥有外键是否很好?
问答我认为这个问题很清楚.我的datawarehouse表中的某些列可能与主键有关系.但这是不错的做法吗?它是非规范化的,所以它不应该再次被删除(数据仓库中的数据).希望的问题有点清楚.::我不知道.但是 ...
1
数据库设计 – 实体关系问题
问答我有4个相关的表(这是一个例子): Company: ID Name CNPJ Department: ID Name Code ID_Company Classification: ID Name ...
2
sql-server-2008 – 查看数据库的表关系树的方法?
问答朋友们,我正在研究ERP中的一个问题,其中包含大量的表格.我需要知道数据库中的表之间的整个关系来修复它.有没有办法看到所有的表与他们之间的数据库关系.我正在使用SQL Server Managemen ...
1
数据库模式 – 家谱关系映射为什么基于家庭
问答我正在开发一种基因组学应用程序,目前正处于建立个体之间关系的阶段. 根据我的研究,我注意到大多数关系的映射都是基于家庭(父亲的母亲),因此我想在盲目地采用它之前理解其背后的根本原因. 由于我的项目是父 ...
1
ios – 在数据库中获得关系计数的有效方法
问答我想知道在多对多关系中获取相关实体数量的最佳方法是什么.假设我的数据模型看起来像这样(简化),我想知道每辆公交车的乘客数量: 目前我可以想到两个选择: >为名为passengerCount的总线 ...
1
数据库 – 外行人识别关系的术语
问答关于在关系数据库中识别和非识别关系的问题存在差异/解释,有几个问题. 我的问题是,你能想到这些术语的简单术语吗?我知道技术术语必须具体而明确.但是,拥有一个"替代名称"可能会帮助学 ...
1
键值存储与RDBM与“云”数据库(SDB)的关系
问答在过去的几年中,我在MySQL空间设计了几个应用程序,然后不断改进性能和可扩展性方面,我感到很自在.我也有一些使用memcached的经验,可以在经常查询的结果集上提供应用程序端加速.最近我将Amaz ...
1
python – SQLAlchemy可以自动从数据库模式创建关系吗?
问答从具有外键的现有(SQLite)数据库开始,SQLAlchemy可以自动生成relationships吗? SQLAlchemy类通过__table_args__ = {'autoload':True ...
1
数据库 – Laravel迁移关系?
问答我知道你可以使用$this-> belongs_to(),$this-> has_many()等来简单地定义表关系,但是我不明白的是如何创建关系表;将两个表绑定在一起的表(我忘了这个术语被 ...
1
Hadoop与数据库之间的关系
问答好的..我试过在网站和这个网站上搜索这个问题的答案,这似乎是一个非常基本的问题.我是大数据处理的完整菜鸟. 我想知道HDFS和数据库之间的关系.是否总是有必要使用HDFS,数据是否采用某种NoSQL格 ...
1
数据库 – Oracle可选关系
问答定义与另一个表具有可选外键关系的oracle表的正确方法是什么?例如,一些员工记录已经定义了他们所在的国家(国家表中的FK),而有些则没有.::只允许列可以为空(不要使其为NOT NULL)并正常创建 ...
1
sql – 实体属性值数据库与严格关系模型电子商务
问答可以肯定地说,EAV/CR数据库模型是坏的.也就是说, 问题:应该使用什么数据库模型,技术或模式来处理描述电子商务产品的属性的"类",这些类可以在运行时更改? 在良好的电子商务数据 ...
2
Oracle Express中工作空间和数据库用户的关系是什么?
问答我用APEX创建了一个工作区,但密码现在无效. 然后我登录到工作区并更改了密码.但是,登录的其他密码不会更改. 我对oracle中的所有这些术语非常困惑. 我有数据库用户名,工作区用户名,数据库密码, ...
2