我正在建立一个允许申请人提交申请表的网站。申请表的字段需要灵活,以便进行更改。
传统方法是将每个表单字段映射到数据库列,但随着系统发展引入新字段,这在增长方面非常有限。在引入新列时,由于“缺少数据”,现有数据库行将具有空值或某种“默认”值。
但是,如果我将字段设为键/值驱动方法,则稍后进行报告将非常困难。
所以如果有人做过类似的实施,我正在寻找一些建议/建议。感谢。
示例1(字段 - >列):
应用表单可能包含以下内容 字段:
- 名字
- 姓氏
和相关的数据库表 如下所示:
- first_name nvarchar(255)
- last_name nvarchar(255)
示例2(键/值对):
- first_name(键列),john(值列),文本框(类型)
- last_name(键列),smith(值列),文本框(类型)
我发现了一些像polldaddy.com wufoo.com这样的例子,它允许动态的web / html表单生成,但我认为在我的情况下,由于报告要求,它们是无用的。我认为它们的实现与我的“示例2”类似。
更新
我找到了this project (mvc dynamic forms),我相信这些概念与我需要达到的相似。我将深入了解该项目。
答案 0 :(得分:1)
为了运行应用程序(请参阅OLTP),您将需要使用您提到的键/值对方法,这是在灵活性方面实现所需要的唯一合理方法(并且具有系统这是可维护的。)
解决报告问题的一个好方法是为事务(OLTP)和报告(OLAP)位分别设置数据库模式。 Differnet模式并不意味着不同的物理数据库 - 尽管在某些时候将它们分开可能是有意义的。
然后你会有某种ETL进程在两者之间迁移数据(从OLTP源到目标OLAP表)。
如果将OLTP,OLAP和ETL逻辑保存在同一个位置,将更容易管理并保持良好的清洁分离。或者,您可以将ETL逻辑构建到您的应用程序中 - 它实际上取决于您如何构建解决方案的其余部分(您是否完全抽象出数据访问)以及您的驱动程序是什么(这是一个内部工具) ,基于云,或者它是人们部署到自己的工具包上的系统。
单独的OLTP / OLAP设置的美妙之处在于它们都适合于各自的工作 - 而不会影响另一方。