我需要在我的数据库中表示地理对象的层次结构。每个对象都有一个名称和地理坐标(纬度/经度)。
层次结构的第一级可能是两个可能值之一:Marine | 地层。
第二级(对于Marine)可能是 Seas | 河流。 第三级(对于Seas)包含所有可能的海洋名称(例如波罗的海)。
此外,在第 3 层,我可能想将每条海洋/河流与其相关的海洋联系起来,所有河流都应该另外与它相关的一些海洋联系起来。还有第 4、第 5 和第 6级层次结构,它们是较小类型的对象。
重要提示:在这种类型的层次结构中可以跳过 [3, 4, 5, 6] 级别的任何组合,即我们可以有级别 (1, 2, 3, 4, 5) 或 (1, 2, 3) 或 ( 1、2、3、5)。
此外,我将在我的应用程序中使用 sqlalchemy ORM进行对象表示。
我应该为不同的层次结构级别使用不同的表,并为父节点使用外键吗?对于跳过的级别,我们可以为每个层次结构路径使用虚拟节点。
我应该为所有节点制作一个统一的表并将其级别存储为整数值,并使用 FK 作为父节点(即邻接表结构)吗?
每种方法的优缺点是什么?
谁有其他想法(考虑到所有限制)?