I see no problem with storing a zip code as a number even if you don't expect to perform math operations on it.
In our corporate data warehouse, we are the recipients of data from many legacy systems. As a result, we see a lot of garbage data being used.
Take our case where we have a Geographical identifier that is a zero filled 4-digit "numeric" value. This field is often used to join tables together.
I would take one of two approaches:
1) declare the column as a char field of length 4 and add a CONSTRAINT LIKE '[09][09][09][09]'
2) define it as a numeric length 4 and, if the users want it, format the value WHEN DISPLAYING only.
Approach numeric 1 saves you the hassle of constantly formatting, which is no big deal, but if you are often filtering and even indexing/joining on the column, I'd consider saying that we're off with option #2.
A third reason is that my experience is that people are just plain lazy when it comes to adding constraints to a database or they are ignorant. I think it is more laziness, personally. I find the constraints that do exist are mostly applied as edits in the application which originally captures the data and these that edits are not applied uniformly.
As a result, our data warehouse ends up receiving all sorts of variations including inconsistant pre-filling with zeros or justification of the value.
When you define something as an INTEGER, you automatically get more efficient storage, esp. when indexing on the column, and and edit which everyone understands and is more likely to be applied consistently across legacy systems by database designers of various abilities.
I have no problem with option #1, with the exception of using the field in an index and my concern over the approach of once you accept a field as being an apha numeric, people tend to throw more junk into it.
Take for example, our Peoplesoft employee identifier. Somebody decided to add an "X" in front of an employee 6-char zero filled "number" to designate that the employee is a contractor. This violates a personal practice of mine not to combine separate pieces of information into a single field. This caused all sorts of inconsistency problems across various systems. If this field were a numeric, no one would've tried to do that.
Comments?