Я работаю над приложением магазина в PHP с MySQL. В настоящее время я храню свои данные в 4 таблицах: один для линейки продуктов, один для конкретных продуктов в этих продуктовых линейках, один для изображений продукта и тот, который указывает, какие изображения связаны с конкретными продуктами. Каждый конкретный продукт относится к одной линейке продуктов, каждый образ продукта может принадлежать нескольким конкретным продуктам, и каждый конкретный продукт может иметь несколько изображений. Мои таблицы выглядит следующим образом:Как хранить данные о товарах и продуктах для интернет-магазина?
ProductLines
id, name, description, etc.
SpecificProducts
productLineID
id, color, size, etc.
ProductImageLinks
specificProductID
imageID
Images
id, imageFileLocation, name, etc.
Это прекрасно работает так, но мне кажется, что это не очень эффективно для поисковых целей.
Например, у меня есть страница, в которой перечислены все линейки продуктов вместе с миниатюрами случайно выбранного изображения из этой линейки продуктов. Для этого я должен сначала запросить базу данных для списка всех строк продукта, затем выполнить отдельный запрос для каждой линейки продуктов, чтобы получить все конкретные продукты, имеющие связанные изображения, выбрать один из них, а затем запросить еще раз чтобы получить изображение.
Еще одна возможность, которую я рассмотрел, - использовать один запрос, чтобы получить все линейки продуктов, на которые я смотрю, второй запрос, чтобы получить все конкретные продукты для всех этих линий продуктов, третий запрос, чтобы получить все ссылки на изображения, которые определяют, какие изображения связаны с конкретными продуктами, и четвертый запрос, чтобы получить все эти изображения. Я предполагаю, что это будет немного быстрее из-за уменьшенного количества запросов, но это оставит много работы для PHP, чтобы разобраться в связях между линейками продуктов и продуктами и изображениями, что может быть столь же медленным.
Так что мой вопрос в том, есть ли лучший способ хранить эти данные? Или лучший способ получить его на основе базы данных, которую у меня уже есть? Или это один из двух вариантов, которые я определил, действительно, лучший вариант?
Редактировать: Я не храню файлы изображений в базе данных. Файлы изображений хранятся в файловой системе. Моя таблица «Изображения» в базе данных просто хранит расположение файла изображения вместе с полезной информацией, такой как заголовок изображения, текст alt и т. Д.
Когда вы извлекаете изображение? Нет необходимости извлекать его до тех пор, пока браузер не попросит об этом - так, чтобы выборка не была частью сборки этой страницы - только ссылка должна быть вставлена в html – nos
Под «изображением» я просто имел в виду мою конструкцию данных для изображений , Я фактически не извлекаю файл изображения, а только данные из базы данных, которые сообщают мне URL-адрес файла изображения плюс полезную информацию, например, текст alt. Извините, что было неясно. – Robert