Putting on my dogmatic 3NF purist hat. Instead of denormalized
user.residence1 -> country.id
user.residence2 -> country.id
I would create a many to many bridge table. To accommodate multiple residences for a given user. bridge.userid-> user.id
bridge.countryid-> country.idOh definitely, I just couldn't think of a better example off the top of my head. But also not really relevant: You could also have another table and the relationships be A -> B -> D and A -> C -> D, with the desired join between A and D.
Remember this whole thread is about the system figuring out the JOIN criteria automatically.
I'm only really familiar with Django, and it handles this type of thing by making you specify the "residence1" name instead of the table name "country".
[0] To refer back to the top of this comment chain, that user is complaining they can't do something like also have a "country->continent" relationship and do "user.join(continent)" and have the system figure out the two joins needed.