6

私は、ブリーダーが遺伝情報を研究するために使用する系図データベース (実際には羊に関するもの) を持っています。各レコードには、fatherid と Motherid を格納します。別のテーブルに完全な「ロールアップ」情報を保存するので、データベース全体を再帰することなく、動物の完全な家系図をすばやく知ることができます...

最近、SQL サーバー 2008 に組み込まれている hierarchyID 型を発見しました。表面的には有望に思えますが、私のタイプのアプリ (つまり、2 人の親、複数の子供) に適しているかどうかを知るのに十分なほど誰かがそれを使用しているかどうか疑問に思っています。 )? これまでに見つけた/読んだすべてのサンプルは、特定の上司が複数の従業員を持つことができ、各従業員が 1 人の上司を持つことができるマネージャー/従業員タイプの関係を扱っています。

私のアプリのニーズは似ていますが、まったく同じではありません。

いずれにせよ、この新しいテクノロジーを掘り下げることになると確信していますが、誰かがそれを利用できるような方法で設計されていないことをすでに知っている場合は、私の研究を短縮することをお勧めします.

また、この新しいデータ型を使用した場合と、同じことを行う他の方法を使用した場合とでは、どのようなパフォーマンスが見られるのかにも興味があります。

4

4 に答える 4

5

各ヒツジには 1 人のオスの親と 1 人のメスの親がいて、ヒツジが自分の親になることはできない (ヒツジの時間的パラドックスにつながる) と仮定すると、2 つの HierarchyID を使用するのはどうでしょうか?

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 にすることで、各羊をその母系階層と父系階層の産物として一意に識別することができます。

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

于 2009-02-28T07:27:55.827 に答える
3

それがどのように機能するかわかりません。通常の階層では、ルートへの単一のチェーンがあるため、各ノードへのパス (バイナリとは何か) を格納できます。ただし、複数の親では、これは不可能です。家父長制と党派を分けたとしても、母親は 1 人、祖母は 2 人、曾祖母は 4 人などです (さらに「興味深い」スキャネリには触れません)。特に家畜の場合)。エンコードする単一の論理パスはないので、いいえ:これはあなたの場合にはうまくいかないと思います。

でも直ってくれると嬉しいです。

于 2009-02-23T14:38:05.443 に答える
2

2つの別々のHierarchyIDを使用して、父親と母親がうまく機能することを示します。

ただし、2対多の状況であるため、これらを行の一意のインジケーターとして使用することは絶対に避けてください。(2匹の羊は複数の子供を持つことができます。)

祖先にHierarchyIdを使用することに本質的に問題はありませんが、少なくとも羊の場合はそうです。人にとって、人間関係は「この人がその人を生んだ」よりもはるかに複雑なので、明らかに使用は繁殖に限定されます。

于 2011-08-03T15:38:08.337 に答える