2016-05-03 7 views
3

私はMySQLに保存したい遺伝子発現データの数m×nの行列を持っています。MySQLのジャンクションテーブルに遺伝子発現データを格納する必要はありますか?

メートルを約3万遺伝子(一意に識別)
nは約3,000サンプル(主に一意に識別)

私は最善の方法は、これらのデータを格納することが何であるかはよく分からないです。私は最初に行列をMySQLテーブルに直接読み込んでいましたが、カラム数(サンプル数)が可変であるため、これは素晴らしい方法ではないと言われてきました。行列を転置して格納することはできません。なぜなら、列を作成するときにMySQLが許すよりも多くの遺伝子があるからです。

私はこれまで、「接合テーブル」がこれを行うためのよりよい方法であるかもしれないと言われてきました。しかし、これらのいくつかのYouTubeのビデオを見た後、私は誰も賢明ではない。また、Googleで検索しましたが、ジャンクションテーブルを使用してMySQLに遺伝子発現データを格納する方法についてのチュートリアルはないようです。だから、誰もこれらのデータをどのようにして保存するのがよいかについてアドバイスをしていますか?私は正直なところ、これに関する巨大な文献があると予想していました。有用なリンクがあれば、それも高く評価されます。あなたは、このためのちょうどいくつかのテーブルを必要とする

+1

私はあなたを見つけるか、いくつかのカスタムストレージエンジンを実装していない限り、MySQLは、この事のために準備ができていないと思います。あなたはギブスを見ましたか?このようなもの、多分 - https://github.com/phenotips/phenotips。また、私はあなたにいくつかの遺伝的な総理的な新しい世界秩序を実装することを願っていますので、あなたの恐怖の統治に対して対処することができます – strangeqargo

+1

医療情報は、リレーショナルデータベースを使用する際に通常EAVデータモデルに保存されます。そのモデルは基本的に行の列を「交換」します。このモデルは、通常の関係演算(結合、検索など)には非常に使いにくいですが、未知数の属性(列)を持つ多くのデータを格納するのに非常に効率的です。 "EAV MySQL"のグーグルリングは十分な情報を得ます。 – Mjh

+0

@Mjhありがとうございますが、これはかなり正しいとは言えません。ウィキペディアの記事によると、このEAVモデルはスパース行列に最適ですが、私が持っている行列は密である(実際には空の値はありません)。さらに、私は遺伝子を列にすることはできません。なぜなら、MySQLの自己制限には多すぎる数があるからです。 –

答えて

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_sampleテーブルにgene_idsample_idのペアを挿入します。

2本使用は、SELECTでの表現は、完全なデータを再構築するために、JOIN:

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

私は今理解していると思うよ!したがって、gene_sampleテーブルには3つの列がありますが、各固有の遺伝子とサンプルのペアに対応するm x nの行はありますか?独創的。 –

+0

2列または3列のgene_sampleテーブルを使用できます.3列のバリアントには、削除に使用できるIDがあります。また、表の値を3列目に付けることもできます。上記のコードでは、テーブルに1と0だけがあると仮定して、値フィールドを不要にしました。 – Adder

+0

簡単なフォローアップでは、結合式は完全なデータを再作成しますが、元のm x n形式では再作成しないことに注意してください。これは可能ですか? –

関連する問題