A mapping does not have to answer with a number. Read the ENS registry, where every name on Ethereum is three fields under a hashed key, and the owner of one record decides the owner of every record beneath it.
Four token contracts have gone past now, three of them fungible and one not, and every one kept the same kind of table: who holds what. This file keeps something else entirely. It is the ENS registry, one hundred and eighty nine lines, and it is where every name on Ethereum is written down.
Nothing in it is fungible and nothing in it is counted. What it stores is a record: several facts about one name, kept together under one key. Read the state block first, the way you always do, and the whole difference shows up in two lines.
Line 13 is the registry itself. Read it left to right: hand it a `bytes32`, get back a `Record`. A token's ledger returns a number at this point in the line. This one returns a name for something declared a few lines above it, and that is the shape of the whole file.
Line 14 you have met before, in a token's allowance table: an address, then another address, then a `bool`. Two tables, and fourteen functions arranged around them. Every one of those functions either reads one of these two or writes one of them.
Lines 7 to 11 declare the shape, and you know this one already: a struct, three fields, each written as a type and then a label. An owner, a resolver, and a `uint64` called `ttl`. Sitting there on its own it stores nothing at all.
Line 13 is where it becomes storage. A mapping whose value is a record rather than a number gives every key three slots instead of one. Ask for `records[node].owner` and you are reading one field, out of one entry, by name.
The key type is `bytes32`: thirty two bytes, fixed width, with no length to carry around. Line 34 takes one, line 124 takes one, line 146 and line 154 take one. Scroll the file end to end and every function that talks about a name takes that same type.
The word `string` does not appear once. A name is turned into thirty two bytes before it ever reaches this contract, and what arrives is the result of that. Line 13 stores records under those bytes, and the text that produced them lives somewhere else.