This (imho) is one of the classic problems with database design. Call it the “creep attribute”, perhaps as soon as you start another attribute or property will always be added. The key decision is that you store the data in the database using the basic tools provided by the database (tables and columns) to structure and format the data, or you store the data in some other way (XML and name / value pairs being the most common substitutes). Simply put, if you store data in a form different from that supported by the DBMS system, then you lose the ability of the DBMS system to manage, maintain and work with this data. This is not a big problem if you only need to save it as “blob data” (reset it all, pump it all out), but as soon as you start searching, sorting or filtering on this data, it can get very ugly very quickly.
With that said, I have strong opinions about name / value pairs and XML, but alas, none of them are positive. If you need to store your data this way, and yes, it can be the right business / design decision, then I would recommend looking long and hard about how the data that you need to store in the database will be used and access to the future . Weight the advantages and disadvantages of each methodology in the light of how it will be used, and select the one that is easiest to manage and maintain. (Do not choose the one that is easiest to implement, you will support it much longer than you will write).
(This is long, but the essay "RLH" is a classic example of name / value pairs performed by amok.)
(Oh, and if you use it, take a look at SQL Server 2008 “Sparse Columns.” It doesn't seem like what you need, but you never know.)
source share