I have a couple of questions that crossed my after reading your topic:
1-Having some experience with zipcode info (especially from Census Bureau), in your ZipInfo table are there multiple zip codes per city and/or multiple cities per zipcode?;
2-Is there a seperate client table with just clientID and clientName?. Are we talking 3-DB Table, zipInfo, State, and ClientZipInfo, or 4 DB tables?;
3-When the client builds the clientinfo table, is client adding one entry per zipcode? If so, what happens if client adds an existing zip, which creates a duplicate entry?
4- Is the objective here is for the client to know the total mail distribution in his/her assigned area, being state?
Outside of the above questions, I really dont envisioned the need to establish a seperate class. However I am just looking at the design for now.