Diseñar una base de datos no es solo agregar campos e indices, y mas allá de muchos aspectos como definir el tipo de campo, muchos desconocen la importancia de las llaves primarias o claves primarias (PK)
Como programe en Dbase, Clipper y VFP pues siempre use DBF y utilice claves naturales, al pasar el tiempo el administrar la base de datos (DBC) y el propio desarrollo se me fue complicando mucho ya que agregar un simple campo que debería ser compuesto me generaba rediseñar la base de datos así como el desarrollo.
Cuando comencé a diseñar FoxyDb (DbVfp), investigue mucho sobre este tema, si usar claves Naturales (DNI, Factura, Código Postal) o usar claves autogeneradas numéricas. Las 6 razones fundamentales que me llevo a tomar la decisión de utilizar PK Autoincrementables (subrogadas) fueron:
1.- No depender del Usuario para que indicara este valor
2.- No tuviera ninguna relación con otros campo de la tabla
3.- Que fuera lo mas optimizable para las relaciones (Join)
4.- No se viera afectado por nuevos requerimientos futuros.
5.- Seria de uso interno y el usuario no tenga que saber que existe.
6.- Que se generara de forma automática sin importar la aplicación.
Por lo tanto usar claves naturales no cumplía con ninguno de estos puntos, y me tomo tiempo entenderlo, leer muchos debates sobre el tema, y al final decidirme por las claves primarias autogeneradas.
La pregunta es que usan ustedes?, si van a cambiar de DBF a un servidor de base de datos es muy importante estudiar este punto.
Les recomiendo el siguiente articulo, vale la pena leerlo completo hasta los comentarios, como en todo a veces mal interpretamos algo y damos por hecho que así es mejor y cuesta mucho el cambio, a mi me costo mucho cambiar mi forma de pensar al pasarme a una servidor de base de datos, espero y les pueda servir.
y les paso el siguiente vídeo para que se rían un rato, pero mas que reír a veces nosotros como programadores terminamos haciendo eso mismo que vemos en el vídeo, ya sea por costumbre, porque así lo entendimos, o lo mas fácil porque funciona, pero no siempre por el hecho de que funcione es lo mejor.
saludos
Antonio Meza