生物信息学中的数据管理/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]
- 生物体特定数据库
《核酸研究》杂志的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 设计转换为某个 DBMS 的数据规范语言中的模式。最常见的是,DBMS 使用关系模型。如果是这样,那么通过一个相当机械化的过程,抽象设计将被转换为一个具体的、关系型的设计,称为“关系数据库模式”。
实体(名词) | 关系(动词) |
---|---|
基因 | 被用于 |
实验 |
读取双向关系
[edit | edit source]多对多关系(无箭头)
- 一个 A **可以** 与多个 B 相关联,例如一个 **基因** 可以 **被用于** 多个 **实验**
- 一个 B **可以** 与多个 A 相关联,例如一个 **实验** 可以 **用于** 多个 **基因**
一对一(两侧都有箭头)
- 一个 A **可以** 与 **最多** 一个 B 相关联,例如一个 **DNA 分子** 可以 **转录** 为最多一个 **RNA 初级转录本**
- 一个 B **可以** 与 **最多** 一个 A 相关联,例如一个 **RNA 初级转录本** 可以 **转录** 自最多一个 **DNA 分子**
多对一(一个箭头指向 **一** 方)
- 一个 A **可以** 与 **最多** 一个 B 相关联,例如一个 **密码子** 可以 **编码** 为最多一个 **氨基酸**
- 一个 B **可以** 与 **多个** A 相关联,例如一个 **氨基酸** 可以 **编码** 由多个 **密码子**
三方关系
[edit | edit source]S => 学生,C => 课程,I => 教师
- 任何 (S,C) 对 **可以** 拥有多个 I
- 任何 (S,I) 对 **可以** 拥有多个 C
- 任何 (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 设计转换为关系数据库模式是一个相当机械化和直接的过程。
- 将每个实体集转换为具有相同属性集的关系,以及
- 用一个关系来代替一个关系,该关系的属性是连接的实体集的键
对于
- 多对多关系 - 表示关系的关系的键必须是参与实体集的键的并集
- 多对一关系 - 表示关系的关系的键必须来自多的一方
- 一对一关系 - 参与实体集的任何一方的键都可以作为关系的键
例如:
'takes' 的键取决于关系的基数。每个关系基数的键是
- 多对多关系 -> a,c
- 一对多关系 -> c
- 一对一关系 -> a 或 c
如果 'takes' 是一个一对多基数关系,则从模型生成的表将是
以下是 3 元关系生成表的示例。A、B 和 C 的表格被省略了。
以下两个表格中其中一个可能是可能的。
以下是一个一元关系的示例。
以下是一个其他示例。
在不同的州,可能存在许多同名的县。例如,名为 Montgomery 的县位于弗吉尼亚州、德克萨斯州、马里兰州等等。因此,县的名字不能作为县实体的键。然而,可以通过组合州名和县名来获取县的键。这样的实体在它们的属性中没有键被称为弱集或弱实体。这样的实体的键可以从某些相关实体的属性中获取。相关实体通常被称为识别实体。从弱集到其识别实体的关系被称为识别关系。
上面的 ER 图显示了州和县之间的二元关系。双边框矩形表示弱集,识别实体是州,因为州的两个字符和县名的组合识别了一个县。图中双边框关系的符号也表示识别关系。识别实体可以通过搜索双边框菱形并查看从菱形发出的箭头来找到。
弱集是实体集,它们不提供它们自己的所有键(参见图)。它们依赖于其他实体集来提供一些或所有键。我们使用以下方式对 E/R 图进行编码
请注意, 中没有写两次 。我们不需要完全编码弱关系。它隐含于 的编码中。
我们将下一个 E/R 图的实体集编码为
关于弱集的问题
[edit | edit source]不,它无效。对于 的任何实例,必须只有一个 ,否则它将具有相同类型键的多个实例。应该有一条指向 的箭头。
不,它无效。此图表示
- 对于每个 ,,都有一个
- 对于每个 ,,都有许多 s
- 对于每个 ,,都有一个 }
但这并不排除一个 具有多个 s 的可能性。没有明确的方法可以绘制一个弱集,该弱集从其他两个实体集中提取键,而没有使用 E/R 图绘制两个单独的关系。
弱集的起因
[edit | edit source]- 将关系转换为实体集(参见图)
- 层次结构
注意图 1 中,所有原始实体集都有指向它们的箭头。我们需要这些箭头,因为每个关系实体只能拥有一个, 和 。
层次结构是一个有趣的情况,它引入了我们到继承的概念。
在本节中,我们将讨论继承;什么是继承,为什么要使用继承,以及如何使用继承。
继承是指一个事物(一个实体集)是另一个事物(另一个实体集)的子集。
检查一个实体集 是否从另一个实体集 继承的一种方法是问:“ 是一个 ”。
继承是指当你能坦然地说“$A$ 是一个 $B$”,而且当你竞选公职时,没有人会指出你说过这句话。~Naren Ramakrishnan
以下哪些是有效的继承关系?
- 苹果 是一个 水果
- 苹果 是一个 牛
- g23 是一个 基因
- 第 1 个是正确的,因为苹果是一种水果。第 2 个是不正确的,因为苹果不是牛。然而,第 3 个也不正确,因为 g23 是一个特定的基因,它并不能完全体现我们想要在继承中看到的概念。一个更好的测试继承的方法是,如果你能说“$A$ 是一种 $B$”。
我们使用继承是为了赋予实体集的子集其父实体集的属性,并让子集在此基础上扩展额外的信息。当我们说“$A$ 是一个 $B$”时,我们已经在传达很多信息。例如,当我们说“苹果 是一个 水果”时,即使我们不太了解“苹果”是什么,我们也已经传达了“苹果”有种子,是更大植物的一部分,并且比典型的蔬菜更美味。
观察这个图。哺乳动物是动物,爬行动物也是。它们都有 id、属、重量、种和安全等级(无论那意味着什么)。哺乳动物和爬行动物都继承了这些属性。需要注意的是,在继承关系中,子实体集继承了父实体集的键。在这个例子中,哺乳动物和爬行动物的键都是它们的动物 id。
我们之所以要为哺乳动物和爬行动物创建单独的实体集,是因为我们想为它们添加属性。注意哺乳动物有毛发数量,爬行动物有蛋的数量。我们不需要创建一个全新的实体集来解释这一点,我们只需要使用继承来说明哺乳动物是一种有毛发数量的动物,而爬行动物是一种有蛋数量的动物。有些动物既有毛发数量,也有蛋的数量。我们称这些动物为“怪人”。从图中可以看出,如果我们只使用多重继承,让“怪人”既是哺乳动物又是爬行动物,我们就不需要为“怪人”添加任何额外的属性。隐含地,“怪人”也是动物,并且具有动物的所有属性,包括键 id。换句话说,继承是传递性的。
我们将图中的实体集编码为
我们不需要编码“怪人”,它们是隐含的。注意,虽然弱集有不同的键,但继承集没有不同的键。还要注意,继承集会获得其父集的所有属性,而不仅仅是一部分。
是的,这取决于关系。考虑农村县和州之间的关系,关系是“出售给”。还要注意,由于我们具有单一继承,因此我们必须为农村县添加属性。
是的,这可能有效。考虑新的关系也为“出售给”。