Pergunta

Eu tenho um banco de dados genealógicos (cerca de ovelhas na verdade), que é usado por criadores para pesquisar informação genética. Em cada disco que eu armazenar fatherid e motherid. Em uma tabela separada eu armazenar 'roll up' informações completas para que eu possa dizer rapidamente a árvore genealógica completa de qualquer animal sem recursão através de todo o banco de dados ...

Recentemente descoberto o tipo hierarchicalID embutido no servidor SQL 2008, na superfície, parece promissor, mas eu e estou querendo saber se alguém tem usado o suficiente para saber se é ou não seria apropriado no meu tipo de aplicativo (ou seja, dois pais , vários filhos)? Todas as amostras que tenho encontrado / li até agora lidar com relacionamentos do tipo gerente / empregado, onde um dado chefe pode ter vários empregados, e cada funcionário pode ter um único chefe.

As necessidades do meu aplicativo são semelhantes, mas não exatamente o mesmo.

Estou certo de que vou cavar esta nova tecnologia de qualquer maneira, mas seria bom atalho minha pesquisa se alguém já sabia que ele não foi projetado de tal forma que me permita fazer uso dele.

Também estou curioso que tipo de pessoas de desempenho estão vendo usando este novo tipo de dados em relação a outros métodos que fazem a mesma coisa.

Foi útil?

Solução

Eu não posso ver como ele iria trabalhar; em uma hierarquia regular, há uma única cadeia para a raiz, para que ele possa armazenar o caminho (que é o que o binário é ) para cada nó. No entanto, com vários pais, isso não é possível: mesmo se você dividir o matriarcado e partiarchy, você ainda tem uma mãe, 2 avós, 4 bisavós, etc (nem mesmo entrar em alguns dos scanerios mais "interessantes" possível, especialmente com animais). Não há caminho lógico único para codificar, de modo nenhum:. Eu não acho que isso pode funcionar no seu caso

Estou feliz em ser corrigido, porém.

Outras dicas

Assumindo que cada ovelha tem um progenitor masculino e um dos pais do sexo feminino, e que nenhuma ovelha pode ser seu próprio pai (levando a um Ovinos Temporal Paradox), então o que sobre o uso de dois HierarchyIDs?

CREATE TABLE dbo.Sheep(
    MotherHID hierarchyid NOT NULL,
    FatherHID hierarchyid NOT NULL,
    Name int NOT NULL
)
GO
ALTER TABLE dbo.Sheep 
ADD CONSTRAINT PK_Sheep PRIMARY KEY CLUSTERED (
    MotherHID,
    FatherHID
)
GO

Ao fazer-lhes uma PK conjunta, você seria identificar inequivocamente cada ovelha como o produto de sua hierarquia materna e é hierarquia paterna.

Pode haver algum problema inerente à espreita aqui, assim proceder com cautela com um par simples protótipos -. Mas inicialmente parece que ele iria trabalhar para você

Usando dois HierarchyID separado para indicar o pai ea mãe iria funcionar bem.

No entanto, você definitivamente não gostaria de utilizá-las como um indicador exclusivo da linha, já que é uma situação de 2-para-muitos. (Dois carneiros pode ter vários filhos.)

Eu não vejo nada de intrinsecamente errado com o uso de HierarchyId de ascendência - para Sheep, pelo menos. Para as pessoas, os relacionamentos são muito mais complicado do que "esta pessoa gerou essa pessoa", então obviamente o uso seria limitado a reprodução.

SQL Server HIERARCHYID não é uma solução robusta para muitas questões Genealógicas analíticas. É baseado em ORDPATH e eu usei-o por algum tempo na genealogia; mas há também muitos cenários em genealogia que não podem ser facilmente tratadas com métodos ORDPATH para grafos acíclicos dirigidos. Um banco de dados gráfico é muito mais robusto e bem adequado para a genealogia. Eu uso Neo4j: http://stumpf.org/genealogy-blog/graph- bancos de dados-em-genealogia .

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