Algo nuevo en el uso de bases de datos SQL estándar (actualmente trabajando principalmente con MySQL) No he encontrado muchos usos de esto hasta el momento.
¿Cuándo y por qué es útil tener claves negativas (o más bien firmadas) que indexan una tabla?
database-design
database-recommendation
primary-key
Garet Claborn
fuente
fuente
Respuestas:
Toda una clave primaria es un valor que hemos determinado que es el valor de mayor importancia en un registro. Si esa clave es un int con signo, un int sin signo, una cadena, un blob (en realidad, hay límites) o un UUID (o cualquier nombre que tome hoy), el hecho sigue siendo que es una clave, y que es La cosa de suma importancia.
Como no estamos obligados a usar solo números orientados positivamente para nuestras claves, tiene sentido considerar que un int con signo solo irá a ~ 2 mil millones, mientras que un int sin signo irá a ~ 4 mil millones. Pero no hay nada de malo en usar un int con signo, establecer el valor inicial en ~ -2 mil millones y establecer un incremento de uno. Después de ~ 2 mil millones de registros, llegará a "cero" y luego continuará a ~ 2 mil millones.
En cuanto a por qué sería útil tener "claves negativas" en una tabla, esa es la misma pregunta que "por qué es útil tener claves en una tabla". El "valor" de una clave no tiene impacto en su estado como clave. Una clave es una clave es una clave.
Lo importante es si la clave es válida.
En cuanto a por qué sería útil permitir claves que fueran negativas, puedo sugerir algunas razones:
¿Qué sucedería si quisiera indicar las devoluciones en un sistema de ventas como números de pedido de ventas negativos, que coincidían con el número de pedido de ventas positivo, lo que facilita la correlación (esto es ingenuo y está mal diseñado, pero funcionaría en un sentido de "hoja de cálculo").
¿Qué pasaría si quisieras tener una tabla de usuarios e indicar que los que tenían números negativos estaban controlados por el sistema?
Podría continuar, pero en realidad la única razón por la que el número que es negativo es importante es si usted o yo le asignamos importancia. Aparte de eso, no hay una gran razón para que el valor de una clave tenga alguna relación con la clave misma.
fuente
Si estamos hablando de columnas de identidad o de numeración automática, el valor en sí mismo no debería tener significado. (A veces lo hace, según los usuarios de chat de SO mencionados por drachenstern, que he hecho antes)
Sin embargo, generalmente perderías la mitad de tu rango si estás usando enteros con signo.
Consulte: ¿Qué hacer cuando un campo en una tabla se acerca al número máximo de 32 bits con signo o sin signo?
Otro ejemplo: en escenarios de replicación pequeños, el uso de valores negativos para un sitio y positivos para otro proporciona un conocimiento implícito de la fuente de cualquier fila dada.
fuente
NOT FOR REPLICATION
eso que conoces?No todos los sistemas de bases de datos admiten tipos enteros sin signo, MSSQL es uno de los que no. En estos casos, los valores negativos son posibles en los campos de clave entera simplemente porque son posibles en el tipo (podría usar reglas o desencadenantes para bloquearlos, como se muestra en este ejemplo , pero probablemente no es necesario agregar la sobrecarga de aplicar tales reglas a cada inters / actualización).
En lo que respecta a la base de datos, el valor real de una clave primaria no importa siempre que sea único dentro de la tabla. Para ello, -42 y 42 son solo dos números diferentes de la misma manera que son 42 y 69, lo que significa que su código solo le transmitirá la negatividad o no del valor.
No admitir tipos enteros sin signo es probablemente una decisión de diseño basada en la reducción de la complejidad, es decir, no querer que dos tipos enteros de 32 bits diferentes se preocupen por verificar los rangos al asignar valores entre ellos. Limita el número de índices posibles en un campo de incremento automático comenzando un 0 o 1 a la mitad de lo que sería posible en un tipo sin signo (~ 2e9 en lugar de ~ 4e9) pero esto rara vez es un problema importante (si es probable que necesite una serie de valores clave de esa magnitud probablemente eligió un tipo de 64 bits de todos modos, especialmente si usa una arquitectura de 64 bits donde dichos valores se procesan no menos eficientemente que los de 32 bits), aunque si desea el rango completo y necesita para mantener 32 bits por razones de espacio, puede comenzar el incremento en -2,147,483,647.
fuente