我正在寻找一种有效的方法来构建可处理以下情形的数据库模型: 模型需要处理未定义深度的层次结构,其中每个节点可以有0到3(最多)每个孩子可以是5-7种不同类型的孩子。多态层次结构DB设计
以下是我需要支持的示例树,其中'foo','bar'等每个都将在不同的表中输入,并且数字引用该表中的id。假设foo.1,bar.2和foo.3是顶级节点。 Base对于我来说只是一个虚拟对象,指向未知类型的顶级节点。
Base.1
|-foo.1
|-foo.2
|-qaz.1
|-bar.1
Base.2
|-bar.2
|-qaz.2
|-foo.2
|-bar.3
Base.3
|-foo.3
此外,儿童的顺序必须被保持(即,它是不正常在上述的层次结构与foo.2切换qaz.2)。
从数据访问的角度来看,大多数时候我将检索从顶级对象(Base.x)继承的整个树。
的人认为我已经到目前为止定义具有多态关联的表和每个子节点类型的引用中央表,如:
BaseTable
---------
BaseId (PK)
ObjectId (FK)
ObjectTable
-----------
ObjectId (PK)
ObjectType
OtherTableId
BaseId (FK) gets top level parent
FooTable
---------
FooId (PK)
Child1_ObjectId (FK)
Child2_ObjectId (FK)
Child3_ObjectID (FK)
Other data fields...
etc. for bar and qaz
我的想法是,我可以用ObjectTable中的BaseID FK来抓取整个树,但是有没有一种通过SQL重建整个树的有效方法,还是需要在检索后在我的代码中执行该操作?或者,是否有更好的方式以更高效的方式存储这类数据并保证关系完整性?