continuation from http://www.OzoneAsylum.com/Forum12/HTML/000740.html
When you mention my complicated approaches, I am curious if you are referring to my solution to Osaires' MySQL problem. If so, that would seem to run contrary to the rest of your statement about dealing with DBs that are redundant. My solution was to put his DB in 3rd Normal Form with no data redundancy. In such a scenario a junction table is the only way to model such a relationship. If you disagree, please post an example, because I spent 3 months working with doctorate professor who specializes in Relational DBMSs and that is how he had me do it. In such a scenario it is trivial to add more information to the Player or User without having to update any queries or data. Any other model makes the data more rigid.
I know all too well the pain of working with poorly designed software. Therefore, my software is all written with expandability in mind. If you look at my Events Calendar code and database, I think you would be impressed with its flexibility. For instance, not only is the database in 3NF, but I use a PHP function as an abstraction layer between the data and the output. The function takes as input a start date, end date, array of categories, and associative array of non-specified directives. It returns a two-dimensional array of the events with all necessary formatted output for each event. The function uses a variable SQL query that is built on the fly based on the parameters of the function call. The result is that database modifications, output formatting, and new applications can all be built in a trivial amount of time. Even completely unforeseen modifications can be easily added. If I wanted to export our data to an unspecified format, the existing infrastructure would allow such a translation function to be written making full use of all the existing code.
I'm not saying my code is the best. There are many subtle uses of SQL that I probably have failed to capitalize on, but I doubt you would have any complaints if you had to use my code.
-jiblet