I work on a financial services product that stores lots of information on the end-customer. Our clients continuously want to add new attributes, that often that aren't used to drive any process in our product. They are captured and displayed but nothing else. Due to differences in how our clients operate, they often want to store very different values. We have tried two solutions to accomodate them:
- Sparsely populated tables with 100s of hundred columns.
- Entity Attribute Value tables where the customer can define new columns as needed.
We have experienced most of the disadvantages of both solutions. Lots of columns provide comfort for us in that we know what data we are adding to our database, but can make us appear inflexible and expensive when a customer 'just' wants to store a new value, like Favourite Golf Club. EAV has shown all of its usual problems: poorly performing queries, losing control of the data, lack of validation and maintainability problems.
So is there a better pattern out there?