Tout le monde utilise SQL Server 2008 Type HierarchialID pour stocker des données de généalogie

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

Question

J'ai une base de données généalogiques (environ moutons en fait), qui est utilisé par les éleveurs à la recherche de l'information génétique. Dans chaque enregistrement je stocke fatherid et motherid. Dans une table séparée je stocke des informations complètes « rouler » pour que je puisse rapidement dire l'arbre généalogique complet de tout animal sans récursion à travers la base de données entière ...

a découvert récemment le type hierarchicalID construit dans le serveur SQL 2008, sur la surface, il semble prometteur, mais je et me demande si quelqu'un a utilisé assez pour savoir si oui ou non il serait approprié dans mon type d'application (par exemple les deux parents , plusieurs enfants)? Tous les échantillons que j'ai trouvé lecture / traiter à ce jour avec le gestionnaire / relations de type employé où un patron donné peut avoir plusieurs employés, et chaque employé peut avoir un seul patron.

Les besoins de mon application sont similaires, mais pas tout à fait la même chose.

Je suis sûr que je vais creuser dans cette nouvelle technologie de toute façon, mais il serait agréable de raccourci mes recherches si quelqu'un savait déjà qu'il n'a pas été conçu de telle façon qu'il me permettrait de faire usage.

Je suis aussi curieux de savoir ce genre de personnes de performance voient en utilisant ce nouveau type de données par rapport aux autres méthodes qui font la même chose.

Était-ce utile?

La solution

Je ne vois pas comment cela fonctionnerait; dans une hiérarchie régulière, il y a une seule chaîne à la racine, donc il peut stocker le chemin (qui est ce que le binaire est ) à chaque nœud. Cependant, avec plusieurs parents, cela est impossible: même si vous divisez matriarcat et partiarchy, vous avez encore une mère, 2 grands-mères, 4 grands-mères, etc (même pas entrer dans certains des plus scanerios « intéressants » possible, en particulier avec le bétail). Il n'y a pas de chemin logique simple à coder, donc pas. Je ne pense pas que cela peut fonctionner dans votre cas

Je suis heureux d'être corrigée, cependant.

Autres conseils

En supposant que chaque mouton a un parent mâle et un parent femelle, et qu'aucun mouton ne peut être son propre parent (conduisant à un paradoxe temporel Ovine), alors qu'en utilisant deux 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

En leur faisant une PK commune, vous auriez l'identification unique de chaque mouton comme le produit de sa hiérarchie maternelle et de la hiérarchie paternelle.

Il peut y avoir un problème inhérent qui se cache ici, donc faire preuve de prudence avec quelques simples prototypes -. Mais d'abord il semble que cela fonctionnerait pour vous

En utilisant deux HierarchyID séparés pour indiquer le père et la mère fonctionnent bien.

Cependant, vous certainement pas vouloir les utiliser comme un indicateur unique de la ligne, car il est un 2 à de nombreuses situations. (Deux moutons peuvent avoir plusieurs enfants.)

Je ne vois rien de mal en soi à l'aide HierarchyId pour l'ascendance - pour moutons au moins. Pour les personnes, les relations sont beaucoup plus compliquées que « cette personne que personne begat », donc évidemment l'utilisation serait limitée à l'élevage.

SQL Server hierarchyid n'est pas une solution robuste pour de nombreuses questions analytiques de généalogie. Il est basé sur ORDPATH et je l'ai utilisé pendant un certain temps dans la généalogie; mais il y a trop de scénarios dans la généalogie qui ne peuvent pas être facilement traitées avec des méthodes de ORDPATH pour les graphes acycliques orientés. Une base de données graphique est beaucoup plus robuste et bien adapté pour la généalogie. J'utilise Neo4j: http://stumpf.org/genealogy-blog/graph- bases de données en généalogie .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top