Those are only combined inside of that database. They point to the same rule set. Geographically, and for end users who configure their server or other computer properly, something like Europe/Brussels never means ‘an area which includes the Netherlands’.
Again, the fact that something like Asia/Ho_Chi_Minh points to the same rule set as Asia/Bangkok does not mean Asia/Bangkok is bigger than Thailand and suddenly includes Vietnam; not from a geographical perspective for end users. Configuring a server in Thailand? Choose Asia/Bangkok. Moving the server rack to Vietnam? Change it to Asia/Ho_Chi_Minh. Forgot to do that? No problem, they both point to the same rule set, as long as the Vietnamese don’t unilaterally change their laws regarding time keeping.
So no, in a geographical sense, Asia/Ho_Chi_Minh is not part of Asia/Bangkok. You are looking at the innards of a very complex database, where those identifiers are grouped together for reasons internal to tz database. Seeing that as the canonical truth you get people creating a relation covering the Netherlands, Belgium, and Luxemburg and calling it Europe/Brussels, and that is just silly.
I can configure my computer to use Europe/Brussels and it will still end up using CET/CEST, but if The Hague decides that we stop observing daylight saving time, but Brussels keeps on doing it, my computer will be off by an hour part of the year. Hence, Europe/Amsterdam, which would then point to the updated rule set in a new release of tz database. And trust me, if that happens, Europe/Amsterdam would be recreated as a separate rule set in tz database.
The IANA identifiers are there so you can be sure that as long as you are considering the area that identifier covers, you will have the correct time. Of course, what that area is changes (Asia/Ho_Chi_Minh now stands for reunified Vietnam, not just South Vietnam), but that is not our problem since we only care about now, and the now is pretty much well-known and obvious — including when it changes.
It is totally possible to map areas which correspond to time offsets, standard timezones, and IANA identifiers. How and if is a different matter.
What is the point of that? That would mean that from all IANA identifers which point to CET/CEST you only record Europe/Paris (no Amsterdam, Brussels, Berlin, etc.). Why even bother with the IANA identifiers then? You would end up with what is literally the whole of the countries observing CET/CEST tagged as Europe/Paris. Not even Napoleon managed to extend the French empire that far.
Agreed. Makes sense and clears up a lot of confusion.
Are you suggesting timezone:posix=* for things like CET? Why?
That’s the wrong way around. POSIX may codify those identifiers, but is not the source of them (laws and conventions are). For a key name it is weird. Use something along the lines of ‘standard time’; timezone:standard_time=CET for instance, coupled with timezone:daylight_savings=CEST, as suggested by @aighes.