トップ回答者
2次元の表をデータベースに格納する方法

質問
-
データベース設計初心者です。
以下のような形式のテキストファイルの2次元の表が何千ファイルと大量にあり、それをSQLServerのデータベースに格納したいです。
しかし、テーブルに入れようとすると1データ分しか入れられず、行部分をすべて横一列にするか、日付,時刻,行位置,列位置をキーに持って1つの数値ごとに格納する方法しか思いつきません。
1つの数値ごとに格納する方法は、一日に何百ファイルというファイルができ、そのファイルの中にも何百という数値データがあるので、莫大な量のデータになりそうであまり使いたくありません。
最終的にOLAPのような機能を使って、一つの数値を時系列で並べたり、表を重ねたイメージでそれぞれの位置の数値の平均などをとったりしたいと思っています。
何かいい方法があればご教授お願いします。
日付
時刻列1 列2 列3 ・・・列10 列11
行1 43 32 35 ・・・ 36 42
行2 45 31 53 ・・・ 38 41
行3 40 38 36 ・・・ 24 45
・
・
・
行30 40 35 36 ・・・ 38 43
行31 43 32 35 ・・・ 37 41わかりにくい説明ですが、よろしくお願いします。
回答
-
少し話がそれるかもしれませんが、2つの課題がありように思います。
1つは、テーブルの正規化(設計)の問題、2つ目は現在あるデータをどのようにSQL Serverのデータベースに格納するか、だと思います。まずは正規化をしましょう。OLAPの機能を使う場合、2つ方法が考えられます。マスターデータをもとにViewを作って参照する場合と、Viewではなく、Tableを作ってしまう場合があると思います。前者のViewを作る方法が一般的です。後者は、Viewへのアクセスが多い場合や、Viewを表示させるのに時間がかかる場合に、バッチ処理などで必要なデータを作成し参照専用のテーブルにデータを作ってしまうという場合です。
どちらにしても、テーブルの設計・正規化がポイントになると思います。データベース+正規化という言葉で検索すればいろいろ出てきます。例えば↓も参考になります。
2つ目はJimさんの記述どおりですね。テーブルの正規化が終わってから、SQL Serverに格納した方が手間が省けていいのではないかと思います。(もちろん、場合によりけりですが。) 私が個人的に好きな方法は、①テキストファイルをExcelで開き、データの整形をする。②整形してから、SQL ServerのデータベースにSQL Serverインポートおよびエクスポートウィザード を利用して、Excelから直接データをインポートする、です。(参考:http://support.microsoft.com/kb/321686)
もちろんSQL ServerインポートおよびエクスポートウィザードではFlatFileSourceも選べるので、Textのままでもできます。Jimさんの記述のようにたくさんあるので、目的に一番合う方法を見つけてください。
すべての返信
-
少し話がそれるかもしれませんが、2つの課題がありように思います。
1つは、テーブルの正規化(設計)の問題、2つ目は現在あるデータをどのようにSQL Serverのデータベースに格納するか、だと思います。まずは正規化をしましょう。OLAPの機能を使う場合、2つ方法が考えられます。マスターデータをもとにViewを作って参照する場合と、Viewではなく、Tableを作ってしまう場合があると思います。前者のViewを作る方法が一般的です。後者は、Viewへのアクセスが多い場合や、Viewを表示させるのに時間がかかる場合に、バッチ処理などで必要なデータを作成し参照専用のテーブルにデータを作ってしまうという場合です。
どちらにしても、テーブルの設計・正規化がポイントになると思います。データベース+正規化という言葉で検索すればいろいろ出てきます。例えば↓も参考になります。
2つ目はJimさんの記述どおりですね。テーブルの正規化が終わってから、SQL Serverに格納した方が手間が省けていいのではないかと思います。(もちろん、場合によりけりですが。) 私が個人的に好きな方法は、①テキストファイルをExcelで開き、データの整形をする。②整形してから、SQL ServerのデータベースにSQL Serverインポートおよびエクスポートウィザード を利用して、Excelから直接データをインポートする、です。(参考:http://support.microsoft.com/kb/321686)
もちろんSQL ServerインポートおよびエクスポートウィザードではFlatFileSourceも選べるので、Textのままでもできます。Jimさんの記述のようにたくさんあるので、目的に一番合う方法を見つけてください。
-
こんにちは!中川俊輔 です。
Jim Conniffさん、blink! さん、回答ありがとうございます。
kikutiyoさん、フォーラムのご利用ありがとうございます。
その後いかがでしょうか?
blink! さんが書いてくださったように、最終的な目的を達成するには
まずテーブル設計をしっかり行うのが重要だと思います。
まだ解決していないようでしたらぜひまた質問してください!
有用な情報と思われたため、Jim Conniffさん、blink! さんの回答へ回答済みチェックをつけさせていただきました。
回答済みチェックが付くことにより、有用な情報を探している方が情報を見つけやすくなります。
有用な情報と思われる回答があった場合は、なるべく回答済みボタンを押してチェックを付けてください。kikutiyoさんはチェックを解除することもできますので、ご確認ください。
それでは!