さて、私は次のような本の執筆アプリに使用している階層データを使用したプロジェクトに取り組んでいます。
- トップレベルの親(Act)-Actの名前、位置(最初のAct)、説明、およびテキスト(イントロテキスト)が含まれます
- 中間レベルの親/子(チャプター)-チャプター名、位置(最初のチャプター)、説明、およびテキスト(イントロテキスト)が含まれます
- 最下位レベル(セクション)-セクション名、位置(最初のセクション)、説明、およびテキスト(実際のコンテンツテキスト)が含まれます
ここで、可変数のレベル(たとえば、全文を含むサブセクションを含める)が必要ですが、このようなテーブルを効率的に作成する方法が完全にはわかりません。私の最初の考えは、それらをparentIdで接続し、トップレベルでparentIdがnullになるようにすることでした。
たとえば、トップレベルの親を最初の位置に呼び出したい場合、それは大したことではありません。現在、nullの親フィールドと位置1を検索できます。「チャプター」(中間レベル)を呼び出すために、同じことを行いますが、結果のIDを取得し、それを親IDとして使用します。
問題はセクションに関するものです。最終結果を得るには、いくつかのサブクエリが必要になります。可変数のレベルを使用したい場合は、パフォーマンスに影響を与える多数のサブクエリが必要になります。
私は同様の質問を見ましたが、答えやそれをどのように使用できるかを本当に理解していませんでした。
ある種の分類表を検討したり、すべての親IDを子に引き継いだりしました(つまり、セクションには、親IDの下にチャプターIDとアクトIDの両方がリストされます)が、設定されていません。Feedbooks.comは、書籍を送信するときに同様の階層を使用しますが、データベースにデータを保存せず、入力を取得して出力(pdf、epubなど)に変換するだけです。
ああ、これをMySQLで構築する予定です。
アイデア?
編集 このシナリオを想像するより簡単な方法は、家族と一緒にすることです。3人の祖父(Bill、Bernard、Boe)がいて、その間に5人の子供(John、Joey、Josh、Jeremy、Jackson)がいて、2人の子供全員がいるとします(例:Donald、Duey、ドニー)。そして、データベースがその関係を保存しているのではなく、どの子がどこに滞在しているかの関係を保存しているとしましょう。ここでは生物学については気にしません。
それで、ドニーがビルと一緒に住んでいるジョンと一緒に住み始めたとしましょう。ドニーはジョンの最初の子供であり、ジョンはビルの2番目の子供です。ビルの次男の最初の孫をどのように照会しますか?
彼らが動き回って、今ドナルドが代わりにジョンと一緒にいるとしましょう。ドナルドはジョンの2番目の子供であり(最初の子供の位置は他の誰かで埋められていました)、ジョンはまだビルの2番目の子供です。ビルの次男の次男にどのように問い合わせますか?
ジョンがすべての子供たちと一緒にボーの家に引っ越したらどうなるでしょう。ボーは2番目の祖父です。この情報を今どのように照会しますか?この種の情報をどのように保存しますか?
あなたが今曾孫をミックスに投げ込んだらどうしますか?