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?
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.
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 sedia ada melibatkan berbilang pertanyaan bersarang dan mungkin tidak cekap. Mari terokai penyelesaian yang dioptimumkan.
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.
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.
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:
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!