Alan Cooper in his book "About Face 2.0, The Essentials of Human Interaction Design" he makes the point that there shouldn't be any required fields.
When you think about it, this makes a lot of sense. Before computers, on a paper form, if there was any missing data, it was just left blank by the user. On a computer when we force them to enter something when they don't have that information, then they just put in anything so they can save the record. Or, they just select the Cancel button and thus all the other data is lost too.
Quote from "About Face":
This means that the software should keep track of who, what, where, how, and when the user is doing things, so that situation can be modified, rectified, or just plain understood at some later date. This is much more human than merely forcing the data into some arbitrary format whose correctness is judged mostly on its compliance to a file schema rather than to a human need.
My first idea was to just color "required" fields pink. These fields then turn white after data is entered.
Also, any data that appears to be in the wrong format, I color the field yellow. Thus in a phone field the user can type something like "ask Fred" instead of just leaving it blank. When a phone number is entered, the field turns white.
Records that have missing or questionable data are pink or yellow. Then in a browse, these records are flagged (with a flag icon) and thus can be easily found and dealt with if needed.
Yes it is complicated to code for all this, but if it was easy, then anyone could do it!