fcms
Новичок
Нужна помощь в организации структуры БД
Необходимо реализовать структуру БД для следующего решения:
Есть набор сайтов, на которых размещаются галереи изображений, существует единое хранилище, где хранятся все галереи. Для галерей назначаются категории (множественный выбор), к которым относится галерея и для каждого сайта назначаются условия, например сайт должен содержать галереи с категория1 и категория2 или категория3.
Необходима быстрая выборка по БД с условиями:
Получить список галерей для сайта1 (для сайта1 задано условие категория1 и категория2 или категория3).
Два возможных решения это задачи, которые придумал:
1. делаем таблицу галерей, таблицу категорий и еще одну таблицу для связи много ко многим, где производим связку галерей и категорий. Минус этого решения для приведенного выше условия – делать объединяющий запрос для двух запросов, в которых выбирать галереи для категории 3 и выбирать галереи для категории 1 и категории 2 (для того чтобы найти галереи с условием «и» необходимо дважды таблицу – связку использовать в запросе, при большом количестве условий «и» для каждого из условий необходимо выделять alias, что возможно повлечет большую нагрузку на mysql)
2. делаем таблицу галерей и таблицу категорий где одна категория – одно поле типа Boolean. При добавлении пользователем категорий делать alter table таблицы с категориями и добавлять поле. В этом случае опять же делать объеденяющий запрос на два запроса, но запросы будут более простыми select ftom категории where category3=true и select from категории where category1=true and category2=true. Для данного решения минус – количество категорий ограничено максимальным количеством полей таблицы mysql.
Возможно есть еще какие-то решения, которых я не нашел?
И какое из решений будет более оптимальным и «скорострельным» (количество категорий и условий для сайтов заранее не известно)?
Необходимо реализовать структуру БД для следующего решения:
Есть набор сайтов, на которых размещаются галереи изображений, существует единое хранилище, где хранятся все галереи. Для галерей назначаются категории (множественный выбор), к которым относится галерея и для каждого сайта назначаются условия, например сайт должен содержать галереи с категория1 и категория2 или категория3.
Необходима быстрая выборка по БД с условиями:
Получить список галерей для сайта1 (для сайта1 задано условие категория1 и категория2 или категория3).
Два возможных решения это задачи, которые придумал:
1. делаем таблицу галерей, таблицу категорий и еще одну таблицу для связи много ко многим, где производим связку галерей и категорий. Минус этого решения для приведенного выше условия – делать объединяющий запрос для двух запросов, в которых выбирать галереи для категории 3 и выбирать галереи для категории 1 и категории 2 (для того чтобы найти галереи с условием «и» необходимо дважды таблицу – связку использовать в запросе, при большом количестве условий «и» для каждого из условий необходимо выделять alias, что возможно повлечет большую нагрузку на mysql)
2. делаем таблицу галерей и таблицу категорий где одна категория – одно поле типа Boolean. При добавлении пользователем категорий делать alter table таблицы с категориями и добавлять поле. В этом случае опять же делать объеденяющий запрос на два запроса, но запросы будут более простыми select ftom категории where category3=true и select from категории where category1=true and category2=true. Для данного решения минус – количество категорий ограничено максимальным количеством полей таблицы mysql.
Возможно есть еще какие-то решения, которых я не нашел?
И какое из решений будет более оптимальным и «скорострельным» (количество категорий и условий для сайтов заранее не известно)?