Antecedentes
El enfoque de "todos los PK deben ser sustitutos" no está presente en el modelo relacional de Codd ni en ningún estándar SQL (ANSI, ISO u otro).
Los libros canónicos parecen eludir estas restricciones también.
El esquema del propio diccionario de datos de Oracle utiliza claves naturales en algunas tablas y claves sustitutas en otras tablas. Menciono esto porque estas personas deben saber una o dos cosas sobre el diseño RDBMS.
PPDM (Professional Petroleum Data Management Association) recomienda los mismos libros canónicos:
Utilice las claves sustitutas como claves principales cuando:
- No existen claves naturales o comerciales.
- Las claves naturales o comerciales son malas (cambiar a menudo)
- El valor de la clave natural o comercial no se conoce al momento de insertar el registro
- Las claves naturales de varias columnas (generalmente varias FK) superan las tres columnas, lo que hace que las combinaciones sean demasiado detalladas.
Además, no he encontrado una fuente canónica que diga que las claves naturales deben ser inmutables. Todo lo que encuentro es que deben ser muy estables, es decir, deben cambiarse solo en ocasiones muy raras, si es que alguna vez lo hacen.
Menciono PPDM porque estas personas también deben saber una o dos cosas sobre el diseño RDBMS.
Los orígenes del enfoque de "todos sustitutos" parecen provenir de las recomendaciones de algunos marcos de ORM.
Es cierto que el enfoque permite un modelado rápido de la base de datos al no tener que hacer mucho análisis comercial, pero a expensas de la facilidad de mantenimiento y la legibilidad del código SQL. Se hace mucha previsión para algo que puede suceder o no en el futuro (la PK natural cambió, por lo que tendremos que usar la funcionalidad de actualización en cascada RDBMS) a expensas de la tarea diaria como tener que unir más tablas en cada consultar y tener que escribir código para importar datos entre bases de datos, un procedimiento que de otro modo sería muy directo (debido a la necesidad de evitar colisiones PK y tener que crear tablas de escenario / equivalencia de antemano).
Otro argumento es que los índices basados en enteros son más rápidos, pero eso tiene que ser compatible con puntos de referencia. Obviamente, los varchares largos y variables no son buenos para PK. Pero los índices basados en varchar cortos de longitud fija son casi tan rápidos como los enteros.
Las preguntas
- ¿Hay alguna fuente canónica que respalde el enfoque de "todos deben ser sustitutos de PK"?
- ¿El modelo relacional de Codd ha sido reemplazado por un modelo relacional más nuevo?
TablenameID
" funciona muy, muy bien. Lo he visto trabajando en la práctica con una base de datos de tamaño empresarial con más de 500 tablas, y desde entonces lo uso para modelar bases de datos siempre que sea posible.