Sql 在数据库中存储分层数据

Sql 在数据库中存储分层数据,sql,sql-server,database,hierarchy,Sql,Sql Server,Database,Hierarchy,我需要将从XML文件检索的分层数据存储到关系数据库SQL Server中。该数据在XML中具有以下结构: 项目 ItemId唯一标识符 项目名称 描述项目的其他字段 项目关系 父项ID ChildItemId RelationshipType描述关系的特定于域的信息 描述关系的其他特定于域的字段 我想把这些数据存储在数据库中,这样查询起来就简单快捷了。由于关系更新不会经常发生,所以我不太关心更新/插入/删除性能 我曾考虑过分层方法。但是,除了父id和子id之外,还有其他与关系相关的字段,例如Re

我需要将从XML文件检索的分层数据存储到关系数据库SQL Server中。该数据在XML中具有以下结构:

项目

ItemId唯一标识符

项目名称

描述项目的其他字段

项目关系

父项ID

ChildItemId

RelationshipType描述关系的特定于域的信息

描述关系的其他特定于域的字段

我想把这些数据存储在数据库中,这样查询起来就简单快捷了。由于关系更新不会经常发生,所以我不太关心更新/插入/删除性能

我曾考虑过分层方法。但是,除了父id和子id之外,还有其他与关系相关的字段,例如RelatiopnshipType和其他一些字段,因此这似乎不可行

有两个名为Items和itemrationships的表如何

Items表包含列ItemId、主键和ItemName

ItemRelationships有ParentItemId、ChildItemId、RelationshipType列

ParentItemId和ChildItemId是Items.ItemId列的外键。这是一个有效的查询结构吗?请记住,ParentItemId可以有多个ChildItemId。层次结构的深度可以超过10个级别。
我还不清楚这种方法是被称为邻接列表、桥接表还是其他术语

对于SQL2008+,我将使用.Related问题为什么不使用邻接列表?如果您的孩子有多位家长,我只会添加第二个表。否则,从Child的角度添加关系描述字段,例如ParentRelationshipType。如果您只需要向上或向下一个级别,可以考虑添加PaleTimID而不是HiCracyID列。@ RoGeSmith:在这种情况下,我建议测试下一个解决方案:在层次结构节点的每一个级别上,标签可以是一个整数,通常是值或十进制值。在最后一种情况下,您可以使用小数位来存储关系类型。示例:声明@n HIERARCHYID='/11.1/2.5/4/'。在本例中,11和2之间的关系类型为1,2和4之间的关系类型为5。这只是一个提议,没有经过测试。您能告诉我什么是涉及关系类型值INSERT/UPDATE/DELETE/SELECT的典型查询吗?