Я сейчас перепроектирую базу данных, которая может содержать много данных. У меня есть возможность либо включать в базу несколько столбцов, либо использовать много строк. Это, наверное, проще, если бы я сделал какие-то наброски ниже:Более эффективно иметь больше столбцов или больше строк?
item_id | user_id | title | description | content | category | template | comments | status
-------------------------------------------------------------------------------------------
1 | 1 | ABC | DEF | GHI | 1 | default | 1 | 1
2 | 1 | ZYX | | QWE | 2 | default | 0 | 1
3 | 1 | A | | RTY | 2 | default | 0 | 0
4 | 2 | ABC | DEF | GHI | 3 | custom | 1 | 1
5 | 2 | CBA | | GHI | 3 | custom | 1 | 1
Versus что-то в следующем составе:
item_id | user_id | attribute | value
---------------------------------------
1 | 1 | title | ABC
1 | 1 | description | DEF
1 | 1 | content | GHI
... | ... | ... | ...
я, возможно, захотите создать дополнительные атрибуты в будущем (50 ради аргументов) - поэтому при использовании нескольких столбцов может быть много пустых ячеек. Имена атрибутов будут использоваться повторно, если это возможно, для разных типов контента - например, запись в блоге, событие и галерея - title
будет легко использоваться повторно.
Итак, мой вопрос: эффективнее ли использовать несколько столбцов или несколько строк - с точки зрения скорости запроса и дискового пространства. Или вы бы вместо этого предложили таблицы отношений, так что есть таблица для блогов, таблица для событий и т. Д. Я просто пытаюсь найти легко расширяемое решение, где я в идеале не хочу создавать таблицу для каждого типа поскольку я думаю о разработчиках, создающих новые виды контента через систему app/API (с жестко контролируемыми атрибутами).
Дополнительный вопрос, если несколько строк
Как я мог, в MySQL, конвертировать несколько строк в удобный формат колонок (я предполагаю, что временные таблицы) - так что я мог бы сделать некоторую фильтрацию по типу контента, в качестве примера ,
Обратите внимание, что вторая модель (версия EAV), как правило, трудно работать. – Strawberry
@Strawberry, с чем сложно работать? Я новичок и собираюсь начать проект, и я пытаюсь решить между этими двумя типами проектов. – neuronet