Seperti biasa:tidak ada solusi terbaik. Setiap solusi membuat hal-hal yang berbeda lebih mudah atau lebih sulit. Solusi yang tepat untuk Anda bergantung pada operasi mana yang paling sering Anda lakukan.
Pendekatan Naif dengan parent-id:
Kelebihan:
-
Mudah diterapkan
-
Mudah untuk memindahkan subpohon besar ke induk lain
-
Sisipannya murah
-
Bidang yang Dibutuhkan dapat diakses langsung di SQL
Kekurangan:
-
Mengambil seluruh pohon bersifat rekursif dan karenanya mahal
-
Menemukan semua orang tua juga mahal ( SQL tidak mengenal rekursi... )
Modifikasi Praorder Tree Traversal ( menyimpan titik awal &titik akhir) :
Kelebihan:
-
Mengambil seluruh pohon itu mudah dan murah
-
Menemukan semua orang tua itu murah
-
Bidang yang Dibutuhkan dapat diakses langsung di SQL
-
Bonus:Anda juga menyimpan urutan childnode di dalam parentnodenya
Kekurangan:
- Memasukkan / Memperbarui bisa sangat mahal, karena Anda mungkin harus memperbarui banyak node
Menyimpan jalur di setiap Node:
Kelebihan:
-
Menemukan semua orang tua itu murah
-
Mengambil seluruh pohon itu murah
-
Memasukkannya murah
Kekurangan:
-
Memindahkan seluruh pohon itu mahal
-
Bergantung pada cara Anda menyimpan jalur, Anda tidak akan dapat bekerja dengannya secara langsung di SQL, jadi Anda harus selalu mengambil &menguraikannya, jika Anda ingin mengubahnya.
Tabel penutup
Kelebihan:
-
Mudah diterapkan
-
Menemukan semua orang tua itu murah
-
Memasukkannya murah
-
Mengambil seluruh pohon itu murah
Kekurangan:
-
Membutuhkan meja tambahan
-
Memakan banyak ruang dibandingkan dengan pendekatan lain
-
Memindahkan subpohon itu mahal
Saya lebih suka salah satu dari dua yang terakhir, tergantung seberapa sering data berubah.
Lihat juga:http://media.pragprog.com/titles/bksqla/trees. pdf