Как лучше работать с базой данных?
В общем случае, работайте с БД, как с БД, надо писать - пишите, надо читать - читайте. Все остальное, это оптимизация под конкретные проседания производительности, и применять их нужно тогда, когда таковые имеются, т.к. любая оптимизация не бесплатна, всегда чем-то жертвуешь.
Обычно разработка происходит так:
Сначала всегда все читается из бд и сохраняется в бд сразу. Так проще сделать, сложнее наплодить ошибок, быстрее получится первый прототип, сразу видны узкие места и кривые запросы к бд.
Если в какой-то момент возникает ситуация с очень частым обращением в бд, то данные начинают кешировать в памяти. 
Кто-то делает ленивый кеш (На примере сундука и вещей в нем: если в памяти есть данные о вещах этого сундука, то используем их. Если нет, то подгружаем из бд).
Кто-то инициализирует кеш при старте приложения (Грузим данные при старте сервера обо всех сундуках и вещах в них).
Насчет непосредственно работы с бд могу посоветовать глянуть https://github.com/aaberg/sql2o