Pergunta

Estou tentando fazer uma chamada de julgamento na implementação de um pequeno banco de dados SQL Server '08.

Estou conversando um arquivo de texto de saída de um banco de dados de arquivo plano de um sistema COBOL antigo para o banco de dados do SQL Server acima mencionado. É um banco de dados de empréstimos para veículos e imóveis, que pode ser identificado exclusivamente pela combinação de um ID do credor (um número de sete dígitos), número da conta bancária (15 dígitos) e "sufixo da conta" (dois dígitos).

Confesso que sou bastante ingênuo quando se trata de administração de banco de dados (para ser sincero, eu realmente não fiz isso até minha posição atual) e estou tentando determinar quais das duas abordagens são minha melhor opção para implementar um Chave que irá indexar em várias outras tabelas:

1) Identifique cada empréstimo usando uma chave de três colunas dos valores acima, ou
2) Denormalize os dados implementando uma coluna "chave", que é uma sequência de 24 caracteres combinando os três valores.

A desnormalização é feia, concedida, mas não posso antecipar anomalias de atualização, pois os empréstimos não podem ser transmitidos entre os bancos ou alterar seu sufixo de empréstimo. É garantido que uma mudança nesses valores seja uma conta diferente.

Uma chave composta é mais elegante, mas li alguns tratados sugerindo que é uma coisa ruim.

Então, qual opção provavelmente será uma escolha melhor e, mais importante, por quê?

Foi útil?

Solução

Eu usaria uma chave substituta autogenerada e colocaria um índice exclusivo na chave natural. Dessa forma, se a chave natural muda (e pode dizer que o Banco AA foi comprado por outro banco), ele só precisará mudar em um só lugar. A coisa mais importante ao usar uma chave substituta é garantir a singularidade da chave natural, se alguém exiir e o índice exclusivo fará isso.

Outras dicas

Se esses dados de referência não serão atualizados com frequência, o uso da chave de várias partes deve ficar bem.

Se esses são dados transacionais de alto tráfego, adicione uma chave substituta (identidade int, chave primária em cluster) e faça da chave de três partes uma chave alternativa.

Eu não sugeriria a implementação da opção 2.

Eu sugeriria apenas usar uma chave substituta numérica de incrementação automática. Por que precisaria ser um mashup das outras três colunas "chave"?

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