dimensions.tokens carries an asset_id only where a token has been matched to a curated asset; that layer, with issuers and the native-or-bridged split, is Assets.
Pages
Registry
One row per token: address, symbol, decimals, and its asset if it has one.
Transfers
Every fungible token transfer.
Balance changes
Every increase and decrease in a balance, two rows per transfer.
Balances
Holder balances on any past date, computed at query time.
Prices
Daily and hourly USD close per token.
Tokens and assets
Every table here keys ontoken_id, which is {token_address}-{chain_id}. The same instrument issued on two chains is two tokens, and a bridged wrapper of it is a third. Deciding that several tokens are all the same instrument is a judgment somebody has to make, so that grouping lives on the asset layer rather than here.