2011-11-13 10 views
2

私は、家系図(家系図のような関係を持つ人のグラフ)をリレーショナルデータベースに保存して照会する最良の方法を探しています。グラフとリレーショナルデータベース

グラフデータベースを使用すると簡単に達成できますが、私は強い制約があります。

私は.NETおよびマイクロソフトのテクノロジを使用して、理想的には、両方を同時に使用することができるようにリレーショナルDBの上に座ることができる技術のいくつかの種類を見つけることでしょう..です

任意の提案

またはアドバイスを歓迎しています!

おかげでみんな Riana

+0

リレーショナルデータベースと言うと、MS SQLサーバーですか?どのような種類のクエリを実行しますか? – svick

+0

私はMS SQL Serverを使用していますが、問題はすべてのリレーショナルDBで共有されています。私は2人がお互いの祖父であるか、彼が彼のいとこなどであるかのような簡単な情報をチェックできるようにしたいと考えています。 –

+0

何をSQLでやっているのですか? – svick

答えて

1

あなたがテーブル

FamilyTree 
---------- 
ID  int not null PK, 
ParentID int, 
Name  nvarchar(50) 

を持っている場合あなたが簡単なのジョインとの関係を照会することができます。

これは、あなたがなどに参加し

2つのレベルを必要といとこが全体familytree物事を取得するには取得するには[email protected]

select sibling.* from FamilyTree parent 
inner join FamilyTree child 
on parent.ID = child.ParentID 
inner join FamilyTree sibling 
on parent.ID = sibling.ParentID 
where child.ID <> sibling.ID 
where child.ID = @SearchPersonID 

で人にすべての兄弟を取得するには少し複雑になります方法ですただし、与えられた親からのすべての下付き文字を生成するのにrecursive CTEを使うことができます。

4

与えられた人は母親と父親がそれぞれ1人しかいない(必ずしも両方が分かっているとは限りません)ので、有向グラフの一般化表現は必要ありません。このような単純な「バイナリ」のグラフは、十分なものでなければならない:

兄弟、先祖、子孫などの問い合わせ

enter image description here

...このモデルではかなりシンプルでなければなりません。

+1

"任意の人は母親と父親を1人しか持てません" - 実際には生物学的には、養子縁組や離婚/再婚(例:義理父親)は考慮されません。 – Duncan

2

私は、.Netを対象としたグラフデータベースがあると思います。 BrightStarDB クエリの手段としてSparqlとLinQが呼び出されています。

+2

ようこそStackOverflowへ! BrightStarDBは.Netの対象となるグラフデータベースであると思いますか、それとも確実に知っていますか?答えはそれでなければなりません。答えは決して推測できません。私の最初の数回、私は自分自身を推測しました...もちろん、私は間違っていたと思っていました...そして、私の仲間の参加者によって無慈悲に下落されました。また、このような製品を参照する場合は、その製品へのリンクを含めることをお勧めします。 –

1

gramps(http://gramps-project.org/)はopensource(http://www.gramps-project.org/wiki/index.php?title=Portal:Developers)系図プラットフォームです。これはPythonで書かれており、Windows上で作業するためのダウンロードを持っています。あなたの動機(リレーショナルDBである必要がある理由など)によっては、すぐに使えるかもしれません。また、ソースコードを調べるために使用することもできます。これにはデータ抽象化レイヤーがあり、いくつかの基盤となるdb(http://www.gramps-project.org/wiki/index.php?title=Using_database_API)で動作することができます。だから、あなたは文法とは無関係に使用するデータベースにアクセスすることができます。たとえば、grampsを使用してすべてのデータをロードしてデータベースを作成し、それをクエリに使用することができます。

関連する問題