Есть класс базы данных. Статичный синглтон.
Синглтон это не очень хорошо ... почему - можно просто погуглить этому посвящено не мало материалов
Нужно ли при создании новых классов создавать свойство db protected и внутри класса работать с db->, а не в DB::
Ну тут все зависит от того как Вы будете передавать объект базы данных в конкретный экземпляр. Если будете например использовать какую-нибудь инъекцию зависимостей, тогда само собой нужно записывать объект базы в свойство класса. Если же Вы планируете в классах делать что-то типа такого $this->db = DB::getInstance() то особого профита это даст (кроме незначительного повышения читабельности кода), а вот количество используемой памяти увеличит (за счет выделения дополнительных ссылок на объект базы данных)