criação dinâmica de novas tabelas de pesquisa com base nos valores da tabela de dados principal
Pergunta
Eu estou trabalhando em um aplicativo que aceita quaisquer dados enviados CSV, armazena-o ao lado de outros conjuntos de dados que foram enviados anteriormente, e, em seguida, produz uma saída (CSV ou HTML) com base na seleção do usuário que colunas / valores que deseja retornado. O banco de dados será expandido automaticamente para lidar com novas colunas diferentes / e tipos de dados, conforme necessário. Esta é, de preferência a um modelo de entidade-atributo-valor.
Exemplo - carregar estas 2 conjuntos para um banco de dados em branco:
dataset A:
name | dept | age
------+-------+------
Bob | Sales | 24
Tim | IT | 32
dataset B:
name | dept | age | salary
------+-------+------+--------
Bob | Sales | 24 | £20,000
Tim | IT | 32 | £20,000
Será programaticamente alterar a tabela 'dados' para que a importação de banco de dados uma resultado em 3 colunas recém-criados (nome, dept, idade). A importação de conjunto de dados B resulta em uma coluna recém-criado (salário). No momento, esquecer-se sobre se os registros devem ser combinados ou não, e que não há nenhuma normalização.
O problema que tenho é que algumas colunas também terá lookup valores - digamos Vamos que a coluna Dept, em algum momento no futuro ter valores que dão os números de endereço e telefone de que o departamento de associado. O mesmo pode ser verdade para a coluna Salário, olhando para cima agrupamentos fiscais, etc.
O número de colunas neste grande mesa não deve tornar-se demasiado elevada (algumas centenas), mas vai ser alto o suficiente para querer o usuário para administrar a estrutura tabela de pesquisa e valores através de um painel de administração em vez de ter de envolver os desenvolvedores de cada vez .
A tabela de pesquisa combinados, por outro lado iria precisam ser unidos várias vezes sobre a mesa de dados, escolhendo no nome da coluna de cada vez.
pesquisas individuais parece fazer sentido para mim, mas eu posso estar latindo completamente a árvore errada.
Solução
Eu concordo que as tabelas individuais é preferível. É mais escalável e melhor para a otimização da consulta. Além disso, se, no futuro, os usuários querem mais colunas em uma consulta particular, então você pode adicioná-los.
Sim, a aplicação terá de criar tabelas e restrições automaticamente Eu normalmente não faria isso, mas, em seguida, esta aplicação já está alterando tabelas existentes e adicionando colunas para eles, que eu normalmente não faria qualquer ! p>
Outras dicas
Ah, a idéia " Uma verdadeira consulta à tabela ". Uma das raras vezes Concordo com o senhor Celko. Pesquisa Google também
tabelas individuais de cada vez. É "correta" no sentido de banco de dados.
A minha razão (não pedantes normalização agradar): cada linha em uma tabela armazena apenas uma entidade. nomes, por exemplo frutas, carro marcas, marcas de telefone. Misturá-los é um disparate. Eu poderia ter uma marca de telefone chamado de "Apple". Er ... espere um minuto ...
Você disse,
Esta é, de preferência a um modelo de entidade-atributo-valor.
Mas parece-me que isso é exatamente o que você precisa.
Considere o uso de um triplestore RDF, e consulta-lo com SPARQL.
Esqueça SQL, este é um trabalho para RDF.