Maybe, I'm not very experienced in database design, but my feeling is : if your business classes are well designed, the only point where you access the databse is in your repositories (DDD speaking).
So a change in the database is just a change in the implementation of your repository.
A bad database design will make your repository hard to code, and slow to perform, but it will not impact your business layer (90% of your code).
If you try to modify your business layer because of your DAO layer, why not to modify your business layer because of your presentation layer ? and then good luck to satisfy all constraint and good practices!
I think that both are important, but coding and database design should not be in the same hands.
The more important for the developer is to isolate himself from the work of the db designer.(Even if the Db designer and the developer are the same person, you should not have to think about two thing at the same time)