Question: Full disclosure...Trying feverishly here to learn more about databases so I am putting in the time and also tried to get this answer from the source to no avail.

Barry Williams from databaseanswers has this schema posted. 

[Clients and Fees Schema](http://www.databaseanswers.org/data_models/clients_and_fees/index.htm)

![alt text](https://i.stack.imgur.com/Kf1ae.gif)

I am trying to understand the split of address tables in this schema. Its clear to me that the Addresses table contains the details of a given address. The Client\_Addresses and Staff\_Addresses tables are what gets me. 

1) I understand the use of Primary Foreign Keys as shown but I was under the assumption that when these are used you don't have a resident Primary Key in that same table (date\_address\_from in this case). Can someone explain the reasoning for both and put it into words how this actually works out?

2) Why would you use date\_address\_from as the primary key instead of something like client\_address\_id as the PK? What if someone enters two addresses in one day would there be conflicts in his design? If so or if not, what?

3) Along the lines of normalization...Since both date\_address\_from and date\_address\_to are the same in the Client\_Addresses and Staff\_Addresses table should those fields just not be included in the main Address table?

Answer: 
This 2 extra tables enables you to have address history per one person. 

You can have them both in one table, but since staff and client are separated, it is better to separate them as well (b/c client id =1 and staff id =1 can't be used on the same table of address).

there is no "single" solution to a design problem, you can use 1 person table and then add a column to different between staff and client. BUT The major Idea is that the DB should be clear, readable and efficient, and not to save tables.

about 2 - the pk is **combined**, both clientID, AddressID and from.
so if someone lives 6 month in the states, then 6 month in Israel, and then back to the states, to the same address - you need only 2 address in address table, and 3 in the client\_address.

The idea of heaving the from\_Date as part of the key is right, although it doesn't guaranty data integrity - as you also need manually to check that there isn't overlapping dates between records of the same person.

about 3 - no (look at 2).
Viewing the data model, i think:

1) PF means that the field is both part of the primary key of the table and foreign key with other table. 

2) In the same way, the primary key of Staff\_Addresses is {staff\_id,address\_id,date\_adderess\_from} not just date\_adderess\_from

3) The same that 2)