Cualquier persona Servidor SQL utilizada Tipo 2008 HierarchialID para almacenar los datos de la genealogía

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

Pregunta

Tengo una base de datos genealógica (alrededor de ovejas en realidad), que es utilizado por los criadores para investigar la información genética. En cada registro almaceno fatherid y motherid. En una tabla separada almaceno completa 'enrollar' información de modo que puedo decir rápidamente el árbol genealógico completo de cualquier animal sin recursiva a través de toda la base de datos ...

recientemente descubierto el tipo hierarchicalID integrado en el servidor SQL 2008, en la superficie suena prometedor, pero yo y me pregunto si alguien ha utilizado lo suficiente como para saber si es o no sería apropiado en mi tipo de aplicación (es decir, dos padres múltiples, niños)? Todas las muestras que he encontrado / leído hasta ahora lidiar con relaciones de tipo administrador / los trabajadores cuando un jefe dado puede tener varios empleados, y cada empleado puede tener un solo jefe.

Las necesidades de mi aplicación son similares, pero no exactamente lo mismo.

Estoy seguro de que voy a profundizar en esta nueva tecnología de todos modos, pero sería bueno atajo mi investigación si alguien ya sabía que no fue diseñado de tal manera que me permitiría hacer uso de ella.

También estoy curioso por saber qué clase de gente de rendimiento están viendo el uso de este nuevo tipo de datos frente a otros métodos que hacen lo mismo.

¿Fue útil?

Solución

No puedo ver cómo funcionaría; en una jerarquía regular, hay una sola cadena a la raíz, por lo que puede almacenar la ruta (que es lo que el binario es ) para cada nodo. Sin embargo, con múltiples padres, esto no es posible: incluso si se divide el matriarcado y partiarchy, todavía tiene 1 madre, 2 abuelas, bisabuelas 4, etc (ni siquiera entrar en algunos de los scanerios más "interesantes" posible, especialmente con el ganado). No hay un camino lógico para codificar sola, por lo que no:. No creo que esto puede funcionar en su caso

Estoy feliz de ser corregido, sin embargo.

Otros consejos

Suponiendo que cada oveja tiene un progenitor macho y una hembra de los padres, y que ninguna oveja puede ser su propio padre (que conduce a una paradoja temporal ovino), entonces ¿qué pasa con el uso de dos 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

Por lo que una PK conjunta, sería identificar de manera única cada oveja como el producto de su jerarquía materna y paterna de jerarquía.

Puede haber algún problema inherente al acecho aquí, así que proceder con cautela con un par de prototipos simples -. Pero en un principio parece que podría funcionar para usted

El uso de dos HierarchyID separada para indicar padre y la madre funcionaría bien.

Sin embargo, que sin duda no desea utilizar los como indicador único de la fila, ya que es una situación-2-a-muchos. (Dos ovejas pueden tener varios hijos.)

No veo nada inherentemente malo con el uso de un ancestro HierarchyId - de ovinos por lo menos. Para las personas, las relaciones son mucho más complicados que "esta persona engendró a esa persona", por lo que, obviamente, el uso estaría limitado a la reproducción.

SQL Server hierarchyid no es una solución robusta para muchas cuestiones de genealogía analíticas. Se basa en ORDPATH y lo he usado durante un tiempo en la genealogía; pero hay demasiados escenarios en genealogía que no se pueden tratar fácilmente con métodos ORDPATH para grafos dirigidos acíclicos. Una base de datos gráfica es mucho más robusto y muy adecuado para la genealogía. Yo uso Neo4j: http://stumpf.org/genealogy-blog/graph- bases de datos-en-la genealogía .

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top