Это решение должно основываться на соображениях проектирования модели, а не на вопросах реализации.
Если все следующее верно, используйте один большой двоичный объект для всех изображений в таблице Product
:
- Изображения никогда не передаются между продуктами - это может быть полезно, когда существует несколько версий одного и того же продукта, но они выглядят одинаково, например, разные модельные годы одного и того же продукта,
- Изображения никогда не обновляются индивидуально - это включает ситуации, когда вы добавляете новые изображения, удаляете старые изображения, заменяете изображения новыми и т. Д.
- Никогда не требуется подмножествоизображения продуктов - это может быть желательно, когда вы показываете разные изображения одного и того же продукта на разных рынках, например, продукты, маркированные на разных языках
В противном случае создайте отдельную таблицу, прикрепленную к Product
вотношение «многие к одному» для не общих изображений или с дополнительной таблицей «многие ко многим» для общих изображений.
В некоторых случаяхЕсли будет полезно удалить Images
из Product
и выбрать вместо него API, аналогичный GetProductImages(productId, additionalCriteria)
, с additionalCriteria
, представляющим контекст, в котором вы хотите использовать изображения (например, рынок).
Наконец, вы можете выбрать ленивую загрузку изображений в ситуациях, когда некоторые варианты использования не показывают изображения вообще - например, раскрывающиеся списки могут включать только DisplayName
, тогда как более подробный вид можетвключить изображения. Это соображение относится как к нормализованным, так и к денормализованным (все изображения в BLOB) решениям.