An idea:
Some days ago, a co-worker, who has joined the group recently (dmartinez), proposed an idea to me, and we started to dedicate some time to improve it.
This is the idea: whenever you make an OO design, u think about objects, functionality and properties, not in tables and foreign keys. But when it comes to actual programming, it's inevitable: all data goes to an RDBMS.
But what happens when u have to extend the model? Simple: u inherit the classes and add functionality. But tables can't inherit another one, so u're stuck. This is where the idea goes. To put an OO layer on top of the DB, complete with a design tool for modeling objects and relations, and mapping them transparently to the DB tables/stored procedures/constraints, etc.
But this isn't a Visio design style. It should generate XML schemas and namespaces/classes for them, so u interact programatically with the objects, not the tables. U should be able to filter, sort, select, etc. directly to the objects, and this layer should eficiently execute SP's or anything against the DB.
Imagine:
DBClient.FirstName.Filter("%John%");
DBClient.Load();
Or
DBInvoice.DeliverState = DBLayer.DBInvoice.DeliverStateType.Requested;
DBClient.Sex = DBLayer.Global.Sex.Female;
Or adding validation formulas to the field, for auto validation in forms/webforms, the mentioned tagged values specification, and other properties.
All these should seamlessly integrate with Intellisense, and define it's metadata in XML, allowing easy migration from one RDBMS to another.
It could even be an option the use of stored procedures, and the connection to the actual DB should be made through the graphical design tool.
This way, when u add a new object, if it's inherited from another object (let's suppose it is the base object, in which case it will be a table), the new table created will contain only the additional properties defined, and a GUID field would join the two tables transparently. The programmer will work and see only one new object, when they are really two tables with additional metadata properties.
This could be a big productivity enhancer...
I'd like to hear your thoughts.
Daniel