второй более норм, но есть моменты:
1. это репозиторий, класс который сохраняет сущности в хранилище
поэтому
BookRepository
2. create update сделать приватными и можно заменить на save
public function save(Model $model): void{
if($model->getId()>0){
$this->update($model);
}
else{
$this->create($model);
}
}
3. public function initDatabase(PDO $db) - это контруктор
public function __construct(PDO $db)
4. public function get(Book $book) - что это? public function findById($id): ?Book - более правильно
5. public function getAll() - правильных ход, но если 1млн записей, все вытащите? нужна критерия выборки и коллекция на выходе а не массив
public function getAll(Criteria $criteria): BookCollection
п.с вообще то если ООП то у вас Book должна быть богатой моделью предметной области в данном случае это Rich Model где поведение модели размазано по слоям