跳转至内容

生物信息学中的数据管理/ER理论

来自维基教科书,开放书籍,开放世界
章节导航
顶部 E/R理论 - 规范化 - 数据查询 - 集成SQL和编程语言

关系理论

[编辑 | 编辑源代码]

生物数据库简介

[编辑 | 编辑源代码]

生物体被归类为原核生物真核生物。分子生物学中心法则规定DNA被转录成mRNA,然后被翻译成蛋白质。蛋白质在细胞中执行生命功能。

细胞中的遗传物质由几条DNA双螺旋链组成,形成超螺旋结构。DNA分子由糖磷酸骨架组成,在其上核苷酸形成碱基对。4个碱基用字母A、C、T和G表示。在DNA双螺旋中,T与A配对,C与G配对。

一些生物数据库示例

[编辑 | 编辑源代码]
  • 基因组
    • GenBank:由NIH维护的,包含所有公开可用DNA序列的集合。 [1]
  • 蛋白质
    • PDB:蛋白质数据库 [2]
  • 功能和注释
  • 相互作用数据库 - 蛋白质-蛋白质相互作用
    • BIND:生物分子相互作用网络数据库 [3]
  • 通路
    • 化学反应通路:KEGG京都基因和基因组百科全书
    • 信号转导(例如,对外部信号的反应):STKE信号转导知识环境 [4]
  • 文本
    • PubMed:生物学研究文章的集合。 [5]
  • 生物体特定数据库
    • 酵母 [6]
    • 病原体:PATRIC 此数据库托管在VBI上。

核酸研究》杂志的1月期刊是生物数据库目录。

课程内容

[编辑 | 编辑源代码]
  • 数据模型
    • 关系型
    • 面向对象
    • 层次型
    • 半结构化
    • 非结构化(例如文本)
  • 查询模型:SQL
  • 信息集成
  • 数据挖掘

关系模型

[编辑 | 编辑源代码]
集合
对象的集合
是两个集合,
笛卡尔积
是包含所有可能的对的集合,从集合中取一个对象,从集合中取另一个对象。
A × B = {(a,1),(a,2),(a,4),(b,1),(b,2),(b,4),(c,1),(c,2),(c,4)}
关系
是笛卡尔积的子集。


关系的示例

[编辑 | 编辑源代码]
基因ID 名称 注释 实验ID 实验描述 表达水平
g2347 p53 肿瘤抑制基因 e0 热休克 +2
g2347 p53 肿瘤抑制基因 e1 冷休克 -1
g2347 p53 肿瘤抑制基因 e2 干燥 0
... ... ... ... ... ...

以上是一个非规范化关系的示例。它存在以下问题:

  • 冗余:基因信息在不同的实验中重复出现,并且实验信息可能在多个基因中出现。
  • 更新异常:如果需要更新基因的注释,则需要更新表的几行。
  • 删除异常:删除基因会导致丢失有关实验的信息。

设计表

[编辑 | 编辑源代码]

实体关系图

[编辑 | 编辑源代码]

E/R 图 关系/表

上图展示了 E/R 模型在数据库设计中的应用。我们首先从想要建模的信息入手,将其表达在 E/R 模型中。然后,我们将抽象的 E/R 设计转换为某个 DBMS 的数据规范语言中的模式。最常见的是,DBMS 使用关系模型。如果是这样,那么通过一个相当机械化的过程,抽象设计将被转换为一个具体的、关系型的设计,称为“关系数据库模式”。

实体(名词) 关系(动词)
基因 被用于
实验

读取双向关系

[edit | edit source]

多对多关系(无箭头)

  1. 一个 A **可以** 与多个 B 相关联,例如一个 **基因** 可以 **被用于** 多个 **实验**
  2. 一个 B **可以** 与多个 A 相关联,例如一个 **实验** 可以 **用于** 多个 **基因**

一对一(两侧都有箭头)

  1. 一个 A **可以** 与 **最多** 一个 B 相关联,例如一个 **DNA 分子** 可以 **转录** 为最多一个 **RNA 初级转录本**
  2. 一个 B **可以** 与 **最多** 一个 A 相关联,例如一个 **RNA 初级转录本** 可以 **转录** 自最多一个 **DNA 分子**

多对一(一个箭头指向 **一** 方)

  1. 一个 A **可以** 与 **最多** 一个 B 相关联,例如一个 **密码子** 可以 **编码** 为最多一个 **氨基酸**
  2. 一个 B **可以** 与 **多个** A 相关联,例如一个 **氨基酸** 可以 **编码** 由多个 **密码子**

三方关系

[edit | edit source]

S => 学生,C => 课程,I => 教师

  1. 任何 (S,C) 对 **可以** 拥有多个 I
  2. 任何 (S,I) 对 **可以** 拥有多个 C
  3. 任何 (C,I) 对 **可以** 拥有多个 S

替换三方关系

[edit | edit source]

以下是以另一个三方关系(三元关系)为例。

该关系可以用一组二元关系来代替,如下所示。

例如:

A => 医生,B => 患者,C => 药物,R => 开处方

R A B C
r1 a1 b1 c2
r2 a1 b2 c1
r3 a2 b1 c1
r4 a2 b1 c2

然而,该图与以下图并不等效。

图中的双向关系为 (A,B)、(B,C) 和 (C,A)。这三个二元关系与给定的三元关系有着不同的含义。例如,一组医生与特定患者和药物对的关联无法用二元关系来建模。

它是对是否应该将关系表示为三元关系还是一组二元关系(如上所述)进行建模的决策。

框定双向关系

[edit | edit source]

通常,框定某事物意味着该实体很重要,需要拥有自己的空间,而不是一个用来建模关系的概念。当框定关系时,实体的名称通常会成为关系名称中动词的词组。

例如,以下 E/R 模型。

该模型的表示例如下:

出生 母亲 婴儿
b1 汤姆
b2 玛丽
b3 罗伯特

以下模型也可以用来代替原始模型,但它与之前的模型有着不同的含义。该模型的表示例如下:

出生 母亲 婴儿
b1 汤姆
b1 玛丽
b2 罗伯特

这种关系的框定提供了更大的灵活性。

属性,键

[edit | edit source]

实体或关系的属性称为属性。属性表示为附加在实体或关系上的气球。属性也需要作为列出现在表中。

基因表达过程可以分为几个步骤,转录过程是其中一个步骤。mRNA 通过转录过程从 DNA 合成。同样,cDNA 通过逆转录过程从 mRNA 合成。微阵列是一种芯片,在其表面排列着大量 DNA 序列。在 DNA 微阵列实验中,合成的 cDNA 被倒入芯片,cDNA 通过杂交与芯片上的互补 DNA 序列结合。测量结合的 cDNA 量可以量化实验中的基因表达水平。

如前所述,关系也可以有属性。

以下是以具有属性的关系为例。


一个属性或一组属性,其值对于每个实体实例都是唯一的,称为候选键。一个实体可以有多个候选键,选定用来标识实体的候选键称为(主)键。在 ER 图中,键的名称用下划线标记。例如,ssn 和 sid 对于所有学生都是唯一的,因此两者都是候选键。ssn 或 sid 可以被选作实体类型“学生”的主键。

从 ERD 创建表

[edit | edit source]

将 E/R 设计转换为关系数据库模式是一个相当机械化和直接的过程。

  1. 将每个实体集转换为具有相同属性集的关系,以及
  2. 用一个关系来代替一个关系,该关系的属性是连接的实体集的键

对于

  1. 多对多关系 - 表示关系的关系的键必须是参与实体集的键的并集
  2. 多对一关系 - 表示关系的关系的键必须来自多的一方
  3. 一对一关系 - 参与实体集的任何一方的键都可以作为关系的键

例如:

'takes' 的键取决于关系的基数。每个关系基数的键是

  1. 多对多关系 -> a,c
  2. 一对多关系 -> c
  3. 一对一关系 -> a 或 c

如果 'takes' 是一个一对多基数关系,则从模型生成的表将是

以下是 3 元关系生成表的示例。A、B 和 C 的表格被省略了。

以下两个表格中其中一个可能是可能的。

以下是一个一元关系的示例。

以下是一个其他示例。

在不同的州,可能存在许多同名的县。例如,名为 Montgomery 的县位于弗吉尼亚州、德克萨斯州、马里兰州等等。因此,县的名字不能作为县实体的键。然而,可以通过组合州名和县名来获取县的键。这样的实体在它们的属性中没有键被称为弱集或弱实体。这样的实体的键可以从某些相关实体的属性中获取。相关实体通常被称为识别实体。从弱集到其识别实体的关系被称为识别关系。

上面的 ER 图显示了州和县之间的二元关系。双边框矩形表示弱集,识别实体是州,因为州的两个字符和县名的组合识别了一个县。图中双边框关系的符号也表示识别关系。识别实体可以通过搜索双边框菱形并查看从菱形发出的箭头来找到。


弱集是实体集,它们不提供它们自己的所有键(参见图)。它们依赖于其他实体集来提供一些或所有键。我们使用以下方式对 E/R 图进行编码

请注意, 中没有写两次 。我们不需要完全编码弱关系。它隐含于 的编码中。

我们将下一个 E/R 图的实体集编码为

关于弱集的问题

[edit | edit source]
这个 E/R 图有效吗?

不,它无效。对于 的任何实例,必须只有一个 ,否则它将具有相同类型键的多个实例。应该有一条指向 的箭头。

这个 E/R 图有效吗?

不,它无效。此图表示

  1. 对于每个 ,都有一个
  2. 对于每个 ,都有许多 s
  3. 对于每个 ,都有一个 }

但这并不排除一个 具有多个 s 的可能性。没有明确的方法可以绘制一个弱集,该弱集从其他两个实体集中提取键,而没有使用 E/R 图绘制两个单独的关系。

弱集的起因

[edit | edit source]
  1. 将关系转换为实体集(参见图)
  2. 层次结构

注意图 1 中,所有原始实体集都有指向它们的箭头。我们需要这些箭头,因为每个关系实体只能拥有一个

层次结构是一个有趣的情况,它引入了我们到继承的概念。

在本节中,我们将讨论继承;什么是继承,为什么要使用继承,以及如何使用继承。

什么是继承?

[编辑 | 编辑源代码]

继承是指一个事物(一个实体集)是另一个事物(另一个实体集)的子集。

检查一个实体集 是否从另一个实体集 继承的一种方法是问:“ 是一个 ”。

继承是指当你能坦然地说“$A$ 是一个 $B$”,而且当你竞选公职时,没有人会指出你说过这句话。~Naren Ramakrishnan

以下哪些是有效的继承关系?

  1. 苹果 是一个 水果
  2. 苹果 是一个 牛
  3. g23 是一个 基因
  1. 第 1 个是正确的,因为苹果是一种水果。第 2 个是不正确的,因为苹果不是牛。然而,第 3 个也不正确,因为 g23 是一个特定的基因,它并不能完全体现我们想要在继承中看到的概念。一个更好的测试继承的方法是,如果你能说“$A$ 是一种 $B$”。

为什么要使用继承?

[编辑 | 编辑源代码]

我们使用继承是为了赋予实体集的子集其父实体集的属性,并让子集在此基础上扩展额外的信息。当我们说“$A$ 是一个 $B$”时,我们已经在传达很多信息。例如,当我们说“苹果 是一个 水果”时,即使我们不太了解“苹果”是什么,我们也已经传达了“苹果”有种子,是更大植物的一部分,并且比典型的蔬菜更美味。

观察这个图。哺乳动物是动物,爬行动物也是。它们都有 id、属、重量、种和安全等级(无论那意味着什么)。哺乳动物和爬行动物都继承了这些属性。需要注意的是,在继承关系中,子实体集继承了父实体集的键。在这个例子中,哺乳动物和爬行动物的键都是它们的动物 id。

我们之所以要为哺乳动物和爬行动物创建单独的实体集,是因为我们想为它们添加属性。注意哺乳动物有毛发数量,爬行动物有蛋的数量。我们不需要创建一个全新的实体集来解释这一点,我们只需要使用继承来说明哺乳动物是一种有毛发数量的动物,而爬行动物是一种有蛋数量的动物。有些动物既有毛发数量,也有蛋的数量。我们称这些动物为“怪人”。从图中可以看出,如果我们只使用多重继承,让“怪人”既是哺乳动物又是爬行动物,我们就不需要为“怪人”添加任何额外的属性。隐含地,“怪人”也是动物,并且具有动物的所有属性,包括键 id。换句话说,继承是传递性的。

我们如何使用继承?

[编辑 | 编辑源代码]

我们将图中的实体集编码为

我们不需要编码“怪人”,它们是隐含的。注意,虽然弱集有不同的键,但继承集没有不同的键。还要注意,继承集会获得其父集的所有属性,而不仅仅是一部分。

关于继承的问题

[编辑 | 编辑源代码]
这个图可能有效吗?

是的,这取决于关系。考虑农村县和州之间的关系,关系是“出售给”。还要注意,由于我们具有单一继承,因此我们必须为农村县添加属性。

图中的关系可能有效吗?

是的,这可能有效。考虑新的关系也为“出售给”。

华夏公益教科书