brainstorming here. This may take up a lot of spece and time, let me know.
THe DB could have fields for ALL games. Each character entry also has a value for what system it uses. That system refers to another variable: an array listing the fields the game uses.
To say it another way, you have a bunch of arrays, one for each game system. Each array is a list of the fields that particular system uses. Then each character entry has a field that declares which of those arrays it uses. Then the actual display only shows the fields listed in that array.
My first thought was just to have all the fields in each character entry, and to only display fields that have information. But this would allow you to show even empty fields if they're just incomplete and that would let the viewer know that there is missing data there.
The question with this method is whether it would take too long to pick through the fields and only display the appropriate ones.
And implementation question is whether you want fields to have type requirements. Like, if you were to do WEG d6 and WotC d20, would you use the same field for "strength" even though in WEG the value would look something like 3d6+1 and in d20 it would be a simple integer. That, I think, depends mostly on whether you want the program to flag which fields are required and whether they have valid content.
Let me know what's wrong with this little brainstorm.