Ada beberapa alternatif untuk membuat informasi hierarkis lebih mudah digunakan di SQL:
-
Ekspresi Tabel Umum (sesuai standar SQL-2003) mendukung kueri SQL rekursif terhadap tipe data parent-id yang Anda gunakan. Sejauh ini, MySQL tidak mendukung fitur ini. PostgreSQL 8.4, Microsoft SQL Server, dan IBM DB2 adalah contoh merek RDBMS yang mendukung sintaks CTE. Oracle juga memiliki ekstensi eksklusif untuk sintaks SQL yang mendukung kueri rekursif.
-
Kumpulan Bersarang (solusi kiri/kanan yang disebutkan oleh @phtombrain) adalah solusi yang dirinci dalam buku Joe Celko "Trees and Hierarchies in SQL for Smarties" dan juga di banyak artikel dan posting blog di internet.
-
Pencacahan Jalur (alias Materialized Path) menyimpan string di setiap baris dalam hierarki untuk mencatat jalur leluhur dari baris itu. Gabungkan ini dengan
LIKE
kueri untuk membandingkan string jalur dengan jalur leluhur dan jalur turunannya. -
Tabel Penutup (alias Hubungan Penutupan Transitif) menggunakan tabel kedua untuk menyimpan semua hubungan leluhur-keturunan, bukan hanya induk langsung seperti dalam desain yang Anda gunakan. Banyak jenis kueri menjadi lebih mudah setelah Anda menyimpan semua jalur.
-
Solusi hibrida juga ada. Misalnya, simpan id induk langsung seperti yang Anda lakukan, tetapi juga akar pohonnya. Sekarang Anda bisa mendapatkan semua baris lain dalam hierarki yang sama, mengambilnya ke dalam kode aplikasi, dan memilah pohon dengan struktur data konvensional.