Здесь мыслят вслух, но, возможно, было бы полезно просмотреть некоторые атрибуты (например, красный, желтый и зеленый) как «теги» вместо «категорий» и обрабатывать их с помощью отдельной логики.Это позволит вам сохранить модель Nested Set и избежать ненужного дублирования.Кроме того, это позволит вам упростить ваши категории.
Все зависит от того, как вы относитесь к информации.Категории - это просто еще один способ представления атрибутов.Я понимаю, что ваш пример был только в иллюстративных целях, но если вы собираетесь классифицировать фрукты по цвету, почему бы вам не классифицировать мясо так же, как белое мясо и красное мясо?Скорее всего, вы бы не.Поэтому я хочу сказать, что, возможно, нет необходимости классифицировать фрукты по цвету.
Вместо этого некоторые атрибуты лучше представлены другими способами.Фактически, в простейшем виде его можно записать в виде столбца в таблице «еда» с пометкой «цвет».Или, если это очень распространенный атрибут, и вы обнаружите, что значительно дублируете значение, его можно разделить на отдельную таблицу с именем «color» и сопоставить с каждым продуктом из третьей таблицы.Конечно, более абстрактный подход заключается в обобщении таблицы в виде «тегов» и включении каждого цвета в качестве отдельного тега, который затем можно сопоставить с любым продуктом питания.Затем вы можете сопоставить любое количество меток (цветов) с любым количеством продуктов питания, что дает вам истинное отношение «многие ко многим» и освобождает обозначения вашей категории, чтобы быть более обобщенными.
Я знаю, чтопродолжаются дебаты о том, являются ли теги категориями, или категории являются тегами и т. д., но, похоже, это один из примеров, в котором они могут быть взаимодополняющими и создавать более абстрактную и надежную систему, которой проще управлять.