Hay muchas compensaciones aquí. En realidad, uso claves de cadena con frecuencia, pero a menudo incluyo claves secundarias sustitutas para las uniones (obviamente, sería al revés si estuviera usando MySQL). Sin embargo, hay casos en los que no.
Primero, soy un fanático de declarar las claves naturales como la clave principal donde la base de datos puede manejar esto bien (PostgreSQL, por ejemplo). Esto ayuda con la normalización y permite un diseño de base de datos más claro. Las claves sustitutas facilitan la unión.
Hay dos razones por las que generalmente agrego claves sustitutas:
No siempre está claro qué es una clave natural. A veces estos tienen que ser cambiados. Cambiar una clave compuesta natural cuando se usa para uniones e integridad referencial es complicado y propenso a errores.
Unir el rendimiento en las teclas compuestas es problemático y una vez que sigue la ruta de la clave natural, se queda atascado allí.
Sin embargo, en los casos en que una clave natural es de definición, de columna única y de texto, generalmente me uno a la clave de cadena. Mi razón para hacerlo es que esto a menudo evita las uniones en la búsqueda. El uso más común es proporcionar un diseño de base de datos adecuado alrededor del caso de uso de los tipos de enumeración. En la mayoría de los casos, estos no requieren la combinación adicional para consultas de rutina. Entonces, donde este es el caso, las teclas de cadena como teclas de combinación tienen mucho sentido.
Por ejemplo, en LedgerSMB, almacenamos categorizaciones de cuentas. Estos se identifican por referencia de cadena. Y algunos otros datos se almacenan con la referencia de cadena que se utiliza para aplicar reglas con respecto a las combinaciones de categorizaciones que pueden afectar a una cuenta. El único momento en que se necesita la lógica es al guardar un conjunto de categorizaciones, por lo que nos unimos en la tecla de cadena.
En cuanto a por qué el valor predeterminado sería teclas enteras, no creo que sea solo una cuestión de tamaño de índice. Un gran problema es la gestión de claves. Dado que la clave es arbitraria y puede estar tratando con millones de registros, debe tener una forma de generar cadenas únicas. Hay casos en los que las personas usan UUID para esto, pero hay una probabilidad distinta de cero de colisión de UUID, y donde se almacenan miles de millones de registros, esta posibilidad se vuelve lo suficientemente alta como para que la posibilidad de colisión con tipos enteros incrementales sea cero por definición.