Desain Kumpulan Bersarang pasti sulit ketika Anda harus sering melakukan pembaruan pada pohon. Anda akhirnya harus memberi nomor ulang pada sebagian besar pohon.
Satu saran untuk mengurangi ini adalah dengan menggunakan angka floating-point alih-alih bilangan bulat. Jika Anda menyisipkan simpul baru di pohon, relatif mudah untuk menemukan beberapa nomor FLOAT di antara kumpulan nomor bersarang induk dari simpul baru. Pada akhirnya Anda mungkin mencapai batas presisi angka floating-point, tetapi karena pohon Anda tidak terlalu dalam, itu tidak akan terjadi untuk waktu yang lama.
Teknik lain yang saya tulis tentang saya sebut Tabel Penutupan . Metode penyimpanan hierarki ini membuatnya lebih mudah untuk menyisipkan/memperbarui/menghapus node di pohon besar tanpa perlu memperbarui banyak pohon Anda. Dan Anda masih dapat membuat kueri seluruh pohon atau subpohon apa pun dalam satu kueri SQL non-rekursif.
Untuk membaca lebih lanjut tentang Tabel Penutupan, lihat:
- Apa cara paling efisien/elegan untuk mengurai tabel datar menjadi pohon?
- Model untuk Data Hirarki dengan SQL dan PHP
- Memindahkan Subpohon dalam Hirarki Tabel Penutupan
- Antipattern SQL:Menghindari Jebakan Pemrograman Basis Data
Kembali komentar Anda:
Adjacency List sederhana, memiliki redundansi minimum, dan mendukung hubungan FK, yang tidak dimiliki oleh Kumpulan Bersarang. Adjacency List mendukung kueri seluruh pohon dengan kedalaman arbitrer jika Anda menggunakan kueri rekursif . Tetapi MySQL tidak mendukung kueri rekursif.
Jika Anda hanya perlu membuat kueri hubungan induk-anak langsung (yaitu satu tingkat kedalaman), atau jika tidak, hanya kueri pohon dengan kedalaman tetap, maka Adjacency List tidak masalah.