我即将构建一个web应用程序从生物基因表达数据检索值。我用来填充数据库的表是27,000行标记为基因idgene_A
,gene_B
,gene_C
etc...
,以及标记为细胞cell_1
,cell_2
,cell_3
,etc...
的50,000列。每个基因对每个细胞都有一个浮动值,范围在0到1之间。我想根据基因或细胞来查询。
我是sql新手,读到一对多的数据库设计在这里是合适的。但是,我是否需要为这5万个细胞或2.7万个基因中的每一个都制作一张新表格呢?这将如何影响性能?我能想到的唯一其他设计是将基因IDS作为行和单列'cell_expression'包含50,000个单元格值的JSON的表。但这可能会限制我对基因id的查询?
如果您能给我指个方向,我将不胜感激。
您想要一个包含两个键列的表:gene_id
和cell
。目前尚不清楚是否还有其他数据。例如,如果数据只是一个标志,那么只要有单元格的名称就足够了。或者您可能需要一个值。
我假设你有一个基因表达数据电子表格。如果您有更多,这个答案将需要一个额外的SQL表。
首先,创建一个Cell表。
Cell
----
Cell ID
Cell Name or descriptor
Cell ID是一个自动递增的整数,用作表的主键。根据您的描述,这个表将有50,000行。
接下来,我将创建一个Gene表。
Gene
----
Gene ID
Gene Name or descriptor.
Gene表的结构与Cell表的结构相似。根据您的描述,这个表将有27,000行。
最后,我们创建CellValue表。
CellValue
---------
Cell ID
Gene ID
Cell Value
主索引是(Cell ID, Gene ID)。你也会有一个唯一的索引(基因ID,细胞ID)。主索引允许您检索单元格名称的所有单元格值。唯一索引允许您检索一个基因名称的所有细胞值。
如果你选择一个基因和一个细胞,你将得到一个值。
现在,该表将包含13.5亿行,用于一个电子表格。我希望你有足够的存储空间。