у меня есть схемы базы данных, которая хранит метаданные изображения продукта и выглядит следующим образом:базы данных (де) нормализация - таблица с изображениями для различных объектов
image_sizes (this is purely metadata - what sizes to create of given image, eg "thumb", "main image", "sidebar widget icon of the product", etc):
image_size_id (auto-increment, pk)
name (thumb, main)
max_width
max_height
crop (flag, to crop or just resize to fit)
images table:
image_id (auto-increment, pk)
image_size_id (fk to image_sizes)
image_batch_id (fk to batches, when there is uploaded image for the product, an image is created for each product size, all the images have same batch_id, described below)
location (relative path to the project eg uploads/products/thumbs)
width (result after processing, in pixels
height (result after processing, in pixels)
size (in bytes)
image_batches tables:
image_batch_id (auto-increment, pk)
product_id (fk, to which product it belongs)
original_filename (eg the file was called 123.jpg when uploaded)
is_default (if the product 10 images, one is default)
Так эта схема позволяет мне получить все «эскизы» для например, продукт и показать их. Теперь проблема в том, что я хочу иметь одну и ту же схему для пользователей или для других объектов (в приложениях также будут указаны места проведения).
Было бы целесообразно, если бы я изменить приведенную ниже схему, так что:
image_batches
имеют дополнительный столбец image_type_id
. Будет image_type
для products
, users
, everything else that needs images
. И вместо product_id
будет entry_id
, который для образа_type products
будет идентификатором продукта, для типа изображения users
будет user_id и так далее.
Я знаю, что это денормализация, которая может привести к проблемам (если на стороне приложения есть ошибка). Но мне кажется, что слишком много накладных расходов, если мне нужны изображения для нового типа сущности, чтобы создать набор из трех новых таблиц для решения одной и той же проблемы. Также этот способ будет (вид) дублирования кода на стороне приложения.
Что вы предложите?
Идеально, решение B) кажется правильным решением! – ddinchev