Meu problema geral é que eu quero que os usuários sejam capazes de, com efeito, adicione um número arbitrário de campos de diferentes tipos para associar com itens. Então, uma solução que eu estou considerando é o seguinte:
table `items`
item_id | name
table `parameters`
parameter_id | name | type
table `values`
item_id | parameter_id | datetimevalue | datevalue | integervalue | etc...
Se um usuário quiser adicionar um Data de nascimento parâmetro para alguns de seus itens, que gostaria de acrescentar um parâmetro para a tabela de parâmetros e, em seguida, uma entrada na tabela de valores para cada item que ele quer ter esse parâmetro, com o data indo na coluna datevalue e todos os outros campos 'valor' deixado nulo.
Para encomendar os seus itens por Data de nascimento, supondo que este parâmetro tem parameter_id = 1, eu faria
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...)
A minha pergunta concreta é, este vai POR ORDEM ser performance? Será que vai fazer bom uso de índices? Será que vai fazer um trabalho desnecessário?
A minha pergunta geral é, é esta abordagem boas práticas? Existe uma maneira melhor de fazer isso?