Моя общая проблема заключается в том, что я хочу, чтобы пользователи могли, по сути, добавлять произвольное количество полей разных типов, чтобы связать их с элементами. Итак, одним из решений, которое я рассматриваю, является следующее:
table `items`
item_id | name
table `parameters`
parameter_id | name | type
table `values`
item_id | parameter_id | datetimevalue | datevalue | integervalue | etc...
Если пользователь хочет добавить параметр «Дата рождения» для некоторых своих элементов, мы добавим один параметр в таблицу параметров, а затем одну запись в таблице значений для каждого элемента, для которого он хочет иметь этот параметр. с датой, идущей в столбце datevalue, а все остальные поля 'value' остаются пустыми.
Чтобы упорядочить его предметы по «дате рождения», предположив, что для этого параметра параметр_id = 1, я бы сделал
SELECT * from
items
join values on items.item_id = values.item_id
join parameters on parameters.parameter_id = values.parameter_id
where parameter_id = 1
order by coalesce(values.datetimevalue, values.datevalue, values.integervalue...)
Мой конкретный вопрос: будет ли этот ORDER BY исполнителем? Будет ли оно эффективно использовать индексы? Будет ли это делать ненужную работу?
Мой общий вопрос: является ли этот подход хорошей практикой? Есть ли лучший способ сделать это?