2008-11-06 16 views
15

Tengo una tabla que guarda algunos límites de cuenta como usuarios. Para la mayoría de las filas, este valor será un número entero. Sin embargo, también necesitaré admitir almacenamiento ilimitado (infinito) como valor. Esto puede parecer tonto, pero ¿hay un valor entero común que represente ilimitado (infinito)? Me gustaría seguir almacenando los valores como enteros.Representación ilimitada en la base de datos con tipo de datos enteros

+0

límite será un número entero. ¿En qué rango? ¿Positivo? –

+0

si realmente necesita ampliar este concepto (que probablemente no tenga), podría crear un ENUM para que el significado de cualquier valor especial sea obvio para cualquiera que se encuentre con él – ldgorman

Respuesta

24
  • uso cero
  • uso -1
  • uso nula

prefiero nulo, a menos que el campo no es anulable, entonces prefieren cero, a menos que el cero es un límite válido, entonces yo prefiera -1, a menos que -1 sea un valor válido, en cuyo caso necesita otro campo (digamos, un campo de bit) para indicar 'ilimitado'.

+1

Hm. Zero y -1 son miembros del conjunto de enteros. Y nulo (sin datos) puede ser un valor válido ya. La redefinición de los valores conocidos para tener nuevos significados especiales es confusa y, en general, no es sabia. –

+1

no, puede tener sentido. obviamente, el rango normal del que estaría hablando no es el conjunto de enteros, sino el conjunto de enteros no negativos. dado que obviamente no puede establecer un límite de -1 usuarios, entonces es obvio que tiene un valor especial. este método también se usa en muchos lenguajes de programación. – nickf

+0

@ [fixme.myopenid.com]: estuvo de acuerdo, pero supongo que en este caso no se usa el rango completo de valores enteros, ya que estamos hablando de límites de cuenta. En ese caso, querrías un valor centinela (http://en.wikipedia.org/wiki/Sentinel_value), que está bien. ¡Mientras esté documentado! –

4

Bueno, si usted está accediendo a la base de datos de .NET, los tipos enteros tienen constantes miembros MaxValue y MinValue. A veces los usamos para representar el infinito. Por supuesto, estos valores no tienen un significado especial en su RDBMS ...

+0

"Redefiniendo bien- los valores conocidos que tienen nuevos significados especiales son confusos y, en general, no sabios ". ¿Quiere decir, como redefinir MinValue y MaxValue? Jaja! ;-) –

+2

Creo que lo que se quiere decir es que MaxValue es realmente el límite práctico de todos modos, entonces ¿por qué no usarlo? – tvanfosson

3

como un entero, el infinito va a ser difícil. A algunas opciones:

1) -1, la lógica del programa correspondiente que lo trata como infinito (y suponiendo que los valores negativos en realidad no son válidos).

2) una columna adicional con una bandera que indica finito/infinito.

5

Realmente no se puede tener un número infinito de cuentas ya que no hay un número infinito de personas. De hecho, realmente está limitado en la cantidad de cuentas que puede tener (si elige almacenar el valor en una sola columna de base de datos), ya que cualquier mecanismo de almacenamiento finito para elementos contables tiene un límite. Sugeriría, con @Tor Haugen, que la mejor manera de hacerlo es usar el límite impuesto por el sistema (el máximo entero o largo que proporcione su idioma). De esta forma, no tendrá que preocuparse por ningún caso especial para sus comparaciones. Además, usaría una restricción de base de datos para evitar almacenar valores negativos en el campo. Un entero de 64 bits seguramente tendrá un número lo suficientemente grande como para ser prácticamente ilimitado para su aplicación.

Cuestiones relacionadas