I've been doing a ton of research on database design for an upcoming project.
This is the classic inner platform problem, where our client basically wants infinite customization and the ability to create forms and attributes on an entity, collect them values from end users, and be able to display the collected information on graphs.
In will be something used by the clinicians to help monitor patients, and why even using the EAV is a thought is that we'll need to collect different information for different trial runs. Sometimes it might be what they ate that day. Others it might be blood sugar, or blood pressure(which is really two numbers), and othertimes it might be multiple questions (how is your pain today from 1-10?), all with the idea that we'll never really know in advance what exactly the end client will be asking for, or really what the accepted values will be.
We'll also be graphing this data consistently throughout the program, and generating larger reports on a less regular basis.
Ideally I'd like to able to hard code as much of this as possible, as we are using SQL, and sticking to relational database best practices will simplify both the database design and the application design (both of which I'm writing).
We're doing a few trial runs, and my first inclination is to get as much information as possible from the cients, hard code the tables in the database, and then build from there. If we discover that we NEED to use an attribute table and an attribue_value table to collect those attributes (along with the fun-to-implement form builder things like dropdowns - and thus dropdown menu options and validation/required), we could do so for later launches.
I've gone through basically every relevent stack overflow post; most say avoid EAV, get a better understanding of the requirements of the application, and, at some point, if the customer TRULY needs an EAV implementation, to go ahead and do it then.
Has anyone ever used a hybrid model? Can you discuss it?
Has anyone ever successfully implemented the EAV model, and can you discuss it?
Has you been in a similar decision, decided to not implement EAV for a project that seemed like it might have been a candidate? How did that turn out?
Here are some interesting reads I've found along the way:
http://decipherinfosys.wordpress.com/2007/01/29/name-value-pair-design/ Storing time-series data, relational or non? Database EAV Pros/Cons and Alternatives Alternatives to Entity-Attribute-Value (EAV)?