I’d argue for a person table (employees are people too), an address
table, and a full join table. A person can have many addresses, and an
address can have many people. People move, and you may want to keep
history on a person’s past addresses (especially if there’s a payroll or
tax implication).
Person
id, first_name, last_name, etc, etc
has_many :residences
has_many :addresses, :through => :residences
Address
id, line_1, line_2, city, state, postal_code, etc, etc
has_many :residences
has_many :people, :through => :residences
Residences
person_id
address_id
additional fields, perhaps start_date, end_date, and anything else that
might be related to an instance of this person at this address.
belongs_to :person
belongs_to :address
Maintenance of residences becomes a bit more involved (do you delete the
residence, or just end it - which gets to that residence history
question), but the flexibility might pay off later…
Showing field values is as simple as
@person.addresses.each do |address|
address.city
address.state
address.postal_code
or
@address.people.each do |person|
person.first_name
person.last_name