Pergunta

Eu estou trabalhando em um site de rede social com uma árvore genealógica que é GEDCOM-compliant. Temos de decidir se deve usar uma estrutura de banco de dados horizontal ou vertical para perfis de usuário. Então, eu gostaria de saber se alguém pode responder quando usar uma estrutura de banco de dados horizontal e quando usá-estrutura de banco de dados vertical.

Eu encontrei algumas respostas para os locais onde os campos não são decididas compras: uma estrutura de banco de dados vertical deve ser usado. Mas eu estou confuso sobre o que usar para um site árvore genealógica. Devo usar vertical ou horizontal?

Foi útil?

Solução

Eu suponho que você usar um banco de dados relacional como MySQL, MS SQL, SQLite, PostgreSQL ou Oracle para armazenamento?

Gedcom é um padrão para troca de informações para que você saiba quantas colunas você terá. Talvez o padrão é estendido com novas propriedades no futuro, mas isso provavelmente não vai ser um monte de novas propriedades. Você pode facilmente estender uma mesa com algumas novas colunas.

Gostaria de usar uma tabela 'horizontal' e não a-attribyte-sistema de valores entidade (tabela vertical). sistemas tabela vertical tendem a ser lento. Eles não podem ser devidamente indexado e confundir o otimizador de consulta.

Ela se torna uma história diferente quando seus usuários podem definir novas propriedades em seus perfis, como colo olho (u) r ou colo favorito (u) r-se. Como flexível que você quer esses perfis para ser?

Outras dicas

bancos de dados verticais são grandes para detawarehousing e ler / somente relatório. Normalmente você re-gerá-los durante a noite. Seu desempenho de gravação é geralmente muito ruim no entanto SELECTs são 10-100 vezes mais rápido.

Um cenário típico para usar um banco de dados vertical é OLAP relatórios quando você cria um (diariamente) instantâneo de dados e consultas, em seguida, correr contra ele. A maioria de benefício vem das consultas que solicitam apenas uma pequena número de campos, por exemplo, quando você selecionar apenas um punhado de campos de uma ampla e grande mesa. Tal consulta consulta contra milhões de registros (por exemplo cálculo SUM / COUNT / AVG) levará apenas um ou dois segundos.

Seu caso não parece ser um bom candidato para um banco de dados vertical.

Eu concordo com tuinstoel, sistema de mesa vertical / EAV não é apenas lento, mas também um tempo muito complexo. Às vezes é necessário para escrever alguns dos seus próprios métodos de API que lidam com essas tabelas e desenvolvedores de apenas lidar com esses métodos a complexidade evitar.

Então, se você não precisa adicionar mais campos, em seguida, ficar com mesa horizontal. No entanto, você pode ser preciso tabela diferente se você também se você estiver indo para suportar a capacidade multilíngue. Mas eu aconselho a ainda ficar com mesas horizontais.

Também estou desenvolvendo um site envolvendo perfil do usuário e estou usando tabelas horizontais e se haverá diferentes línguas apoio necessário, no futuro, então eu vou modificar apenas para campos onde a linguagem importa.

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