我有一个 MySQL 表,它代表一个元素,它是树的一个节点。该元素有一个 ID 和一个 parent_id 元素,它引用同一个表中的另一个元素(对于顶级元素可以为 null)。我希望能够在本地(具有相同父元素的元素)和全局(我想展平树并将其呈现为列表)对这些元素进行排序。我给每个元素一个local_sorting_key,它可以对父节点中的元素进行排序,但我希望能够递归地对整个树进行排序。
我所做的是添加一个新字段 global_sorting_key,它是父级的 global_sorting_key(如果元素有父级)和 local_sorting_key 的串联。这使我可以递归地为每个元素设置一个排序键,并轻松获取整个表并使用 SQL 对其进行排序。但是,此解决方案并未标准化,因为对 local_sorting_key 的更改不会对 global_sorting_key 产生更改,从而导致内部不一致。
如何以简单的方式解决我的问题,同时保持 3NF?