用于在数据库中存储类网格数据的模式

时间:2011-12-13 15:34:48

标签: database-design spreadsheet

我们正在尝试构建类似于电子表格或数据库表的基本版本的东西。我们有行和列,我们希望用户能够添加行或列,并进行一些基本的排序/过滤。

我们的一个概念就是为我们想要存储的每个“文档”创建一个新的数据库表。这样,SQL简单快速。但是,这会带来很多问题,包括为每个客户端管理不同的表,在他们想要添加新列时必须执行“ALTER TABLE”语句以及类似的问题。

那么,在数据库中的单个(或多个)表中存储具有未知列的类网格数据的最佳方法是什么,以便排序和过滤不会成为噩梦?

1 个答案:

答案 0 :(得分:2)

在您分享有关您要完成的内容的更多信息之前,这个简单的ER模型可能是一个很好的起点:

enter image description here

ROWCOLUMN是电子表格中的整数“坐标”。

优点:

  • 简单。
  • “排序”和“过滤”可能非常有效。
  • “稀疏”数据的高效(存储方式) - 即电子表格中存在大“漏洞”的地方。

缺点:

  • “密集”数据的效率低(存储方式),因为在CELL的PK中会发生很多重复。
    • 根据您的DBMS,您可以使用压缩索引来最小化空间开销。
    • 您甚至可以使用压缩的群集表(在Oracle的说法中为key-compressed index-organized table),这会导致能够有效地访问 行的不幸后果明智的或列式的,但不是两者兼而有之,并且VALUE过滤的能力有限(二级索引在集群表中很昂贵)。
  • 您必须提前选择VALUE的类型,因此难以存储非统一类型的值。有很多方法可以解决这个问题,但它们会增加复杂性并且可能会成为性能问题。