Ya definitely separating address is better Because people can have multiple addresses so it will be increasing data redundancy.
You can design the database for this problem in two ways according to me.
A. Using one table
Table name --- ADDRESS
Column Names
- Serial No. (unique id or primary key)
- Client / Employee ID
- Address.
B. Using Two tables
Table name --- CLIENT_ADDRESS
Column Names
- Serial No. (unique id or primary key)
- Client ID (foreign key to client table)
- Address.
Table name --- EMPLOYEE_ADDRESS
Column Names
- Serial No. (unique id or primary key)
- Client ID (foreign key to employee table)
- Address.
Definitely you can use as many number of columns instead of address like what you mentioned Unit,Building, Street e.t.c
Also there is one suggestion from my experience
Please add this five Columns in your each and every table.
- CREATED_BY (Who has created this row means an user of the application)
- CREATED_ON (At what time and date table row was created)
- MODIFIED_ON (Who has modified this row means an user of the application)
- MODIFIED_BY (At what time and date table row was modified)
- DELETE_FLAG (0 -- deleted and 1 -- Active)
The reason for this from point of view of most of the developers is, Your client can any time demand records of any time period. So If you are deleting in reality then it will be a serious situation for you. So every time when a application user deleted an record from gui you have to set the flag as 0 instead of practically deleting it. The default value is 1 which means the row is still active.
At time of retrieval you can select with where condition like this
select * from EMPOLOYEE_TABLE where DELETE_FLAG = 1;
Note : This is an suggestion from my experience. I am not at all enforcing you to adopt this. So please add it according to your requirement.
ALSO tables which don't have any significant purpose doesn't need this.