При проектировании хранилища данных следует использовать избыточность там, где вы не работали бы в реляционной базе данных.
Так, например, ваш код может иметь сущности для «Заголовков», которые он добавляет при каждом добавлении книги и удаляет при каждом удалении книги. Затем вы можете запросить объекты «Заголовки», чтобы получить все заголовки, не загружая все книги.
Ваш код должен обеспечивать соблюдение этих правил, но с небольшой абстракцией Python это не сложно (т. Е. Все обращения к книгам или заголовкам за классом, методы которого обеспечивают связь в ваших данных).
Я настоятельно рекомендую прочитать некоторые из более сложных тем в хранилище данных здесь .
Люди часто называют моменты реализации «как я научился перестать беспокоиться и любить хранилище данных». Это в основном моменты, когда люди переключаются с привычного представления о данных на обычную форму и на распределенное / избыточное представление, где вы можете просто распылить данные в хранилище данных, и оно с этим справится.