Use also temporalCoverage, but checking the best format for CSV interchange. For ISO 3601 the open-end is possible by ".." in the future ISO version.
Suggestion:
[state|code ascii text +PK2;temporalCoverage +PK3; name text; region_code text; wd_id int +PK; ibge_id int +PK4; lexLabel ascii text +PK3; isCurrent boolean; info JSONb{bg:tomato}]
[region|code ascii text +PK2;temporalCoverage +PK3; name text;fullname text;wd_id int +PK;lexLabel ascii text +PK3;isCurrent boolean; info JSONb]
[city|name text;state_code ascii text +PK2;temporalCoverage +PK2; wd_id int +PK;ibge_id int +PK3;lexLabel ascii text +PK2;isCurrent boolean; info JSONb{bg:sandybrown}]
[wd_synonym|name text +PK; synonym_type ascii text +PK;wd_id int +PK;ref;isOfficial boolean;info JSONb]
[state]2..*---1[region]
[city]1..*--->in[state]
[wd_synonym]*----1[state]
[wd_synonym]*----1[city]
[wd_synonym]*----1[region]
Now SchemaOrg have eg. https://pending.schema.org/termCode to complement a
name
in the context of DefinedTerm or CategoryCode.Use also temporalCoverage, but checking the best format for CSV interchange. For ISO 3601 the open-end is possible by ".." in the future ISO version.
Suggestion: