在MySQL中存储基因表达数据 - 需要连接表吗?

时间:2016-05-03 13:21:31

标签: mysql join matrix junction-table

我有几个m x n基因表达数据矩阵,我想存储在MySQL中。

m是大约30,000个基因(可唯一识别)
n是大约3,000个样本(大多数是唯一可识别的)

我不确定存储这些数据的最佳方法是什么。我最初直接将矩阵读入MySQL表,但后来我被告知这不是一个很好的方法,因为列数(样本)是一个可变数量。我无法转置矩阵并以这种方式存储它们,因为在创建列时,有比MySQL更多的基因。

我被告知过'交接表'可能代表了一种更好的方法。然而,在观看了几部关于这些视频的YouTube视频之后,我并不聪明。我也搜索过Google,并且似乎没有使用联结表在MySQL中存储基因表达数据的教程。那么,有没有人对如何最好地存储这些数据有任何建议?我真的希望有关于此的大量文献,所以如果你有有用的链接,也会非常感激。

1 个答案:

答案 0 :(得分:3)

你只需要几个表,我使用的是mysql语法:

CREATE TABLE genes (
`gene_id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
`gene_name` varchar(99) not null
)ENGINE=InnoDB;

CREATE TABLE samples (
`sample_id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
`sample_name` varchar(99) not null
)ENGINE=InnoDB;

CREATE TABLE gene_sample (
`gene_id` INT NOT NULL,
`sample_id` INT NOT NULL,
FOREIGN KEY(`gene_id`) REFERENCES genes (`gene_id`),
FOREIGN KEY(`sample_id`) REFERENCES sample (`sample_id`),
)ENGINE=InnoDB;

对于样本中出现的每个基因,请将gene_idsample_id对插入gene_sample表。

在SELECT中使用两个JOIN表达式来重建完整数据:

SELECT genes.*, samples.* 
FROM gene_sample 
LEFT JOIN genes USING (gene_id) 
LEFT JOIN samples USING (sample_id);