Pregunta

Al intentar hacer que una aplicación basada en MySQL fuera compatible con MS SQL, me encontré con el siguiente problema:

Mantengo el auto_increment de MySQL como campos enteros sin signo (de varios tamaños) para poder utilizar el rango completo, ya que sé que nunca habrá valores negativos.MS SQL no admite el atributo sin firmar en todos los tipos de enteros, por lo que tengo que elegir entre deshacerme de la mitad del rango de valores o crear alguna solución alternativa.

Un enfoque muy ingenuo sería poner algún código en el código de abstracción de la base de datos o en un procedimiento almacenado que convierta entre valores negativos en el lado de la base de datos y valores de la porción más grande del rango sin firmar.Por supuesto, esto arruinaría la clasificación y tampoco funcionaría con la función de identificación automática (¿o funcionaría de alguna manera?).

No puedo pensar en un bien solución alternativa en este momento, ¿hay alguna?¿O simplemente estoy siendo un fanático y debería simplemente olvidarme de la mitad del rango?

Editar:
@Mike Woodhouse:Sí, supongo que tienes razón.Todavía hay una voz en mi cabeza que dice que tal vez podría reducir el tamaño del campo si optimizo su utilización.Pero si no hay una manera fácil de hacerlo, probablemente no valga la pena preocuparse por ello.

¿Fue útil?

Solución

¿Cuándo es probable que el problema se convierta en un problema real?

Dadas las tasas de crecimiento actuales, ¿qué tan pronto espera que se produzca un desbordamiento de enteros con signo en la versión de MS SQL?

Sea pesimista.

¿Cuánto tiempo espera que dure la aplicación?

¿Sigues pensando que el factor de diferencia 2 es algo de lo que deberías preocuparte?

(No tengo idea de cuáles son las respuestas, pero creo que debemos estar seguros de que realmente tenemos un problema antes de buscar una solución más a fondo)

Otros consejos

Recomendaría usar el tipo de datos BIGINT ya que llega a 9,223,372,036,854,775,807.

SQL Server no admite valores firmados y sin firmar.

yo diria esto.."¿Cómo abordamos normalmente las diferencias entre los componentes?"

Encapsula lo que varía..

Necesita crear una capa de abstracción dentro de su capa de acceso a datos para llegar al punto en el que no le importa si la base de datos es MySQL o MS SQL o no.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top