JSON тип данные в MySQL, в чем минус?
По большому счету это денормализация базы.
Денормализацию стоит применять когда Вы 100% понимаете что делаете, получая в каких-то конкретных условиях ускорение каких-то конкретных запросов, взамен теряя в гибкости при дальнейшей разработке и в производительности во всех остальных местах.
Попробую расписать на Вашем примере (хранить категории поста в свойстве поста в json) чтобы было понятней:
Тут все отлично пока Вам просто нужно выводить категории у поста.
Как только нужно искать по категории - начинаются проблемы, какой нибудь JSON_CONTAINS - будет дико медленным на нормальном объеме данных (ведь ему нужно выполниться для каждой строки таблицы, а индексов то и нет).
Решение - заводить еще одну денормализованное свойство для категорий - в котором хранить id постов.
Но дальше всплывают новые задачи которые в нормализованной базе решаются за 5 секунд, а в денормализованной - нужно опять же кодить:
- поиск по нескольким категориям сразу
- расчет количества постов у категорий
- итд итп.
К чему это я все?
К тому что используйте 3 НФ, и только когда упретесь в реальную производительность базы - начинайте думать про денормализацию.
Разница в скорости и в возможностях выборки. Почитайте как работают базы данных, как строятся индексы и что вообще значит слова реляционная.