Pergunta

Tentando fazer com que um aplicativo baseado em MySQL suporte MS SQL, me deparei com o seguinte problema:

Eu mantenho o auto_increment do MySQL como campos inteiros não assinados (de vários tamanhos) para fazer uso de todo o intervalo, pois sei que nunca haverá valores negativos.O MS SQL não oferece suporte ao atributo unsigned em todos os tipos inteiros, então tenho que escolher entre abandonar metade do intervalo de valores ou criar alguma solução alternativa.

Uma abordagem muito ingênua seria colocar algum código no código de abstração do banco de dados ou em um procedimento armazenado que converta entre valores negativos no lado do banco de dados e valores da maior parte do intervalo não assinado.Isso atrapalharia a classificação, é claro, e também não funcionaria com o recurso de identificação automática (ou funcionaria de alguma forma?).

Eu não consigo pensar em um bom solução alternativa agora, existe alguma?Ou estou apenas sendo fanático e deveria simplesmente esquecer metade do alcance?

Editar:
@Mike Woodhouse:Sim, acho que você está certo.Ainda há uma voz na minha cabeça dizendo que talvez eu pudesse reduzir o tamanho do campo se otimizasse seu aproveitamento.Mas se não houver uma maneira fácil de fazer isso, provavelmente não vale a pena se preocupar com isso.

Foi útil?

Solução

Quando é provável que o problema se torne um problema real?

Dadas as taxas de crescimento atuais, em quanto tempo você espera que ocorra um estouro de número inteiro assinado na versão MS SQL?

Seja pessimista.

Quanto tempo você espera que o aplicativo dure?

Você ainda acha que o fator de diferença 2 é algo com que você deveria se preocupar?

(Não tenho ideia de quais são as respostas, mas acho que devemos ter certeza de que realmente temos um problema antes de procurar mais por uma solução)

Outras dicas

Eu recomendaria usar o tipo de dados BIGINT, pois vai até 9.223.372.036.854.775.807.

O SQL Server não oferece suporte a valores assinados e não assinados.

eu diria isso.."Como normalmente lidamos com as diferenças entre os componentes?"

Encapsule o que varia..

Você precisa criar uma camada de abstração dentro de sua camada de acesso a dados para chegar ao ponto onde não se importa se o banco de dados é ou não MySQL ou MS SQL.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top