Как создать коррелированные таблицы в геномной базе данных SQLite3 - PullRequest
0 голосов
/ 24 декабря 2018

Я совершенно новичок в 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

Мои запросы будут включать поиск по Chr, Start, End, чтобы показать, какие абоненты имеют эти координаты, а также поиск по гену.Но я сомневаюсь, как создавать таблицы.Я могу создать таблицу с Chr Start End Ref Alt Callers, но как связать ее с другой таблицей, имеющей образцы или гены?Координата (Chr Start End) может иметь несколько связанных выборок или вызывающих абонентов.

Примером запросов может быть ввод координат и отображение всей информации, а также поиск по гену и отображение всех координат, включающих этот ген

В основном я хотел бы знать, сколько таблиц следует создатьи как их связать.Я понимаю, что моя таблица координат будет родительской таблицей.

Какие элементы должны быть ключами в разных таблицах?

1 Ответ

0 голосов
/ 04 января 2019

Я ничего не знаю о геномах, но, основываясь на данных и вашем описании, это похоже на несколько отношений 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';

Возможно, вам потребуется настроить типы соединения на основе любых нулей и набора данных, который вы ищете,Возможно, вам придется создать другую таблицу для образцов, если они не 1: 1 с вызывающими.Надеюсь, я правильно истолковал ваши данные, и это, по крайней мере, может указать вам правильное направление.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...