criação dinâmica de novas tabelas de pesquisa com base nos valores da tabela de dados principal

StackOverflow https://stackoverflow.com/questions/673805

  •  21-08-2019
  •  | 
  •  

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 questão é a possibilidade de utilizar as tabelas de pesquisa individuais para cada coluna (valor, descrição), ou de uma mesa combinada de consulta que faz referência a coluna (coluna, valor, descrição). Normalmente eu iria optar por tabelas de pesquisa individuais, mas aqui a aplicação terá de criá-las automaticamente (por exemplo lookup_dept, lookup_salary) e, em seguida, adicionar um novo juntar-se na instrução mestre SQL. Isso seria feito a pedido do utilizador e não quando é adicionado a coluna (para evitar centenas de mesas vazias).

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.

Foi útil?

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

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top