Para ser claros, esta pregunta y respuesta se refieren al uso de números negativos para claves sustitutas, no para claves naturales.
Hasta donde yo sé, hay tres razones para considerar que es una mala práctica.
- Viola el principle of least surprise.
- Algunas personas asumen que todos los números de identificación no son negativos.
- Algunas personas usan números negativos para indicar errores.
El primero tiene cierta validez. Nunca verá ejemplos de SQL o respuestas en SO que usen números de ID negativos. (Voy a cambiar eso, empezando hoy.)
El segundo y el tercero son corolarios del primero, ya que los programadores a menudo asumen un comportamiento libre de sorpresas. (Eso me recuerda que descubrí que VBA me permitiría multiplicar dos fechas, devolviendo un número que se expresaría, supongo, en fechas cuadradas).
Para el número 2, los programadores de aplicaciones podrían introducir errores sutiles al no permitir espacio para el código de UI de inicio de sesión, que podría hacer que -123456 se parezca a 123456.
El tercero tiene que ver con escribir código que devuelve números de identificación. El código que devuelve un único número de identificación puede devolver -1 como un código de error. Pero -1 es un número de identificación válido en la mayoría de los casos. (La mayoría de las bases de datos no restringen los números de identificación al rango de números enteros no negativos.)
¿Tiene algo para documentar esta "mala práctica"? Imagino que los números negativos son más desagradables de leer y algo más difíciles de escribir. Realmente no veo ninguna razón técnica para evitarlos. De hecho, es una forma excelente de ampliar el rango de un tipo de datos firmado. – Yuck
En el lado, esto es útil cuando se crean registros en el lado del cliente que luego se deben insertar en el servidor: http://msdn.microsoft.com/en-us/library/ms971502.aspx – Niklas
Supongo que es popular que los números negativos son 'considerados' una 'mala práctica', algo 'feo' para 'evitar'. ¿No es así? Pero realmente no puedo ver por qué ... Entonces, @Yuck, ¿crees que es debido a la legibilidad? – falsarella