Насколько плохой практикой является использование JSON в реляционных базах данных (это строго запрещено, иногда разрешается или это хороший тон)?
Настолько же, насколько и хранение картинок, а также текстов. Ну двухгиговое JSON-полотно наверное не стоит хранить, ну в остальном требования такие же, как ко всему остальному что хранится в реляционной БД:
Значение атрибута должно быть атомарным с точки зрения запросов к БД. И то это касается таких СУБД, которые JSON не поддерживают. Если СУБД поддерживает JSON - тогда только документация к СУБД ответит тебе, что там можно, а что - нет. Если значение неатомарно с точки зрения запросов - тогда нужно будет постоянно его собирать-разбирать, да и индексы нужные не факт что получится построить.
Но в реляционных всё странно — сам принцип реляционных баз данных говорит, что для одного поля строго одно значение
А тут я задам вам каверзный вопрос - строка это одно значение или нет? Почему это мы решили, что можно сохранить в атрибут строку? Я требую посимвольного разбития! Вам не приходило в голову, что сначала нужно крепко подумать над понятием "одно значение"? Что это вообще значит? А если хранится число с плавающей точкой - это одно значение или два?