ツリーのノードである要素を表す 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 を維持しながら、簡単な方法で問題を解決するにはどうすればよいですか?