всегда неплохо сначала придерживаться нормализованной базы данных (3NF), а также выполнять оптимизацию во время выполнения на основе используемой СУБД (нарушать 3NF только в случае необходимости) ...
Опять же, я не могу прояснить этот момент: избегать нарушений 3NF при любой приемлемой стоимости
если вы добавляете что-то, что нарушает 3NF, убедитесь, что часть 3NF вашей базы данных остается неповрежденной в любой возможной ситуации ... ваши избыточные «скопированные атрибуты» могут привести к несогласованным данным, поэтому убедитесь, что данные в избыточности бесплатная 3NF часть вашей модели имеет приоритет ... например. Регулярное восстановление избыточных частей из частей 3NF, когда загрузка сервера позволяет это, или предоставление проверенной схемы обновления, которая гарантирует, что обновления применяются ТОЛЬКО к части 3NF, а каждое обновление в части 3NF вызывает перестройку соответствующих избыточных данных ... Подобные подходы пытаются минимизировать риск повреждения данных, когда вам нужны избыточные данные по причинам, таким как производительность при чтении из db
также неплохо отделить часть 3NF БД от другой части (по пространству имен / префиксу / и т. Д.)
в зависимости от ожидаемого запроса (количество запросов на просмотр и количество запросов на обновление / вставку) может иметь смысл использовать предложенный вами подход с избыточными данными или нет. не стоит недооценивать правильный индекс таблицы, когда дело касается скорости.
за задачу сравнения (сортировки) альбомов, смешанных с другим контентом:
почему контентная сущность не может представлять альбом? альбом похож на каталог ... в нем могут быть подкаталоги, которые будут содержимым с точки зрения каталогов ... если он моделируется таким образом, вы сравниваете контент с контентом ... дополнительные атрибуты, в зависимости от конкретного типа контента, могут находиться в другой таблице с отношением 1: 0-1, в то время как «общие» сопоставимые атрибуты находятся в таблице содержимого
с другой стороны, вы могли бы использовать объединение для этого, которое в идеале было бы лишь немного медленнее, но могло бы сделать оба типа объектов единообразными для сравнения и сортировки ... в зависимости от ожидаемых запросов, может иметь смысл кэшировать эти объекты. отсортированные результаты для каждого просматриваемого объекта
надеюсь, это немного поможет