Estou procurando adicionar endereços a um banco de dados existente e estou tentando descobrir as vantagens e desvantagens dos métodos a seguir (e se houver algum que eu tenha esquecido).
- Armazene o endereço alinhado com o registro de origem
- Tenha uma tabela de endereços e adicione uma chave estrangeira à entidade
- Ter uma tabela de endereços com uma chave estrangeira vinculada à entidade
Eu gostaria de evitar armazená-lo em linha por motivos de normalização, mas não tenho certeza de qual das outras opções escolher. É possível que, em algum ponto abaixo da linha, desejemos que tipos de entidade adicionais tenham endereços neles, o que faz com que a opção 2 pareça a melhor. Esta opção (tanto quanto posso ver) tem o potencial de deixar dados desvinculados por aí.
Resposta curta:
Opção 1 ou opção 2:
Mais tempo...
Uma tabela de endereços separada normalmente terá um FK para algum registro pai.
Cada endereço poderá ter um tipo (cobrança, entrega, etc)
Os endereços não são compartilhados, reutilizáveis ou finitos: ou seja, cada endereço de uma entrada de origem tem pouco em comum com outras entradas.
Finalmente, considere como você usa endereços. Você os adiciona ou atualiza. Você não procura um endereço existente e um link para isso. Cada endereço é apenas por fonte.
Uma pessoa ou entidade pode potencialmente ter vários endereços, portanto, você deseja uma chave estrangeira na tabela de endereços no registro da pessoa, algo como:
Se você tiver regras de negócios baseadas em endereço, precisará criar uma tabela de endereçamento com CEPs e obter o endereço (é o que o Google veio para a palavra portuguesa "logradouro" que é a terminologia usada pelo nosso serviço postal) a partir dela usando o CEP.
Ele permite uma informação de endereço muito mais útil do que simplesmente deixar o usuário preencher o endereço diretamente.