1

データ分析を容易にするために、データの巨大なスプレッドシートをデータベースに変換しようとしていますが、列が多すぎるという問題が発生しています。私は正規化について学ぶために最善を尽くしましたが、このユースケースにそれを適用するのに苦労しています。

シナリオ

長方形のブロックでN個の独立した測定を実行しています。測定には以下が含まれます:

  • 長さ(または測定値0)
  • 幅(または測定1)
  • 高さ(または測定2)
  • 質量(または測定3)
  • 色(または測定4)
  • ..。
  • 測定N

7000以上の測定値(複雑なブロック)があります!測定には限界があります。ブロックが1つ以上の測定に失敗した場合、検証のためにすべての測定が繰り返されます。再度失敗した場合、ブロックは失敗と見なされます。

ブロックはシリアル化されており、何千もあります。

情報源

巨大なスプレッドシート(​​表)。フィールドは次のとおりです。ブロック番号、長さ、幅、高さ、質量、色、...、測定N。各行は、1回のテスト実行またはすべての測定の実行を表します。再テストポリシーがあるため、同じブロックの結果を含む複数の行が存在する可能性があります。

ヘルプ!

このソーステーブルは直感的な形式のように見えますが、データベースに最適な形式ではないようです。最初にそれをSQLiteデータベースに入れようとしましたが、2000列の制限に遭遇しました。はい、より多くの列でSQLiteを再コンパイルしたり、別のデータベースエンジンを使用したりできますが、これはデータベース設計の問題のように思えます。より良いデザインのアイデアはありますか?

PS長い間申し訳ありませんが、読んでくれてありがとう!

4

1 に答える 1

1

MeasurementTypeすべての測定値の名前と、測定値に関して保存したいその他の情報を保持するためのテーブルが必要なようです。

次に、スプ​​レッドシートの「元の」テーブルと「元の」テーブルのMeasurement両方を参照するテーブルが作成MeasurementTypeされます(つまり、Block Number列が残っているテーブル)。

CREATE TABLE MeasurementType (
    MeasurementTypeId INTEGER PRIMARY KEY AUTOINCREMENT,
    MeasurementType TEXT NOT NULL);

CREATE TABLE OriginalTable (
    OriginalTableId INTEGER PRIMARY KEY AUTOINCREMENT,
    BlockNumber INTEGER NOT NULL);

CREATE TABLE Measurement (
    MeasurementTypeId INTEGER NOT NULL,
    OriginalTableId INTEGER NOT NULL,
    MeasurementValue,
    PRIMARY KEY (MeasurementTypeId, OriginalTableId),
    FOREIGN KEY (MeasurementTypeId) REFERENCES MeasurementType (MeasurementTypeId),
    FOREIGN KEY (OriginalTableId) REFERENCES OriginalTable (OriginalTableId));
于 2012-09-04T07:37:50.547 に答える