Ver Mensaje Individual
  #3 (permalink)  
Antiguo 25/08/2011, 16:49
Avatar de gnzsoloyo
gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Consulta de buenas prácticas en Bases de Datos

En realidad las auto_increment son una mala práctica, considerados desde la optica del diseño de bases de datos. Son fáciles para los programadores, simples de implementar, eficientes a la hora de usarlas... pero problemáticas para migraciones, consolidación de datos, integración de sistemas, etc.

Según las reglas de normalización de base de datos, los ID numéricos y autonuméricos sólo se deben usar si llegados a la 3FN aún no se ha hallado una clave candidata. De lo contrario, la CC es siempre la mejor opción.
La idea parte desde el concepto que siempre existe, para una entidad dada, una clave capaz de identificar unívocamente una instancia de esa entidad entre todas las entidades del universo representado.
En otras palabras: Siempre existe una clave tal que permita identificar a una única persona en medio de los miles de millones de habitantes del planeta. Que esa clave sea de un sólo campo o requiera más de uno, no importa: lo importante es la unicidad de esa clave.

La gran ventaja de usar una clave irrepetible que no requiera un autoincremental es que su valor puede ser portado a diferentes sistemas, e integrado a diferentes modelos de bases sin necesidad de sacar o poner valores que no pertenezcan a esa instancia.
Un ejemplo de esto es, por ejemplo, un libro de una biblioteca. Si lo cambias de biblioteca (por la razón que sea), deberá ser vuelto a numerar, clasificar, identificar, si usas una secuencia incremental para ello. Pero si usas su ISBN, lo único que necesitas es ponerle un número ejemplar.
A nivel de integración de datos la problemática es parecida: Si tienes que integrar datos de clientes de diferentes sucursales, no sirven los autoincrementales, porque para poder pasar datos de una base a otra tienes que corregir la numeración de todos los autoincrementales usados en las diferentes tablas, y que son FK en otras... El proceso de integración se vuelve infernal. En cambio, si el ID es universalmente único, es casi todo una simple copia de datos.

¿Se entiende la problemática?

En definitiva, si vas a trabajar con bases distribuidas, masivas, datawarehouses, o integrables a futuro, los autoincrementales son una muy mala idea.

MySQL, por ejemplo, admite técnicas que permiten usar autoincrementales tales que puedas planear integrar a futuro, numerando con un paso de incremento diferente a +1. Pero en todos los casos sirven si y sólo si el número de bases usadas es fijo o se reduce, pero no si se aumenta.
Esto significa que si tienes cuatro sucursales, se puede hacer que cada una tenga una secuencia de incremento que hará que los datos no se solapen, e incluso puedes luego eliminar alguna sucursal. Lo que no puedes hacer es aumentar el número de ellas, porque la siguiente (5) generaría solapamiento de datos entre las bases... En otras palabras, su utilidad es relativa.

Más o menos por allí anda la cosa.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)