2

我正在寻找将家谱(人们的关系图,如家谱)存储和查询到关系数据库中的最佳方法。

我想,这可以通过使用图形数据库轻松实现,但我有一个强大的约束。

我使用 .NET 和 Microsoft 技术,理想的可能是找到某种可以位于关系数据库之上的技术,以便可以同时使用两者。

欢迎任何建议或意见!

谢谢你们 里亚娜

4

4 回答 4

4

由于任何给定的人只能有一位母亲和一位父亲(不一定都知道),因此您不需要有向图的广义表示。像这样一个简单的“二进制”图就足够了:

在此处输入图像描述

在这个模型中查询兄弟姐妹、祖先、后代等应该是相当简单的。

于 2011-11-13T18:20:49.227 回答
2

我认为有一个针对 .Net 的图形数据库。它被称为BrightStarDB Sparql 和 LinQ 作为查询手段。

于 2012-07-06T15:50:09.220 回答
1

If you have a table

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

You can query relationships with simple joins.

This is how to get all siblings to a person with ID=@SearchPersonID

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

To get cousins you need two levels of joins etc.

To get a whole familytree things gets a little bit more complicated, but you can use a recursive CTE to generate all decendants from a given parent.

于 2011-11-13T18:07:54.133 回答
1

gramps (http://gramps-project.org/) 是一个开源 (http://www.gramps-project.org/wiki/index.php?title=Portal:Developers) 系谱平台。它是用 python 编写的,并且有在 windows 上工作的下载。根据您的动机(例如,为什么您需要它成为关系数据库),它可能对您开箱即用,或者您可能只想使用它来检查它的源代码。它有一个数据抽象层,因此可以使用几个底层数据库(http://www.gramps-project.org/wiki/index.php?title=Using_database_API)。因此,您可以独立于 gramps 访问您使用的任何数据库。例如,您可以使用 gramps 加载所有数据以“创建”您的数据库,然后将其独立用于您的查询。

于 2012-09-28T11:32:31.100 回答