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