An excellent discussion of relational concepts can be located here: Fundamentals of Database Design.

The basic idea is that you want to make data storage and retrieval more efficient through a process called "normalization."

For my Addresses database, I might want to move the phone number into a separate table, since most people have more than one:

PhoneNbrID
PhoneNbr
NbrType
AddressID
In the table above, NbrType would specify the type of number (cell, home, wok, fax, etc) the number represents. AddressID is a foreign key back to the Address table so we would know which address to which it belongs.

To avoid replicating City and State, I could include another table listing City, State and ZipCodes. Then, the Address table would only need the ZipCode field. I could get the City and State by linking over to the other table. NOTE: This does not work in 100% of all cases. There are a handful of instances where a particular zip code refers to two different cities.