我正在创建一个允许用户创建条目模式的数据输入应用程序。
我的第一个版本只是为每个条目模式创建了一个表,每个条目跨越具有适当数据类型的单个或多个列(对于复杂类型)。这允许“快速”查询(在小型数据集上,因为我没有索引所有列)和简单的同步,其中数据条目分布在多个数据库上。
不过,我对这个解决方案不太满意;唯一积极的事情是简单......我只能存储固定数量的列。我需要在所有列上创建索引。我需要在架构更改时重新创建表。
我的一些关键设计标准是:
- 非常快速的查询(使用简单的特定领域查询语言)
- 写入不必很快
- 许多并发用户
- 架构会经常变化
- 架构可能包含数千列
- 数据条目可能是分布式的并且需要同步。
- 首选 MySQL 和 SQLite - DB2 和 Oracle 等数据库是不可能的。
- 使用 .Net/Mono
我一直在考虑几种可能的设计,但似乎都不是一个好的选择。
解决方案 1:联合表包含一个类型列和每个类型一个可为空的列。
这避免了连接,但肯定会使用大量空间。
解决方案 2:键/值存储。所有值都存储为字符串并在需要时进行转换。
还要使用大量空间,当然,我讨厌必须将所有内容都转换为字符串。
解决方案 3:使用 xml 数据库或将值存储为 xml。
如果没有任何经验,我会认为这很慢(至少对于关系模型,除非有一些非常好的 xpath 支持)。我还想避免使用 xml 数据库,因为应用程序的其他部分更适合作为关系模型,并且能够加入数据是有帮助的。
我不禁想到有人已经解决了(部分)这个问题,但我找不到任何东西。不太确定要搜索什么...
我知道市场研究正在为他们的调查问卷做这样的事情,但是很少有开源实现,而且我发现的那些并不完全符合要求。
PSPP有很多我在想的逻辑;原始列类型,多列,多行,快速查询和合并。太糟糕了,它不适用于数据库......当然......我不需要提供的99%的功能,但很多东西不包括在内。
我不确定这是问这样一个与设计相关的问题的正确地方,但我希望这里有人有一些提示,知道任何现有的工作,或者可以为我指出一个更好的地方来问这样的问题。
提前致谢!