Whenever you read about a new Java ORM tool, one of the big marketing points always seems to be how you can write your objects seperate from the datatabase and just 'map' them. And if the database changes, you can just keep the objects you have and map them differently.
That is a very bad premise, and responsible for untold long nights of coding. Well normalized database tables in conjunction with their contraints give a very clear logical understanding as to how the problem domain exists. Developers should be looking there first in order to start writing their applications.