最初の正規形に到達するために、古い MySQL テーブルから BLOB を取り出して新しいテーブルを作成しようとしています。ただし、データベースに既に存在するデータを BLOB から新しいテーブルの複数の行に変換するのは簡単なことではありません。
SQL コマンドで変換を行う最も簡単な方法は何ですか?
親テーブル:
CREATE TABLE TEST.People (
`id` INT AUTO_INCREMENT,
`age` INT,
`height` INT,
`weight` INT ,
`variations` BLOB DEFAULT NULL,
PRIMARY KEY (`id`),
);
新しいテーブル:
CREATE TABLE TEST.Variations (
`id` INT AUTO_INCREMENT,
`chr` INT,
`start` INT,
`stop` INT ,
`type` ENUM('SNP','INDEL','CNV') DEFAULT NULL,
PRIMARY KEY (`id`),
);
SELECT id,variations FROM TEST.People; を実行すると、私は得る:
+----+----------------------------------------------------------------------------------------------------------------------+
| id | variations |
+----+----------------------------------------------------------------------------------------------------------------------+
| 3 | xp t !3:124093754-124467278/CNVt 7:78030601-79638023/CNV |
| 6 | xp |
| 9 | xp |
| 12 | xp t !1:84289718-85466763/CNV |
| 15 | xp |
| 18 | xp |
| 21 | xp |
| 24 | xp |
| 27 | xp |
| 30 | xp t !10:166909544-166909544/SNPt !2:66903445-66903445/SNPt !2:166897864-166897864/CNVt !7:6892788-6892788/SNP |
+----+----------------------------------------------------------------------------------------------------------------------+
したがって、変換後に TEST.Variations テーブルに持たせたいのは次のとおりです。
+----+-----+-----------+-----------+----------+
| id | chr | start | stop | type |
+----+-----+-----------+-----------+----------+
| 3 | 3 | 124093754 | 124467278 | CNV |
| 3 | 7 | 78030601 | 79638023 | CNV |
| 12 | 1 | 84289718 | 85466763 | CNV |
| 30 | 10 | 166909544 | 166909544 | SNP |
| 30 | 2 | 66903445 | 66903445 | SNP |
| 30 | 2 | 166897864 | 166897864 | CNV |
| 30 | 7 | 6892788 | 6892788 | SNP |
+----+-----+-----------+-----------+----------+