Benefícios a usar uma tabela de banco de dados, em vez de apenas difícil de codificação uma lista simples de dados, se os dados são consumidos por 1 app [fechado]

StackOverflow https://stackoverflow.com/questions/986377

  •  13-09-2019
  •  | 
  •  

Pergunta

Por um tempo, eu tenho dito por um número de pessoas que uma lista de Estados-EUA (e territórios) devem ser armazenados em uma tabela de banco de dados e em cache para aplicações que utilizam as informações. As únicas razões que me dão para isso é para promover a normalização e porque "é como nós sempre fizemos isso".

Agora, se a lista muda muitas vezes porque o âmbito de aplicação cresce internacionalmente (por exemplo para incluir províncias canadenses), eu posso entender abstraindo da lista para uma tabela de dados que também indicam um identificador país também. No entanto, se a lista é praticamente bloqueado e só usado em 1 tela do aplicativo, vale a pena fazer a consulta e cache? É a diferença entre o armazenamento de uma chave estrangeira SMALLINT que muito melhor do que um CHAR (2)? É sempre prático?

Foi apenas ponderando esta tendência que eu vi com as empresas que eu trabalhei com.

Foi útil?

Solução

eu colocá-los no banco de dados, por alguns motivos:

  1. É apenas boas práticas de normalização.

  2. Por que eu deveria codificar todos os dados no meu aplicativo se eu posso evitar que, ao colocá-lo no banco de dados?

  3. Pessoalmente, eu como o conforto da propriedade de exclusividade garantida. Quando duas tabelas apontam para a mesma chave estrangeira, eu sei que eles estão referencning a mesma coisa. Quando dois acontecer para compartilhar o mesmo código de dois caracteres ... bem, então é até a aplicação.

  4. restrição Cheques .... lotes de dois códigos de caracteres são ilegais, mas o banco de dados não será capaz de ajudá-lo com isso. É muito mais difícil ter uma entrada de chave estrangeira ilegal.

  5. Speed. Eu não aferido, para que eu possa estar errado, mas eu aposto que tem o banco de dados combinar entradas para você é mais rápido do que fazê-lo sozinho. Se você estiver usando o código do estado para qualquer outra coisa (por exemplo, para obter o nome não abreviado do estado, ou para manter uma lista de códigos postais válidos para esse estado), uma junção é provavelmente mais rápido do que o que você iria escrever.

Outras dicas

Se você deseja anexar mais informação, tais como o estado populacional ou produção econômica com a informação primária, em seguida, uma FK faz essa expansão (e consultas subsequentes) mais simples e mais extensível

Quando você pode normalizar - Por que não

Algumas razões que você pode querer escolher a solução de banco de dados sobre o hard-coded.

razões de extensibilidade:

  • programaticamente adicionar registros (embora novos estados não são muito propensos a aparecer dentro do tempo de vida de sua aplicação, mas às vezes os usuários têm necessidades estranhas). Isso pode até ser deixada para os usuários do seu aplicativo através de uma tela dedicada. Se os valores são codificados, você tem que entregar uma nova versão do seu software.
  • Adicionar informações a registros. Por exemplo, você pode ser solicitado a adicionar um campo população editável pelo usuário.

razões de integridade:

  • As chaves estrangeiras lhe dará restrições de integridade: você tem certeza de nunca adicionar um registro com um código de estado errado, se você tem uma chave estrangeira. Note que você pode usar os códigos como chaves, o que permitiria poupar-lhe o problema junta.

Ainda a escolha depende do tamanho, número de usuários e tempo de vida de sua aplicação. O maior desses números, quanto mais você deve considerar a solução de banco de dados.

Houve realmente um benefício para usar 4 dígitos para o ano em uma data? Não parecia provável neste app anos setenta em COBOL para sobreviver até Y2K.

E se os planos de Bush para o união norte-americana de Livre Comércio (NAFTA) e da união monetária com o Amero não é o último passo e BC, Ontario etc.become estados?

Concordo plenamente que é suficiente improvável que a lista de estados vai mudar em nossa vida que você pode código rígido da lista.

Mas uma razão para colocá-lo em um banco de dados seria para que você possa ligar a sigla do estado com o nome do estado inteiro. Então você pode usar a abreviatura Estado como a única chave e fazer junta-se sobre ele. Esta seria a normalização vale a pena.

Eu nunca ouvi uma razão para não usar a sigla do estado como uma chave única, mesmo que ele vai contra projeto de banco de dados "adequada". Assim como eu nunca vi um banco de dados normalizado para o quinto nível que teve qualquer tipo de performance. Embora quinta forma normal é um exercício puro e educacional.

Se mais tarde você quiser adicionar territórios dos EUA que você acabou de inserir na mesa e tada!

Além disso, como Aiden disse que se você quiser mais informações anexado a esses registros, será mais fácil para construir fora quando seu no DB do que se a sua codificado

Eu não digo. Se é um único aplicativo que você vai ser a manutenção e você não está fazendo nada mais complexo do que filtrar uma consulta por estado, você pode apenas como breve adicionar / estados remover de uma matriz codificados. No entanto, se você está fazendo um monte de complexo junções envolvendo estados como chaves, então você provavelmente gostaria de colocá-los em uma tabela.

Você começa a usar chaves estrangeiras no banco de dados.

Podemos acrescentar um estado 51º.

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