Как правильно спроектировать базу и составить SQL запросы?
Если это не учебное задание, используйте, пожалуйста, ORM. Сейчас никто не работает с голым SQL на таких задачах. Потому что, во-первых, трудно разбираться с чужой реализацией шаблонных механизмов открытия/закрытия соединения, обращений к таблицам. Во-вторых, следует решать проблемы проектирования данных, а не реализации их записи в БД. Если задача учебная, то схема стандартная и мне нравится. Всё правильно нарисовано. Реализуется так же, как и любая ORM:
1. Создаём класс коннектора БД. Описываем в нём методы прямой записи в БД и удаления записей.
2. Создаём классы Comment и Category. Пусть у них будут методы get, update, delete, create. например get(id) получает из коннектора raw с данными и преобразует в ассоциативный массив. Там же реализуется получение полей связанной категории. Ну и метод delete у Comment запускает метод delete у Cаtegory, удаляя и Comment, и Category, и cat_id.
Нормальная архитектура. В принципе так и делается. Чтобы не нарушить целочтность БД используйте внешние ключи с аттрибутом CASCADE на UPDATE и DELETE.
upd: Правда я бы переименовал таблицу cat_id в category_comment_assignment или просто category_comment. И выпилил бы из неё поле id. А ключём бы сделал связку category_id и comment_id. Ну это так... для порядка :)