esta es una pregunta interesante.Definitivamente debe tener en cuenta los objetivos de rendimiento aquí. Si quieres ir por la velocidad, int es imprescindible. Una base de datos puede indexar enteros un poco mejor que Strings, aunque debo decir que no es una mala pérdida de rendimiento.
Por ejemplo, es la base de datos Oracle en sí misma, donde tienen el lujo de hacer enum de gran tamaño como cadenas en sus tablas del sistema. Cosas como USER_ALLOCATION_TYPE o cosas por el estilo son la norma. Es como usted dice, las cadenas pueden ser más "extensibles" y más legibles, pero en cualquier caso en el código terminará con:
Cadena final estática USER_ALLOCATION_TYPE = "USER_ALLOCATION_TYPE";
en lugar de
estático int USER_ALLOCATION_TYPE final = 5;
¡Ya sea que hagas esto terminarás con todos estos literales de cadena que solo duelen para que alguien vaya y extravíe un char! :)
En mi compañía usamos tablas con enteros claves primarias; todas las tablas tienen una clave primaria serial, porque incluso si no crees que la necesites, tarde o temprano te arrepentirás.
En el caso que está describiendo lo que hacemos es que tenemos una tabla con (PK Int, Cadena de descripción) y luego hacemos Vistas sobre las tablas maestras con combinaciones para obtener las descripciones, de esa manera podemos ver el unimos las descripciones de los campos si debemos y mantenemos el rendimiento.
Además, con una tabla de descripción separada puede tener información EXTRA sobre esos identificadores en los que nunca pensaría. Por ejemplo, digamos que un usuario puede tener acceso a algunos campos en el cuadro combinado si y solo si tienen dicha propiedad y así sucesivamente. Puede usar campos adicionales en la tabla de descripción para almacenar eso en lugar de un código ad-hoc.
Mis dos centavos.
Una ventaja del uso de cadenas es que son más fáciles de leer si usted o alguien más tiene que trabajar directamente con la base de datos. Le ahorrará la molestia de unirse a las tablas que definen las entradas para que las consultas sean legibles por humanos. He visto implementaciones bastante grandes usando cadenas: el impacto en el rendimiento es insignificante. –