誰もが系図データを保存するために、SQL Server 2008のHierarchialIDタイプを使用しました
-
05-09-2019 - |
質問
私は、遺伝情報を検索するにはブリーダーによって使用されている系図データベースを(羊について実際に)、持っています。各レコードには、私はfatheridとmotheridを格納します。別々のテーブルでは、私は...
私はすぐにデータベース全体を通して再帰せずに任意の動物の完全な家系図を伝えることができるような情報を「ロールアップ」完全保存しますは、最近では有望な音表面に、SQL Server 2008のに組み込まれてhierarchicalIDタイプを発見したが、私と誰もが、それはアプリの私のタイプでは適切であるかどうかを知るために十分な、それを使用している場合は疑問に思って(つまり、2人の親、複数の子供)?私が見つけた/読んですべてのサンプルは、これまでのボスは複数の従業員を持つことができます管理者/従業員のタイプとの関係に対処し、各従業員は、単一の上司を持つことができます。
私のアプリのニーズは似ていますが、全く同じではありません。
私はとにかくこの新しい技術を掘り下げると確信しています、誰かがすでにそれはそれは私がそれを利用することを可能とするような形で設計されていなかったことを知っていたならば、私の研究をショートカットするとよいでしょう。
私も同じことを行う他の方法と比較この新しいデータ型を使用して見ているパフォーマンスの人々のどのような好奇心ます。
解決
私はそれがどのように機能するかを見ることができません。定期的な階層では、各ノードに(のバイナリのあるものである)がルートに一本鎖であるので、パスを格納することができます。しかし、複数の親で、これは不可能です:あなたは家母長制とpartiarchyを分割した場合でも、あなたはまだ(さらに「面白い」scaneriosの一部になっていない1人の母、2つの祖母、4素晴らしい-祖母、などを持っています)、特に家畜と、可能。そこエンコードする単一の論理パスがないので、何も:私はこれはあなたのケースで作業することができないと思います。
。私はしかし、修正することがうれしいです。
他のヒント
各羊が1匹の雄親と1人の女性の親を持ち、何の羊は、その後どのような2 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
それらのジョイントPKにすることで、あなたは一意にその母体の階層の製品とそれの父方の階層として、それぞれの羊を識別することと思います。
ここに潜んでいるいくつかの固有の問題があるかもしれませんので、夫婦簡単なプロトタイプで慎重に進める - 。しかし、最初は、それはあなたのために働くだろうように思える。
うまくいくだろう父と母を示すために2つの別々のhierarchyid型を使用します。
しかし、あなたは間違いなく、それが2対多の状況なので、行のユニークな指標として、それらを使用したいとは思わないでしょう。 (二つの羊は、複数の子を持つことができます。)
少なくとも羊のために -私は祖先のためにhierarchyid型を使用して、本質的に間違って何も表示されません。人々のために、関係はとても明らかに使用が繁殖に限定されるだろう、はるかに「この人はその人を生んだ」よりも複雑である。
SQL Serverのhierarchyid型は、多くの系図の分析の質問のための堅牢なソリューションではありません。これは、ORDPATHに基づいており、私は系譜にしばらくの間、それを使用しました。しかし、容易に有向非巡回グラフのORDPATH方法で対処することはできません系図では、あまりにも多くのシナリオがあります。グラフデータベースは、はるかに堅牢で系図に適しています。私はのNeo4jを使用します。 http://stumpf.org/genealogy-blog/graph-データベース・イン・系図するます。