#mysql #query-optimization
#mysql #оптимизация запросов
Вопрос:
Мне было интересно, какое лучшее решение для этой проблемы :
У меня есть статьи, и у меня есть категории, статья относится к категории. Существует два типа категорий, определяемых пользователем и определяемых системой (например, «входящие», «корзина» и т. Д.)
Итак, вопрос в том, должен ли у меня быть только один элемент для каждой категории, определенной системой, и все статьи всех пользователей будут привязаны к этим категориям, или я должен создать все категории, определенные системой, при создании пользователя, и прикрепить эти категории к пользователю?
Первое решение приведет к большому количеству статей в каждой категории, определенной системой, а второе решение приведет к большому количеству «избыточных» элементов в категории. Какое решение является лучшим?
Ответ №1:
Это ваш выбор. Оба подхода имеют свои плюсы и минусы. Если вы выберете первое решение, ваш оператор select будет содержать WHERE
предложение, подобное этому:
WHERE (category.type = 'SYSTEM' OR category.user_id = :USER_ID)
Второе решение упростит ваши инструкции select:
WHERE category.user_id = :USER_ID
Второе решение усложнит добавление пользователя. Вам необходимо создать системные категории для пользователя:
INSERT INTO CATEGORY (user_id, category_name, ...) SELECT :USER_ID, system_category, ... FROM SYSTEM CATEGORY;
И если вы добавляете новую системную категорию, вам нужно вставить ее для всех пользователей.