如何在基因组数据库SQLite3



我对sqlite3很陌生,但我想用它来存储我所拥有的一些基因组数据,因为从R进行操作需要大量时间来处理。我想在数据库建立后进行一些基本查询,但我的问题是,我不知道应该创建哪些表才能进行适当的查询。

这就是我的大桌子的样子:

Chr Start   End Ref Alt Callers GATK_Illumina.counts    GATK_Illumina.samples   GATK_SOLiD.counts   GATK_SOLiD.samples  LIFE_SOLiD.counts   LIFE_SOLiD.samples  TVC_Ion.counts  TVC_Ion.samples Func.refGene    Gene.refGene
chr1    14948   14948   G   A   GATK_SOLiD  0.38    noSample    1.125   XK713   0.125   noSample    13.43   17E334|17E424|17H593|17J782|17J913|1B566    ncRNA_intronic;downstream   WASH7P;DDX11L1
chr1    14948   14948   G   A   TVC_Ion 0.38    noSample    1.125   XK713   0.125   noSample    13.43   17E334|17E424|17H593|17J782|17J913|1B566    ncRNA_intronic;downstream   WASH7P;DDX11L1
chr1    15820   15820   G   T   GATK_SOLiD  0.38    noSample    1.125   1E695   0.125   noSample    4.43    17E574|17H906|5K083B|6C418  ncRNA_exonic    WASH7P
chr1    15820   15820   G   T   TVC_Ion 0.38    noSample    1.125   1E695   0.125   noSample    4.43    17E574|17H906|5K083B|6C418  ncRNA_exonic    WASH7P
chr1    17452   17452   C   T   GATK_SOLiD  0.38    noSample    1.125   1H823   0.125   noSample    12.43   17G118|17G937|17H906|17J610|17M152|4E832|5C725|5F445|5F685|5H986|5J427  ncRNA_intronic;upstream WASH7P;MIR6859-1;MIR6859-2;MIR6859-3;MIR6859-4
chr1    17452   17452   C   T   TVC_Ion 0.38    noSample    1.125   1H823   0.125   noSample    12.43   17G118|17G937|17H906|17J610|17M152|4E832|5C725|5F445|5F685|5H986|5J427  ncRNA_intronic;upstream WASH7P;MIR6859-1;MIR6859-2;MIR6859-3;MIR6859-4
chr1    17538   17538   C   A   GATK_SOLiD  0.38    noSample    3.125   1E695|1H586|9J385   0.125   noSample    24.43   17C851B|17C918|17D521B|17E424|17F076    ncRNA_intronic;upstream WASH7P;MIR6859-1;MIR6859-2;MIR6859-3;MIR6859-4
chr1    17538   17538   C   A   TVC_Ion 0.38    noSample    3.125   1E695|1H586|9J385   0.125   noSample    24.43   17C851B|17C918|17D521B|17E424|17F076    ncRNA_intronic;upstream WASH7P;MIR6859-1;MIR6859-2;MIR6859-3;MIR6859-4

我的查询将包括按ChrStartEnd进行搜索,以显示哪些呼叫者具有这些坐标,以及按基因进行搜索。但我怀疑的是如何创建表格。我可以用Chr Start End Ref Alt Callers创建一个表,但如何与另一个具有样本或基因的表链接?坐标(Chr Start End)可以链接多个样本或调用方。

查询的例子是键入坐标并显示所有信息,按基因搜索并显示包括该基因的所有坐标

基本上,我想知道我应该创建多少个表,以及如何链接它们。我知道我的坐标表将是父表。

哪些元素应该是不同表中的键?

我对基因组一无所知,但根据数据和您的描述,这似乎是几个1:n关系,您希望使用主键/外键创建关系实体。我不知道你对SQL有多熟悉,你可以在这里查看更多关于使用它的信息:https://www.w3schools.com/sql/

您可能想创建这样的表,但如果有额外的1:n或n:n关系:

genes
gene_id, gene_name, data1, data2
// 1 gene -> many coords
gene_coords
gene_id, chr, start, end, data1, data2
// 1 coord -> many callers (and/or samples)
gene_callers // Are callers & samples 1:1?
gene_id, caller, sample

您可以使用坐标&chr有这样的东西:

SELECT gene_callers.callers FROM gene_callers
JOIN gene_coords ON gene_coords.gene_id = gene_callers.gene_id
WHERE gene_coords.start = 14948 AND gene_coords.end = 14948
AND gene_coords.chr = 'chr1';

我不确定你是否会根据坐标范围查询多个基因,如果是,那么你可能不想将起始/结束存储为相同的值,只需将其存储为坐标,并在该字段上使用BETWEEN。例如,这个查询还将获得基因数据。

SELECT gene.*, gene_callers.callers FROM gene_callers
JOIN gene ON gene.gene_id = gene_callers.gene_id
JOIN gene_coords ON gene_coords.gene_id = gene_callers.gene_id
WHERE gene_coords.coord BETWEEN 14948 AND 17538;

要通过基因名称获取呼叫者,您可以这样做:

SELECT gene_callers.callers FROM gene_callers
JOIN gene ON gene.gene_id = gene_callers.gene_id
WHERE gene.gene_name = 'a_gene';

您可能需要根据任何null和您要查找的数据集调整连接类型。如果示例与调用方不是1:1,则可能需要为它们创建另一个表。希望我能正确解读你的数据,这至少能为你指明正确的方向。

最新更新