This article touched on an important policy regarding logical planning for database design.
However, I am not really happy with 'generated rules' though for database systems.
This is because things like validation are not cast in stone and often subject to change. Where possible it is better to validate based on live tables of rules, using a flexible system rather than create static table constraints.
For example - a non blank user name constraint is a simplistic example in real life
A user name generally must be
1) Unique to a system ( not currently in use by another user )
2) Not containing extended characters or expletives
3) Minimum and maximum lengths, Not blank
To create a constraint this complex, you are better off to to have a UDF or Proc, that looks up rules from tables, and provides a message about the problem.
I remember an example where a forum had to cull out the use of certain words in usernames that were insulting in another language. By having a table of 'illegal' words, the users could readily restrict usernames without having to have the DBA recreate a fixed constraint.
Flexibility and adaptability, combined with low maintenance design is important to time poor administrators and support staff.