БД SQL — нормальны ли magic numbers в БД, которые имеют константы в back end коде? Или лучше сделать таблицу и отношение?
Как показала практика в живущих проектах "1,2,3 и никогда не будет расширятся" - достаточно быстро расширяется)
Как примеры: еще недавно пол был М или Ж и можно было хардкорить… уже типа нет...
Ну и референсная таблица - хорошее место для хранения вариантов описаний ("запр.", "запрещен к продаже") для разных случаев отображения. 
p.s. Кстати почему бы не быть товару показываемым только неким группам? (вот и 4 вариант для того что не может меняться)
Я считаю что нормально иметь такие вещи целиком в php, а в базе держать просто tinyint