Hola bandolera:
En primer lugar dale un vistazo a la documentación oficial:
http://dev.mysql.com/doc/refman/5.0/...ric-types.html
Ahora si, entrando en materia, para decidir qué tipo de datos debe tener tu columna debes responder las siguientes preguntas:
1. ¿Un código postal puede ser negativo? No... por lo tanto debes poner el atributo UNSIGNED al tipo de dato.
2. ¿Cuál es el valor máximo que puede tener un código postal? a partir de este dato debes elegir un tipo de datos que soporte este rango:
Código:
Tipo Bytes Valor Mínimo Valor Máximo
TINYINT 1 0 255
SMALLINT 1 0 65535
MEDIUMINT 3 0 16777215
INT 4 0 4294967295
BIGINT 8 0 18446744073709551615
3. ¿Pueden existir Códigos iguales para detalles distintos? Si la respuesta es no, entonces si, el campo Código es candidato para ser campo llave primaria, si la respuesta es no, deberás hacer uso de llaves compuestas.
4. ¿Qué longitud debe tener el campo? en los campos numéricos la longitud NO HACE REFERENCIA A LOS VALORES QUE PUEDE ALMACENAR.
Del manual de referencia:
Cita: El ancho de muestra no restringe el rango de valores que pueden almacenarse en la columna, no el número de dígitos que se muestran para valores con ancho que exceda el especificado para la columna.
Cuando se usa en conjunción con el atributo de extensión opcional ZEROFILL, el relleno por defecto de espacios se replaza por ceros. Por ejmplo, para una columna declarada como INT(5) ZEROFILL, un valor de 4 se muestra como 00004. Tenga en cuenta que si almacena valores mayores que el ancho de muestra en una columna entera, puede tener problemas cuando MySQL genera tablas temporales para algunos joins complicados, ya que en estos casos MySQL cree que los datos encajan en el ancho original de la columna.
Saludos
Leo.