减少表列的数量

时间:2012-09-04 06:36:53

标签: database sqlite normalization

我正在尝试将庞大的数据电子表格转换为数据库,以便更轻松地进行数据分析,但是我遇到了太多列的问题。我已尽力了解规范化,但我很难将其应用于此用例。

方案

我们正在对矩形块执行N 独立测量。测量包括:

  • 长度(或测量0)
  • 宽度(或测量1)
  • 高度(或测量2)
  • 质量(或测量3)
  • 颜色(或测量4)
  • ...
  • 测量N

有超过7000次测量(复杂的块)!测量有限制。如果块未通过一次或多次测量,则重复所有测量以验证。如果再次失败,则该块被视为失败。

块被序列化,有数千块。

数据源

巨大的电子表格(表格)。字段为:块编号,长度,宽度,高度,质量,颜色,...,测量N.每行代表一次测试运行或执行所有测量。由于我们有重新测试策略,因此可能有多行包含来自同一块的结果。

帮助!

此源表看起来像一个直观的格式,但似乎不是数据库的最佳格式。起初我试图把它放在一个SQLite数据库中,并进入2000列限制。是的我可以使用更多列重新编译SQLite或使用其他数据库引擎,但这听起来更像是数据库设计问题。你有更好的设计理念吗?

P.S。对不起,但感谢您的阅读!

1 个答案:

答案 0 :(得分: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));