Rumah >pangkalan data >tutorial mysql >Bagaimanakah Kami Boleh Mendapatkan Kembali Semua Nod Anak dalam Jadual Pangkalan Data Hierarki dengan Perhubungan Ibu Bapa-Anak dengan Cekap?

Bagaimanakah Kami Boleh Mendapatkan Kembali Semua Nod Anak dalam Jadual Pangkalan Data Hierarki dengan Perhubungan Ibu Bapa-Anak dengan Cekap?

Susan Sarandon
Susan Sarandonasal
2025-01-13 18:11:43503semak imbas

How Can We Efficiently Retrieve All Child Nodes in a Hierarchical Database Table with Parent-Child Relationships?

Hierarki dan hubungan ibu bapa-anak: pendekatan yang lebih cekap

Dalam bidang pemodelan data, mewujudkan hubungan hierarki dan ibu bapa-anak adalah penting untuk banyak aplikasi. Artikel ini membincangkan cara yang berkesan dan cekap untuk mencapai matlamat ini dalam kekangan model data yang diberikan.

Soalan

Pertimbangkan jadual pangkalan data yang menyimpan maklumat tapak dan perhubungan ibu bapa-anak:

<code class="language-sql">create table site
(
site_Id int(5),
parent_Id int(5),
site_desc varchar2(100)
);</code>

Keperluan adalah untuk mendapatkan semua nod anak bagi ID tapak yang diberikan, mewakili hierarki seperti ini:

<code>                    A
                   / \
                  B   C
                / | \ /\
               D  E F G H
              /\
             I  J</code>

Input: Tapak B
Output: D, E, F, I, J

Kaedah semasa

Kaedah sedia ada melibatkan berbilang pertanyaan bersarang dan mungkin tidak cekap. Mari terokai penyelesaian yang dioptimumkan.

Kekangan model data

Dalam model data yang diberikan, setiap nod mempunyai nod induk, kecuali nod akar. Kekangan ini mengehadkan pilihan yang tersedia untuk mendapatkan semula hierarki yang cekap.

Model Data Alternatif

Walaupun model senarai bersebelahan berfungsi dengan baik untuk data yang diberikan, model ini kurang cekap apabila berurusan dengan hierarki yang mendalam. Jadual penutupan, set bersarang dan model penghitungan laluan menyediakan penyelesaian yang lebih cekap, tetapi memerlukan perubahan pada model data, yang tidak mungkin dalam kes ini.

Penyelesaian praktikal

Memandangkan kekangan model data, kami mengesyorkan menggunakan model senarai bersebelahan yang diubah suai dan menambah lajur "root_id":

<code class="language-sql">create table site
(
site_Id int(5),
parent_Id int(5),
root_id int(5)
);</code>

Untuk setiap nod, lajur "root_id" menyimpan nod nenek moyang tertinggi dalam pokoknya. Ini membolehkan kami mendapatkan semula keseluruhan pokok dengan satu pertanyaan:

<code class="language-sql">SELECT * FROM site WHERE root_id = <root_id></code>

Algoritma:

  1. Dapatkan semula semua nod akar.
  2. Lintas nod akar.
  3. Untuk setiap nod akar, dapatkan semua nod anak menggunakan lajur "root_id".
  4. Bina hierarki dalam ingatan.

Pendekatan ini menyediakan traversal hierarki yang cekap tanpa overhed pangkalan data, menjadikannya sesuai untuk pokok bersaiz sederhana.

Atas ialah kandungan terperinci Bagaimanakah Kami Boleh Mendapatkan Kembali Semua Nod Anak dalam Jadual Pangkalan Data Hierarki dengan Perhubungan Ibu Bapa-Anak dengan Cekap?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn