Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Apa cara yang diketahui untuk menyimpan struktur pohon dalam DB relasional?

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



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana cara menyimpan datetime di MySQL dengan info zona waktu

  2. Hak istimewa pengguna MySQL di server bersama

  3. mysql secara otomatis menyimpan stempel waktu pembuatan catatan

  4. Apa itu MySQL?

  5. Bagaimana Fungsi LPAD() Bekerja di MySQL