Primeiro, acho que é uma questão de modelar e definir o que consiste em uma entidade separada. Suponha que você tenha customers
um e apenas um único address
. Claro que você poderia implementar tudo em uma única tabela customer
, mas se, no futuro, permitir que ele tenha 2 ou mais endereços, você precisará refatorar isso (não é um problema, mas tome uma decisão consciente).
Também posso pensar em um caso interessante não mencionado em outras respostas em que dividir a tabela pode ser útil:
Imagine, novamente, você tem customers
com um único address
cada, mas desta vez é opcional ter um endereço. Claro que você pode implementar isso como um monte de NULL
colunas -able, como ZIP,state,street
. Mas suponha que, dado que você tem um endereço, o estado não é opcional, mas o ZIP é. Como modelar isso em uma única tabela? Você poderia usar uma restrição na customer
tabela, mas é muito mais fácil dividir em outra tabela e tornar a Foreign_key NULLable. Dessa forma, seu modelo é muito mais explícito ao dizer que a entidade address
é opcional e que ZIP
é um atributo opcional dessa entidade.