Web サイトのナビゲーション マップを格納するスキーマを構築しようとしています。ページが子ページを持つことができ、それらの子ページがさらに子を持つことができるサイトマップとして典型的なデータセットを想像してください。例は次のオブジェクトです。
$tree = array(
'home' => array(
'h1' => 'test',
'h2' => 'test2',
'copy' => 'copy here',
'slug' => '',
'children' => array(
'blah' => array(
'h1' => 'child1',
'h2' => 'child1',
'copy' => 'child copy here',
'slug' => 'blah',
'children' => array(
'blahsub' => array(
'h1' => 'subchild1',
'h2' => 'subchild2',
'copy' => 'child copy here',
'slug' => 'blahsub',
'children' => array(
'subsubchild1' => array(
'h1' => 'subsubchild1',
'h2' => 'subsubchild2',
'copy' => 'child copy here',
'slug' => 'subsubchild1'
)
)
),
'subchild2' => array(
'h1' => 'subchild1',
'h2' => 'subchild2',
'copy' => 'child copy here',
'slug' => 'subchild2',
'children' => array(
'subsubchild2' => array(
'h1' => 'subsubchild1',
'h2' => 'subsubchild2',
'copy' => 'child copy here',
'slug' => 'subsubchild2'
)
)
),
'subchild3' => array(
'h1' => 'subchild1',
'h2' => 'subchild2',
'copy' => 'child copy here',
'slug' => 'subchild3',
'children' => array(
'subsubchild3' => array(
'h1' => 'subsubchild1',
'h2' => 'subsubchild2',
'copy' => 'child copy here',
'slug' => 'subsubchild3'
)
)
)
)
),
'another' => array(
'h1' => 'child2',
'h2' => 'child2',
'copy' => 'child copy here',
'slug' => 'another'
)
)
)
);
$tree の各レベルはその URI によって索引付けされ、各レベルには N 個の子を含めることができ、そのすべてが子自体を持つことができます。
私の当初の考えでは、このスキーマを使用するのは直感的でしたが、ツリーの特定のノードを照会することについては確信が持てませんでした。このスキーマへのアプローチは間違っていますか? (目標は、リクエストごとにそのようなツリーを「構築」するために複数のクエリを作成する必要はなく、一度プルしてメモリ内で操作することでした。
注: クエリを作成してツリー全体を取得し、添え字演算子を介して各ノードに直接アクセスすることはできます。これにより、ツリーへの複数のクエリよりもパフォーマンスが向上するはずです。現在、これにmysqlを使用しており、これが本当のボトルネックです。
このスキーマに関するご意見をお聞かせください。不明な点があれば、説明を求めてください。
ありがとう!
注 - 主な目的: 「インデックス」(各ノードの「スラッグ」パラメータも) でツリー内のアイテムを検索したいと考えています。私は本当にどこから始めればよいか迷っています-そのようなクエリ機能は存在しますか? 複数のクエリを使用してループで実行する必要がありますか?