Я храню различные элементы (заметки, статьи, изображения, файлы) в одной таблице (существует много общих метаданных для всех типов элементов - например, категории, теги, рейтинг, статистика и т. Д.).
Мой первый дизайн был таким: таблица Элементы , а также еще одна таблица "подробности" для каждого из типов элементов ( NoteItems , ArticleItems , PictureItems и т. Д.). Чтобы извлечь отдельный элемент, таблицы должны быть объединены один в один (SELECT * FROM Items INNER JOIN PictureItems ON Items.Id = PictureItems.Id WHERE Items.Id = N).
Я почти уверен, что этот «индивидуальный» дизайн сработал бы хорошо (это делалось несколько раз), однако я начинаю задумываться, не является ли дизайн излишним. Было бы намного проще иметь одну таблицу ( Items ).
Скажем, около 5% элементов изображения или типа файла.
А теперь вопрос: если я займусь (почти) дизайном одной таблицы, лучше ли было бы в любом случае иметь детальные таблицы для полей изображения (для элементов изображения и файла, конечно)?
Сценарий 1: только одна таблица: Элементы (для хранения заметок, статей, изображений, файлов ...)
Сценарий 2: две таблицы: Элементы (для хранения заметок, статей, файлов изображений), ImageItems (для хранения только поля изображения типов элементов изображения, файла); отношение один к одному
(Сценарий 3 будет незначительным вариантом сценария 2; с 3 таблицами (Items, PictureItems, FileItems))
Преимущества сценария 1:
- более простые запросы выбора (без объединений)
- обновления без транзакций (только одна таблица обновляется при INSERT / UPDATE)
- производительность, масштабируемость благодаря обновлениям без транзакций?
Преимущества сценария 2:
- Чистый дизайн
- меньшее потребление данных (в сценарии 1 около 95% элементов типа, отличного от изображения или файла, будут иметь значение NULL в поле изображения, то есть около 16 байт тратится на указатель)
Какой сценарий вы бы выбрали: 1 (обновления без транзакций) или 2 (снижение потребления данных)? Спасибо за ваше мнение.