Bootstrap

(2)R包,GO.db调研(数据库构建角度解析)

本文从数据库构建角度,详解R包中的GO.db的构建方式;为开发相应数据库提供预备知识

目录

1.概述
2.GO.db的数据对象组成
3.GO.db中存储的数据对象的构建规则
4.GO.db的Sqlite数据库的表的结构

1.概述:

R语言里的GO.db数据库的数据存储过程由两步组成:首先将基本的id号和definition等数据封装在GO.sqlite数据库里,然后使用R语言中的AnnotaionDbi接口与数据库交互,通过AnnotaionDbi接口将数据库中的部分数据取出,封装成AnnotationDbi的对象(objects)。
此时,即可通过columns(x)、keytypes(x)、keys(x, keytype, …)、select(x, keys, columns, keytype, …)四个函数对封装好的AnnotationDbi对象,进行访问和数据获取。

2.GO.db的数据对象组成:

因为GO的定义分为三种:细胞组件(cc)、分子功能(mf)、生物学过程(bp)
所以GO.db在R中封装的对象(objects)按照这三种不同,进行了分类:

  • GOBPANCESTOR、GOBPCHILDREN、GOBPOFFSPRING、GOBPPARENTS
  • GOCCANCESTOR、GOCCCHILDREN、GOCCOFFSPRING、GOCCPARENTS
  • GOMFANCESTOR 、GOMFCHILDREN、GOMFOFFSPRING、GOMFPARENTS
  • 其它data sets:GOOBSOLETE 、GOSYNONYM、GOTERM、GOMAPCOUNTS

以BP过程为例:每个对象封装的数据含义如下(ancestor\children\offspring\parents返回的都是GO的ID号,它们是表征了一种association):
GOBPANCESTOR
Annotation of GO Identifiers to their Biological Process Ancestors
GOBPCHILDREN
Annotation of GO Identifiers to their Biological Process Children
GOBPOFFSPRING
Annotation of GO Identifiers to their Biological Process Offspring
GOBPPARENTS
Annotation of GO Identifiers to their Biological Process Parents
另外的几个datasets含义如下:
GOMAPCOUNTS
Number of mapped keys for the maps in package GO.db
GOOBSOLETE
Annotation of GO identifiers by terms defined by Gene Ontology Consortium and their status are obsolete
GOSYNONYM
Map from GO synonyms to GO terms
GOTERM
This data set gives mappings between GO identifiers and their respective terms(R语言里面有GOTerms这个类,所以这里的GOTERM就直接使用GO的id号mapped to it)
需要注意的是,R语言里面存储annotation maps的数据结构是Bimap,所以GO.db里除了mapcounts外,其它所有的对象都属于Bimap(在AnnotationDbi中定义了Bimap接口)

3.GO.db中存储的数据对象的构建规则:

R语言提供了与数据库交互的接口,来帮助我们存储相应的数据。在生物里,R语言中的数据存储的类,根据数据类型不同,可分为AnntoationDb类、OrgDb类、ChipDb类、TxDb类。所以,AnnotationDbi就是对Annotation类的数据库提供的一个接口(Interface),用来帮助R中的Annotation对象和sqlite数据库交互。
需要注意的是,我们如果要自己在R语言中构建数据存储对象的话,一般情况下都要提供select()方法,供数据查询。select()构建方法详见:Creating select Interfaces for custom Annotation resources.pdf
R中GO.db\KEGG.db\REACTOME.db都属于Annotation类的数据库,所以构建方法基本一致:通过AnnotationDbi提供的接口,构建相应的objects用于存储数据,并为这些objects提供column()、select()、keys()、keytypes()函数,来访问objects中的数据。

4.GO.db的Sqlite数据库的表的结构

查看了GO.db源码中的sqlite表,一共含有13张表。sqlite中存储的表的内容很简洁,主要是一些id号的对应关系。
GO.db

以go_bp_offspring表为例,表里只有两列(columns),目前不是很清楚_id(它不是GO_id,但在GO_term里面是主键)代表什么意思,但可以肯定它是唯一存在的,_offspring_id的含义是_id所对应的子代
go_bp_offspring

用Navicat查看整个sqlite数据库的E-R模型,是这样:
go.db-E-R

go_term表最重要,通过这张表,关系也看的很明确,_id是主键,表征了唯一性,其它的数据(offspring/ancestor/parent等)都是从id出发(其它数据表以_id指向go_term表的_id,即go_term的_id是它们的外键,从而建立联系)

;