Mike (Yearwood),
Thanks for the clarification. However, I'm still doubtful -- not least because I took a similar route myself once, and failed.
In my application, we had a many-to-many relationship between people and addresses. The people were doctors. One doctor had several addresses: home, practice, hospital(s) where she/he worked part time, and so on.
Meanwhile, one address could have several doctors. Several doctors working at the same practice or hospital, for example.
I know this isn't quite the same as what you're suggesting, but I feel the same sort of problems could arise.
The first problem was that the user couldn't get used to entering new addresses in a two-stage process. They first had to enter the address into the address table, and then assign it to the doctor in question. We made it as transparent as possible for them, but they still continually asked: "Why can't we just type the guy's address next to his name?"
The other (bigger) problem occurred with changes of address. We never succeeded in making the users understand that a doctor moving to a different practice was not the same as a doctor reporting a mistake in his address. (The first involved linking the doctor to a different [new or existing] address record; the second required a simple change to the address table.)
We tried taking the "mistakes must be cleared by a supervisor" route, but it led to huge user frustration ("Gosh, I only made a simple spelling mistake. Why do I have to get the boss to fix it?").
We also had constant problems caused by users failing to find an existing address to assign to a doctor. You mentioned using a combo box to select the city. In our cases, there were many thousands of addresses in the system, so a combo box wouldn't have worked. Instead, the user had to search for the address; there were various ways of doing that, such as searching on postcode or a substring from the main part of the address.
Invariably, the search would fail, even though the required address was in the table. That happened typically when the user made a mistake in entering the search term. When that happened, the user would immediately conclude that the address hadn't yet been entered, and would go ahead and enter it. So we had many duplicate addresses in the table -- often with minor variations in spelling.
I don't want to discourage anyone from properly normalising their database along the lines you suggested. If anyone can suggest ways of overcoming these problems, I'd like to hear from them.
In our case, we concluded that the whole thing was too much trouble. We knew that making the address a unique attribute of the person was not proper database design, but it was hugely more convenient, so that's what we ended up doing.
Mike
__________________________________
Mike Lewis (Edinburgh, Scotland)
My Visual FoxPro site: www.ml-consult.co.uk