I don't know what is "best". For reference gossip has event, event_tag (fk to event), event_relationship (relationship being reply, quote, reaction, deletion, etc), event_flags (user-supplied like 'viewed' or 'mute'), event_hashtag, event_relay (where it was seen), person, person_relay, settings, local_settings (ones not synced to the network).
It also reads from the database sparingly preferring memory maps with a sort of write-through sematic (although inconsistently implemented at present), and only queries the database in fairly rare circumstances. I'm entirely unsure if using that memory caching is better than the database's own memory caching, or if it is entirely unecessary and wasteful. Ideally a database would mmap and use kernel paging, however we talk to it using SQL queries which must be planned and executed which is not free. Preplanning all the queries in a global map, and not trying to do any memory caching, might be a better strategy but I'm far down this road.