# The Concept of address

The important point to realize here is that an address is nothing but a convenient label for a location with an intended purpose of use for said location. In other words, addresses are the names of locations intended for non-random stay. It doesn't matter who - or in fact if anyone - actually lives there.

Based upon this GNUmed handles addresses conceptually independant of people who might live there. This means one address - it being a name for a geographical location - should only ever be stored once in the database. People living there are then linked to that address by means of a two-way assocation table. That table allows attaching a meaning to that association such as work, home, etc.

This in turn means, that there is no middleware primitive along the lines of `patient.change_address()` or `patient.delete_address()`. There rather are a few primitives operating on the above assumptions upon which higher-level functionality is built:

### `business/gmDemographics.py`

- class `cAddress` encapsulates an address in its own right
- class `cPatientAddress` encapsulates an address associated with a purpose and a patient
- method `create_address()`
- method `delete_address()`
- method `address_exists()`

The following higher level functions use the above primitives:

### `business/gmPerson.py`

- `cIdentity.get_addresses()`
- `cIdentity.link_address()`
- `cIdentity.unlink_address()`