Primary Keys for Address tables
Using those 3 fields for a primary key is not a good idea (or did I misunderstood your question). There are 3 reasons for that:


The length of the key would be big.
The data would be stored in the Person table too.
Streets can sometimes be renamed or renumbered.


The best is to use a special field like you do for the Person data. As soon as you need a value that is not defined by yourself as PK then you should think twice on using it as a PK.

About your ZIP code. Not all countries have a single ZIP code for a single city. As long as you only need cities in your country then this is not a problem.