Сложно сказать по сводке, но похоже, что вы разрабатываете динамическую атрибуцию пользователем.Этот подход к разработке называется EAV (Entity-Attribute-Value) и состоит из простого базового ключа коллекции (UserID, SiteID, ProductID ...) и затем строк, состоящих из пар имя / значение.В более сложной версии категории иногда добавляются в виде «супер-столбцов» в кортеж / строку и предоставляют подгруппы для набора пар имя / значение.
Проектирование таким образом перемещает ответственность за целостность типа данныхреляционная целостность и целостность кортежа на прикладном уровне.
Риск при выполнении этого в реляционной системе связан с разбиением кортежа или строки на ряд строк.Обновления, удаления, пропущенные значения и определение кортежа более недоступны при взаимодействии с человеком.По мере развития вашего приложения и изменения определения кортежа становится практически невозможно определить, отсутствует ли пара имя / значение, потому что она является частью кортежа более ранней версии или потому, что она была случайно удалена.Специальными исследованиями также становится сложнее управлять, так как бизнес-аналитики должны понимать виртуальную структуру либо в своих головах, либо в предоставленной документации.
Если вы хотите внедрить модель EAV, я бы посоветовал вампосмотрите на нереляционное решение (nosql), такое как MongoDB или CouchDB.Эти хранилища позволяют разработчику сохранять и извлекать «документы» или сообщения в формате json, которые по существу состоят из набора пар имя / значение и могут очень похожи на сериализованный объект.Преимущество в том, что вы можете хранить динамическую атрибуцию, не нарушая ваш кортеж.Вы всегда знаете, что у вас есть полный кортеж, потому что вы можете хранить и извлекать его как единый «блок» информации, который можно сериализовать и десериализовать по желанию.Вы также можете обновить отдельные атрибуты в кортеже, если это вызывает проблемы.
MongoDB также предоставляет некоторые функции, подобные базам данных, такие как индексы с несколькими атрибутами, механизм обработки запросов, надежный по сравнению с другими аналогичными нереляционнымипредложения и решение шардинга, которые гораздо меньше проблем, чем пытаться сделать это с MySQL.
Надеюсь, это поможет.