我正在创建一个允许用户创建输入模式的数据输入应用程序。动态数据输入值存储
我的第一个版本只是为每个条目模式创建了一个表,每个条目跨越单个或多个列(对于复杂类型)具有适当的数据类型。这允许“快速”查询(对于小数据集,因为我没有对所有列进行索引)以及简单同步,其中数据条目分布在多个数据库上。
虽然我对此解决方案并不满意,唯一有利的就是简单... 我只能存储固定数量的列。我需要在所有列上创建索引。我需要在模式更改上重新创建表。
我的一些关键设计审核规定是:
- 非常快速的查询(使用简单的领域特定的查询语言)
- 写操作并不一定要快
- 许多并发用户
- 模式将经常变化
- 模式可能包含数千列
- 数据条目可能分布且ne编辑syncronization。
- 优先考虑的MySQL和SQLite-- DB2和Oracle等数据库不存在问题。
- 使用.NET /单声道
我一直在思考了几个可能的设计,但他们都不似乎是一个不错的选择。
解决方案1:联合表,包含Type列和每个类型一个可为空的列。
这可以避免连接,但会明确地使用很多空间。
解决方案2:键/值存储。所有值都以字符串形式存储并在需要时进行转换。
也使用了很多空间,当然,我讨厌不得不将所有东西都转换为字符串。
解决方案3:使用xml数据库或将值存储为xml。
没有任何经验,我会觉得这很慢(至少对于关系模型,除非有一些非常好的xpath支持)。 我也想避免一个xml数据库,因为应用程序的其他部分更适合作为关系模型,并且能够加入数据很有帮助。
我不禁认为有人已经解决了(一些),但我无法找到任何东西。不知道要搜索什么...
我知道市场调研公司正在为他们的调查问卷做这样的事情,但是很少有开放源代码实施,而我发现的实际上并不完全符合法案。
PSPP有很多我想到的逻辑;原始列类型,许多列,许多行,快速查询和合并。太糟糕了,它不适用于数据库..当然...我不需要99%的提供的功能,但很多东西没有包括在内。
我不确定这是否是正确的地方去问这样一个设计相关的问题,但我希望这里有人有一些提示,知道任何现有的工作,或者可以指点我一个更好的地方来问这样一个问题。
提前致谢!
http://www.simple-talk.com/opinion/opinion-pieces/bad-carma/ 灵活性成本太高,无法正常工作。您需要的大多数数据可以在没有灵活性功能的情况下进行定义。只能非常谨慎地使用Key/Value存储,不要将其作为设计的基础。没有人愿意像他们所说的那样灵活性,如果它干扰性能和数据完整性(而且会),那么他们就不需要它。如果它使用户界面更难使用(它会),那么他们讨厌使用该应用程序。 每个客户实际上可能只有3或4件他们需要定制的东西。 – HLGEM 2010-06-25 21:06:05