I was working on a little database on a project I’m working. The issue that arose is the storage of names and addresses. Ideally, I wanted the number of names to be variable, and the person’s birth and death address stored. So this was Draft A.

The problem with this, as you can see, is that the number of names is not variable (unless I add a finite number of name fields and leave the unused ones blank. Also, there’s too much address information stored in the Person table. Person is supposed to be about a person.
The solution?

The address table is responsible for storing addresses. The PersonName table allows the number of names stored to be as many as a person would like. And the DisplayName table by default stores a concatenation of all the names in their order, but can be edited if necessary.
Now my question is, isn’t there some standardised formula for storing addresses?
*The reason for having both the TownId and CountryId stored in the same table is because a person may not enter a town, but enter a country. This needs to be stored.