2011-12-13 61 views
2

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

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

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

回答

2

直到你分享你正在试图完成的任务的详细信息,这简单的ER模型可能是一个良好的开端:

enter image description here

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

优点:

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

缺点:

  • 低效(存储明智)的“密集”的数据,因为大量的重复会在细胞的PK发生。
    • 根据您的DBMS,您可以使用压缩索引来最小化空间开销。
    • 你甚至可以使用压缩聚集表key-compressed index-organized table在甲骨文的说法),具有能够访问调用的不幸后果有效按行或按列,但不能同时和能力有限按VALUE过滤(二级索引在集群表中很贵)。
  • 您必须事先选择VALUE的类型,这使得存储非统一类型的值变得非常尴尬。有办法解决这个问题,但它们增加了复杂性,并可能成为性能问题。
+0

+1&Accepted - 非常感谢!我使用这种将CellColumns分离到自己的表中的模式稍作修改,以便我可以存储一些关于它们的附加数据(例如标题,数据类型等)。我感谢帮助! –

相关问题