I created a very large EVA database years ago (PHP w / PostgreSQL). It turned out fine, but it was a big project ($$$). All forms were fully dynamic, with a version of the form / field, publishing workflows, matching dynamic reporting, etc.
The basics of EVA are simple enough. Getting data is not difficult. But formal versioning and reporting ... you can spend years on the right decision.
If I did it again today, I would learn to use one of the new NoSQL solutions ( http://en.wikipedia.org/wiki/NoSQL#Document_store ). I would like to create a DTO style class that could be passed to the form generator. Modifying a form will actually change the DTO. Then I will persist in the DTO in the document / object database.
In addition, as you build your alpha solution, consider how to enable test cases that cover versioning and reporting needs.
Here is an example of what I mean: a simple "Request a Question Form".
- Original (version 1): has first, last, question
- Add Email Field (Version 2): First, Last, Email, Question
- Someone changes their mind about email: (version 3): First, last, question
- A new marketing guy comes in and changes it: (version 4): Full name, email address, question
Now you need to create a report (csv). Everything is getting complicated. How do you do this?
We solved this problem with a field-level version with links to their previous versions. In addition, the reporting system required the end user to compile a definition of report data sources before launch. (binding report fields to data fields, etc.).
However, with a DB document, I would suggest that you can do it differently. I believe that a new database, like CouchDB (others?), Has a mechanism built in to solve these problems.
Good luck
source share