Eu queria saber se isso quebra a primeira forma normal.
AddressTable
Id - PK
Street
City
State
BusinessTable
Id - PK
BusinessName
AddressId - FK
PersonTable
Id - PK
FirstName
LastName
AddressId - FK
A razão pela qual pergunto é que ouvi dizer que, como qualquer campo na tabela de endereços pode ser um endereço comercial ou pessoal, você tem dois tipos de dados diferentes na mesma coluna. Sob esse argumento, eu precisaria ter uma tabela BusinessAddress e uma tabela PersonalAddress. Ao mesmo tempo, este banco de dados parece estar muito bem ordenado, e estou acostumado a bancos de dados que quebram a primeira forma normal sendo muito menos sensato, e não parece fácil aparecer uma anomalia. A coisa mais próxima de uma anomalia aparecendo seria se uma empresa e uma pessoa estivessem vinculadas ao mesmo endereço, o que criaria um problema se um deles atualizasse seu endereço, mas o outro não (ou eles poderiam apontar para dois registros diferentes com o mesmo dados em cada um, exceto para o id, que também pode ser uma anomalia).
Não, está bem.
Considere a situação em que você tem donos de coisas. Muitos tipos de coisa podem ter um dono e não vale a pena dividir os donos em tipos de dono.
Se é bom depende do uso. Se você tratar endereços comerciais e pessoais de maneira diferente, eles devem ser duas tabelas separadas, caso contrário, uma está bem. Ser excessivamente genérico e reutilizar tabelas pode ser um problema, em caso de dúvida, duas tabelas são mais fáceis de unir do que dividir.
Pode haver confusão se você começar a vincular pessoas a empresas sobre qual endereço usar, mas esse será o caso em qualquer um dos casos.