我正在寻找将家谱(人们的关系图,如家谱)存储和查询到关系数据库中的最佳方法。
我想,这可以通过使用图形数据库轻松实现,但我有一个强大的约束。
我使用 .NET 和 Microsoft 技术,理想的可能是找到某种可以位于关系数据库之上的技术,以便可以同时使用两者。
欢迎任何建议或意见!
谢谢你们 里亚娜
我正在寻找将家谱(人们的关系图,如家谱)存储和查询到关系数据库中的最佳方法。
我想,这可以通过使用图形数据库轻松实现,但我有一个强大的约束。
我使用 .NET 和 Microsoft 技术,理想的可能是找到某种可以位于关系数据库之上的技术,以便可以同时使用两者。
欢迎任何建议或意见!
谢谢你们 里亚娜
由于任何给定的人只能有一位母亲和一位父亲(不一定都知道),因此您不需要有向图的广义表示。像这样一个简单的“二进制”图就足够了:
在这个模型中查询兄弟姐妹、祖先、后代等应该是相当简单的。
我认为有一个针对 .Net 的图形数据库。它被称为BrightStarDB Sparql 和 LinQ 作为查询手段。
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.
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 加载所有数据以“创建”您的数据库,然后将其独立用于您的查询。