2009-02-23 9 views
6

遺伝情報を研究するブリーダーによって使用される系統データベース(実際には羊について)があります。各レコードに私は父母と母親を保管しています。別のテーブルでは、データベース全体を再帰することなく、動物の完全な家系図をすばやく伝えることができるように、完全な 'ロールアップ'情報が保存されます...誰もが系図データを保存するためにSQl Server 2008 HierarchialID型を使用しました

SQL Server 2008には、それは私のタイプのアプリ(つまり2人の親、複数の子供)に適しているかどうかを誰かが十分に知っているかどうか疑問に思っていますか?特定の上司が複数の従業員を持つことができ、各従業員が1人の上司を持つことができるマネージャ/従業員のタイプの関係を、これまでに見つけて読んだサンプルはすべて読んでいます。

私のアプリのニーズは同じですが、全く同じではありません。

とにかく私はこの新しい技術を掘り下げることは確かですが、誰かがすでにそれを利用するような方法で設計されていないことを知っていれば、私の研究を簡単にするのは良いことです。

この新しいデータ型と同じことをする他の方法を使用して、どのようなパフォーマンスを人々が見ているのか不思議です。

答えて

3

どのように動作するのかわかりません。通常の階層では、ルートへの単一のチェーンが存在するため、パス(バイナリです)を各ノードに格納することができます。しかし、複数の親では、これは可能ではありません。たとえあなたが母系と父親を分割したとしても、母親は1人、祖母は2人、祖母は4人です(もっと面白い可能であれば、特に家畜で)。エンコードする単一の論理パスは存在しないので、これはあなたのケースではうまくいかないと思います。

私は訂正されました。

+0

これは私の最初の考えでした...今、私は頭を "逆さま"のような木のコンセプトにしようとしています。私。それぞれの子は上司で、両親は従業員です...モデルが保持しているかどうかを完全には見ていません... –

+2

それは非常に高価です(新しい子羊に比べてすべてを再計算する必要があります)あなたがそれぞれの子羊にそれぞれの子羊を帽子で覆わないと、おそらく(テストされていない)まだ動作しません。 –

+0

あなたはこのツリーを片側だけ裏返しにしませんか?子供から両親、祖父母などへ –

5

それぞれのヒツジに1つのオスの親と1つのメスの親があり、ヒツジがそれ自身の親になることはできないと仮定すると(Ovine Temporal Paradoxにつながります)、2つのHierarchyIDを使用するとどうなりますか?それらの関節PKにすることにより

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 

、あなたは一意にその母体の階層の製品とそれの父方の階層として、それぞれの羊を識別することと思います。

ここにはいくつかの固有の問題が潜んでいる可能性があるので、いくつかの簡単なプロトタイプで慎重に進めてください。しかし、最初はそれがうまくいくようです。

2

父親と母親を示す2つの別々のHierarchyIDを使用するとうまくいくでしょう。

しかし、2対多の状況であるため、行の一意のインジケータとして使用することは間違いありません。 (2匹の羊は複数の子供を持つことができます)

祖先のためにHierarchyIdを使用すると、本質的に間違ったことはありません。人々のために、関係は "この人がその人を産んだ"よりもはるかに複雑なので、明らかに使用は繁殖に限定されるだろう。

0

SQL ServerのhierarchyIDは、多くの系統解析の質問に対する堅牢なソリューションではありません。それはORDPATHに基づいており、私は系図の中でそれをしばらく使ってきました。有向非循環グラフのORDPATHメソッドでは容易に対処できない系統内のシナリオが多すぎます。グラフデータベースははるかに堅牢で、系図に適しています。私はNeo4jを使用します:http://stumpf.org/genealogy-blog/graph-databases-in-genealogy

関連する問題