Pergunta

Vamos dizer que eu tenho uma coluna de banco de dados que deve ser sempre em maiúsculas.

Aqui estão algumas idéias:

1) Criar uma restrição de coluna: col = UPPER(col)

2) Criar um antes insert / update gatilho linha que define: col = UPPER(col)

Normalmente, quanto mais restrições sobre os dados do banco de dados melhor, e gatilhos pode ser misterioso e mau. Suponha que os desenvolvedores que escrevem código estão na mesma organização e que o código que eles escrevem pode ser modificado por nós.

Que abordagem você usa e por quê?

Tem que ser maiúscula porque os dados em questão é, na verdade, sempre em maiúsculas (é originalmente impresso dessa forma por vários Terceiros). Não há nenhum significado em maiúsculas vs minúsculas para este campo particular.

Foi útil?

Solução

Depende por que as necessidades de coluna para estar em maiúsculas, mas, em geral, eu iria para a restrição.

Eu não gosto de coisas que muda os meus dados quando eu inseri-lo no banco de dados. Isso significa que eu tenho um descompasso entre o que eu escrevi e que vou ler a próxima vez.

Se o texto foi digitado por um usuário, considere adicionar uma coluna extra que contém a versão maiúscula. Desta forma, você sempre exibir o texto como o usuário entrou

Outras dicas

Na maioria das situações, eu diria (1), porque, como você apontou, gatilhos muitas vezes pode ser ruim / estranha (embora nem sempre). Mas quando se trata de maiúsculas e minúsculas cordas, que tendem a tratar isso como um caso especial e sempre consertá-la a cada passo ao longo do caminho. Eu não estou certo que eu tenho quaisquer razões concretas para fazê-lo, apenas "sente" certo. Provavelmente porque na maioria dos ambientes que eu trabalhei em, pelo menos, a partir de um FoO negócios lógica ponto de vista é sempre igual foo sempre igual FOO.

Além disso, neste caso, parece que menos de um fardo para o desenvolvedor para dizer "FYI, todas as cordas são armazenados em letras maiúsculas no servidor" do que dar um tapa seu pulso cada vez que esquecer. Não é como dizer "FYI, cada vez que você inserir um preço para o DB, será adicionado o imposto sobre vendas."

Este é o melhor implementado como uma restrição, evita carga extra e faz o que quiser -. Forçar os dados para estar no formato que você precisa

Eu acho que é a abordagem errada para conversão de força no banco de dados porque os dados que podem ser convertidos sem perda de integridade devem ser tratadas na camada de banco de dados. Se o caso for pega em seguida, insignificante como tal -. E uma restrição ajuda a erros de captura

Como adicionar um índice insensível caso, talvez uma solução melhor (cf. banco de dados caso índice Insensitive )

Ou cobertura de testes automatizados aumento, e evitar o excesso de carga no servidor de produção.

Gostaria de considerar outra abordagem também - fornecendo uma "API Table" que permite aos desenvolvedores para apenas passar valores para um procedimento armazenado (ou qualquer outro), que, em seguida, garante que os valores são maiúsculas na inserção (por seu exemplo). Gostaria de apoiar isso com uma restrição, bem como (ele pode ajudar consulta otimização para uma coisa) e remover privilégios de mudança direta sobre a mesa - Se você não desenvolvedores de confiança para maiúsculas todas as inserções então você não deve confiar neles para use sempre o TAPI quer.

Se você pode fazer algo em uma restrição de coluna no banco de dados vice-um gatilho é geralmente preferido, pois é muitas vezes mais rápido. Se você está falando sobre como impor que a aplicação, eu não recomendo isso. Se a regra deve aplicar sempre, ele nunca deve ser em qualquer lugar exceto no banco de dados. outros do que a aplicação está a escrever código para possível alterar dados em um banco de dados de coisas. A integridade dos dados é a responsabilidade da teh banco de dados, manter o código onde ele pertence para evitar problemas.

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