Design Challenge #9 - A tough rule

The model below is from an actual project (with the subject matter changed to protect the innocent entities):  

The only demographics important to us in this model are State and Area Code. A Person can reside in at most one State (New Jersey, New York, etc.), and live within at most one Area Code (516, 212, etc.). A State contains many Area Codes and an Area Code belongs to one and only one State. Both a State and Area Code are optional for a Person. Therefore it is possible for a Person to have both a State an Area Code, either one, or neither. 

Sounds like a simple model, right?

Here is the challenge: Is it possible to enforce on this model that if both an Area Code and State are populated for a given Person, that the Area Code is valid for that State? For example, the Person Bob lives in New York and therefore his area code must be one of the valid area codes for New York. This model enforces that the area code 212 for example belongs to New York, but does it enforce the valid combinations of State and Area Code within Person? If yes, explain how. If no, explain how (if it is possible) we can change this model to make it show this rule. 

 

To read the response to this design challenge, please click here