【问题标题】:Store spreadsheet kind of data in SQL Database在 SQL 数据库中存储电子表格类型的数据
【发布时间】:2010-11-03 03:51:39
【问题描述】:

我想将电子表格数据存储在数据库中,所以现在我正在使用键/值模式来存储相同的数据,但是如果数据很大,从数据库中检索它会花费太多时间。 有没有人有最好的方法来做同样的事情。 Google 如何保存他们的电子表格数据?

通常我必须在页面大小为 500 或 1000 的网页上显示 30 到 40 列和 10,000 行以进行分页。数据适用于带有定价的订单项。

我目前的数据库结构如下。

列表 Column_Id 整数 Column_Name nvarchar(50)
Column_Type nvarchar(50)

价值内容表 标准id int column_id int row_id 整数 column_contents nvarchar(100)

【问题讨论】:

  • 更具体一点。你存储什么样的数据?你能给我们举一个你的电子表格的例子吗?
  • 您为什么使用一种键/值存储方式?它应该很快。
  • 天哪,什么?这是你真正想做的事吗??
  • 我已经更新了我的问题,请检查一下

标签: database-design spreadsheet


【解决方案1】:

考虑到 Excel 被广泛认为是数据库的默认工具,我不确定存储在电子表格中的数据类型除了它是一个表并且行数有限制之外,还有什么其他信息。

我认为除了“决定结构的是数据,而不是来源”之外,我认为没有足够的区别。

【讨论】:

    【解决方案2】:

    如果您只是加载和保存它,而不是进行太多查询,我建议为整个工作表或每一页或至少每一行设置一个 XML 字段。

    我的另一个问题是,你如何查询这个来填充你的工作表?您是否使用循环并为每一行或每一列打开单独的查询?

    您的设计可能不是最理想的,但它实际上应该在您描述的数据集上表现不错,恕我直言。

    【讨论】:

    • 首先我从数据库中获取所有数据,然后循环显示在网格结构的页面上。
    【解决方案3】:

    用于存储电子表格的朴素架构:

    create table spreadsheet
    (
    id INTEGER primary key,
    name TEXT UNIQUE not null
    );
    
    create table cell
    (
    id INTEGER primary key,
    spreadsheet_id INTEGER NOT NULL REFERENCES spreadsheet(id),
    row INTEGER not null,
    col INTEGER not null,
    content TEXT NOT NULL
    );
    

    【讨论】:

    • 我看不到单元格中需要'id',主键不能打开(spreadsheet_id,row,col)吗?
    • 我知道对此存在争议,另一方的人也有同样强烈的感觉,但恕我直言,复合键是邪恶的(除了 M->M 分辨率表)。
    • 谢谢 Pierre,我现在有类似的结构,但是当我必须通过分页在网页上加载大量数据时,它给了我性能问题。通常我必须显示 30 到 40 列和 10,000 行(页面大小 = 1000)
    • 这就是 Key/Value 数据存储在这里显得非常有用的原因。键是有序对象(spreadsheet_id,row),数据是列数组
    猜你喜欢
    • 2017-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-21
    • 1970-01-01
    • 1970-01-01
    • 2012-02-25
    • 2011-06-18
    相关资源
    最近更新 更多