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

Mencapai hierarki, Hubungan Orang Tua/Anak dengan cara yang efektif dan mudah

Sayangnya, jika Anda tidak dapat mengubah model data, dan Anda menggunakan MySQL, Anda terjebak dalam situasi di mana Anda memerlukan kueri rekursif dan Anda menggunakan DBMS yang tidak mendukung kueri rekursif.

Quassnoi menulis serangkaian artikel blog yang menarik, menunjukkan teknik untuk menanyakan data hierarkis. Solusinya cukup pintar, tetapi sangat kompleks.http:// explainextended.com/2009/03/17/hierarchical-queries-in-mysql/

PostgreSQL adalah RDBMS open-source lainnya, yang mendukung kueri rekursif , sehingga Anda dapat mengambil seluruh pohon yang disimpan dengan cara yang Anda tunjukkan. Tetapi jika Anda tidak dapat mengubah model data, saya anggap Anda tidak dapat beralih ke RDBMS yang berbeda.

Ada beberapa model data alternatif yang mempermudah pengambilan pohon dengan kedalaman sewenang-wenang:

  • Tabel Penutup
  • Set Bersarang alias Modified Preorder Tree Traversal
  • Pencacahan Jalur alias Jalur Terwujud

Saya membahas ini dalam presentasi saya Model untuk Data Hirarki dengan SQL dan PHP , dan dalam buku saya Antipattern SQL:Menghindari Perangkap Pemrograman Basis Data .

Terakhir, ada solusi lain yang saya lihat digunakan dalam kode untuk Slashdot , untuk hierarki komentar mereka:Mereka menyimpan "parent_id" seperti di Adjacency List, tetapi mereka juga menyimpan kolom "root_id". Setiap anggota pohon tertentu memiliki nilai yang sama untuk root_id, yang merupakan simpul leluhur tertinggi di pohonnya. Maka mudah untuk mengambil seluruh pohon dalam satu kueri:

SELECT * FROM site WHERE root_id = 123;

Kemudian aplikasi Anda mengambil semua node kembali dari database ke dalam array, dan Anda harus menulis kode untuk mengulang array ini, memasukkan node ke dalam struktur data pohon di memori. Ini adalah solusi yang baik jika Anda memiliki banyak pohon terpisah, dan setiap pohon memiliki entri yang relatif sedikit. Ini bagus untuk kasus Slashdot.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cara Memilih Baris N Teratas Per Grup di MySQL

  2. Memahami Log Audit ProxySQL

  3. Bagaimana Fungsi POSITION() Bekerja di MySQL

  4. Cara Mendapatkan Kencan Kemarin di MySQL

  5. Mengganti fungsi mysql_* dengan PDO dan pernyataan yang disiapkan