( , , "", , , .)
- . . . ( .) . - , 5NF , . - , . .
- , , , . (, , .) , , , , , . ( , .)
, , . , - .
, ( ), , , , . , , . , , , . . , , - , .
person(id, name, profession, city, country)
-- person [id] is named [name] and practises [profession] in [city], [country]
city (name, country) -- [name] uniquely names a city within country [country]
country (name) -- [name] uniquely names a country
FK, , . 5NF.
You can understand that the next design (you can add the appropriate restrictions) may be better for you than the previous one, which will have nothing to do with performance. Then you can go to it and offer the previous tables in the form of views to old users, which will have nothing to do with performance.
person(id, name, profession, id_city)
-- person [id] is named [name] and practises [profession] in [id_city]
city (id, name, id_country) -- city [id] is named [name] and is in country [id_country]
country (id, name) -- country [id] is named [name]
Here id_country will personally violate 5NF, since it will be functionally dependent on the non-key id_city.