我的任务是创建一个应用程序,允许管理员更改用户输入表单的内容(即添加任意字段) - 其内容存储在数据库中。想想 Modx/Wordpress/Expression Engine 模板变量。
我一直在研究的方法是实现规范一致的具体表(即用户配置文件、用户内容等)和一些通用字段数据表(即文本、布尔值)来存储非特定值。表单(和模型字段)将通过首先查询表并检索相关列来生成 - 尽管我还没有考虑如何设置验证。
我已经研究过这个问题,它似乎表明了一种 EAV 类型的方法 - 从我的简短研究来看 - 看起来它可能是一个比其灵活性带来的好处更大的负担。
然而,我在这里读过几篇文章,这些文章表明这是一条危险的路线:
如何设计一个布局可能随时间变化的通用数据库? https://stackoverflow.com/questions/3011224/how-to-design-a-generic-database-whose-layout-may-change-over-time
动态数据库模式 https://stackoverflow.com/questions/66385/dynamic-database-schema/
如果有人可以提供一些关于此事的建议,我将不胜感激
regards
SWK
几年前我创建了一个非常大的 EVA 数据库(PHP w/ PostgreSQL)。结果很棒,但这是一个大项目($$$)。所有表单都是完全动态的,具有表单/字段版本控制、发布工作流程、匹配动态报告等。
EVA 基础知识很简单。输入数据并不是困难的部分。但是表单版本控制和报告......您可能需要花费数年时间才能做到正确。
如果我今天再做一次,我会使用一种较新的 NoSQL 解决方案进行研究(http://en.wikipedia.org/wiki/NoSQL#Document_store http://en.wikipedia.org/wiki/NoSQL#Document_store)。我想要创建一个可以传递给表单生成器的 DTO 样式类。 “修改”表单,实际上就是修改DTO。然后我会将 DTO 持久保存到文档/对象数据库中。
此外,当您构建 alpha 解决方案时,请考虑如何解决包含版本控制和报告需求的测试用例。
这是我的意思的一个例子:一个简单的“提问表格”。
- 原版(版本1):有第一、最后、问题
- 添加电子邮件字段(版本2):第一个、最后一个、电子邮件、问题
- 有人改变了对电子邮件的看法:(版本 3):第一、最后、问题
- 新的营销人员进来并改变了它:(版本 4):全名、电子邮件、问题
现在,您需要生成报告 (csv)。事情变得棘手。你怎么做呢?
我们通过引用以前版本的字段级版本控制解决了这个问题。另外,报告系统要求最终用户在运行之前组装报告数据源的定义。 (将报告字段绑定到数据字段等)。
但是,对于文档数据库,我想您可以采取不同的方式。我believe像 CouchDB(其他?)这样的新数据库具有内置的机制来处理这些问题。
祝你好运!!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)