我正在寻找最佳的方式来存储和查询家族树(人与他们的关系像家谱一样的人)到关系数据库。图和关系数据库
我想,这可以很容易地通过使用图形数据库,但我有一个强大的约束。
我使用.NET和微软的技术,理想可能是找到某种技术,可以在一个关系数据库之上坐这样既可以在同一时间使用..
任何建议或建议,欢迎!
谢谢你们 Riana
我正在寻找最佳的方式来存储和查询家族树(人与他们的关系像家谱一样的人)到关系数据库。图和关系数据库
我想,这可以很容易地通过使用图形数据库,但我有一个强大的约束。
我使用.NET和微软的技术,理想可能是找到某种技术,可以在一个关系数据库之上坐这样既可以在同一时间使用..
任何建议或建议,欢迎!
谢谢你们 Riana
如果你有一个表
FamilyTree
----------
ID int not null PK,
ParentID int,
Name nvarchar(50)
您可以查询关系与简单连接。
这是如何让所有的兄弟姐妹一个人与[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来生成给定父母的所有后代。
由于任何给定的人只能有一个母亲和一个父亲(不一定都是已知的),所以您不需要有向图的广义表示。这样一个简单的“二元”图应该是足够了:
查询兄弟姐妹,祖先,后裔等..应该是在这种模式相当简单。
“任何特定的人只能有一个母亲和一个父亲” - 虽然在生物学上是真实的,但它没有考虑收养和/或离婚/再婚(例如继父)。 – Duncan
我认为有一个针对.Net的Graph数据库。 它被称为BrightStarDB Sparql和LinQ作为查询手段。
欢迎来到StackOverflow!你是否认为* BrightStarDB是一个针对.Net的图形数据库,或者你知道*是肯定的?答案应该是:答案,从不猜测。请注意,我最初几次出现,我猜对了自己......当然我猜错了......并且被我的同伴们无情地低估了。另外,当提到这样的产品时,最好包含一个链接。 –
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中独立使用任何db。例如,您可以使用gramps加载所有数据以“创建”您的数据库,然后独立使用它来进行查询。
当你说关系数据库时,你的意思是MS SQL服务器吗?你想要执行什么类型的查询? – svick
我正在使用MS SQL Server,但问题由所有关系数据库共享。我希望能够检查简单的信息,例如,如果两个人是彼此的祖父,或者如果他是他的表弟等...... –
什么是阻止你在SQL中这样做? – svick