【问题标题】:Storing gene expression data in MySQL在 MySQL 中存储基因表达数据
【发布时间】:2019-08-22 05:08:10
【问题描述】:

我有 m x n 个基因表达数据矩阵,我想将它们存储在 MySQL 中,以便可以使用 PHP 编程进行搜索。

m 约为 100000 个样本(唯一可识别)
n 是大约 23,300 个基因(唯一可识别的)

我创建了如下三个表

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,
    `Expression_value` INT ,
    FOREIGN KEY(`gene_id`) REFERENCES genes (`gene_id`),
    FOREIGN KEY(`sample_id`) REFERENCES sample (`sample_id`),
) ENGINE=InnoDB;

问题是我如何从 mXn 矩阵中插入第三个表(gene_sample)中的值?

如何在gene_sample 表中存储对应于样本和基因的表达值?

【问题讨论】:

  • 基因和样本组合背后的来源/逻辑是什么?您想存储所有种可能的组合,还是其他?
  • 单个样本有23k个基因。这些组合需要存储,以便可以查询基因和样本。
  • 很遗憾,这并不能真正回答我的问题。
  • 是的,我想存储所有可能的组合。
  • 很好,但是你有一个 SQL 包含这个矩阵中的值吗?

标签: mysql


【解决方案1】:

假设 genessamples 表已经被填充,并且您想使用所有可能的组合来填充 gene_sample 联结表,您可以尝试使用带有交叉连接的插入:

INSERT INTO gene_sample (gene_id, sample_id)
SELECT g.gene_id, s.sample_id
FROM genes g
CROSS JOIN samples s;

当然,这不会为Expression_value 列分配任何值。但理想情况下,该列甚至不属于联结表。

【讨论】:

  • 非常感谢。那么我可以在哪里存储表达式值?我需要更多桌子吗?
  • 您可以存储这些值,假设它们对于每个基因和样本都是唯一的。这取决于您的数据。请注意,我的回答没有填充表达式值,因为您的问题没有提到它们出现在任何表格中。
  • 但是先生,这是我的问题,我如何存储与样本和基因相对应的表达值?
猜你喜欢
  • 2016-08-28
  • 2018-08-24
  • 2016-04-29
  • 2020-11-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多