Struktur pohon masih sangat umum dalam aplikasi kita, seperti direktori file, BBS, pengaturan izin, pengaturan departemen, dll.
Semua informasidata
ini mengadopsi struktur hierarki, yang sulit diungkapkan dengan jelas dalam database relasional kami saat ini. Lalubagaimana cara mengatasi
masalah struktur pohon pada program
?Baru-baru ini, penulis dengan mudah memecahkan masalah ini melalui program manajemen hak ASP, dan sekarang saya akan menyelesaikannya untuk pembaca.
Pertama, model data hierarki harus diubah menjadi model data relasional. Dengan kata lain, bagaimana merancang struktur data ini di ACCESS, SQL SERVER
, ORACLE, dan database relasional lainnya.
Kita ambil contoh saja seperti data berikut ini:
Manajemen Dokumen 1
|----Dokumen baru 2
|----Modifikasi dokumen 3
|----Arsip Dokumen 4
|.|----Lihat informasi yang diarsipkan5
|.|----Menghapus informasi yang diarsipkan 6
|.|.|----Hapus dokumen sejarah 7
|.|.|----Hapus dokumen resmi 8
|----Manajemen Sistem 9
|----Manajemen Pengguna 10
Manajemen Personalia 11
Administrasi 12
Manajemen Keuangan 13
Ini adalah struktur data hierarki yang sangat khas, jadi coba pikirkan, bagaimana cara mengungkapkannya dalam bentuk tabel dua dimensi?
Tampaknya sulitpada awalnya
, bukan? Namun setelah mempertimbangkan dengan cermat, masih ada cara untuk memanfaatkannya.
Dengan cara ini, semua izin di atas dapat dianggap sebagai satu bidang izin, maka bidang izin ini harus memiliki nilai ID.
Kami
kemudian secara paksa menambahkan bidang lain ke tabel data relasional ini - bidang ID bawahan, yang menunjukkan tingkat izin mana yang dimiliki izin ini
, yaitu nilai ID mana yang dimiliki oleh nilai ID ini. Misalnya: nilai ID izin "Lihat Informasi Arsip" adalah "5", dan berada di bawah izin "Pengarsipan
Dokumen
", maka nilai bidang ID bawahannya harus "4".Oke, jika ini bisa dipahami, maka pekerjaan transformasi hubungan
kita
pada dasarnya sudah selesai.Mari kita mulai merancang tabel data relasional ini (mengambil Sql Server 7.0 sebagai contoh):
+-----------+-----------+----- --- ---+-----------+----------+
|. Nama bidang |. Arti bidang |. Jenis bidang |. Ukuran bidang |
+-----------+-----------+-----------+-----------+- ---------+
|.ID Mandiri |.ID Izin |.Int |
|.Nama Daya |.Nama Izin |.Varchar |
|.PowerInfo |.Informasi Izin |.Varchar |
|.ID Milik |. ID Milik |
+-----------+-----------+-----------+-----------+- ---------+
Oke, setelah struktur dirancang, Anda dapat dengan mudah memasukkan data pengujian Anda.
Kemudian, kita akan fokus pada bagaimana meniru struktur hierarki di halaman web untuk menampilkan program ASP dengan fungsi ini. Ini juga merupakan langkah paling kritis.
Daftar program: powerlist.asp
<%
'Koneksi basis data
setel samb=Server.CreateObject("ADODB.Connection")
conn.open "driver={SQL Server};server=chaiwei;DATABASE=chaiwei;UID=sa;PWD="
'Buka semua data lapisan induk
set rs=Server.CreateObject("ADODB.Recordset")
rs.Open "pilih * dari pangkat yang mana milik adalah urutan nol berdasarkan powerid", samb, 1,3
'Tetapkan nilai awal ke variabel ekspresi angka level
format_i=1
'Daftar bagian program utama
do while not rs.eof
'Mencetak informasi data lapisan induk
respon.tulis "<a href='powerlist.asp?SelfID=" & rs("powerid") & "&BelongID=" & rs("belongid") & "'>" & rs("powername") & "< /a>"
respon.write "<br>"
'Panggilan subrutin, pemrosesan data sub-lapisan
Panggil ListSubPower(rs("powerid"))
rs.movenext
loop
'Tutup kumpulan data lapisan induk
rs.tutup
atur rs=tidak ada
'Subrutin pemrosesan data sub-lapisan
Sub ListSubPower(id)
'Buka semua informasi data sub-lapisan milik powerid atas
setel rs_sub=Server.CreateObject("ADODB.Recordset")
rs_sub.Open "pilih * dari kekuatan di mana milikid=" & id & " pesan berdasarkan powerid",sambungan,1,3
'Data sub-lapisan kolom
do while not rs_sub.eof
'Akumulasi progresif variabel ekspresi angka tingkat
format_i=format_i+1
'Kontrol format indentasi loop, karena level atas dan kedua tidak memerlukan indentasi, maka segmen program ini direferensikan dari level ketiga
untuk i=format_i hingga 3 langkah -1
respon.tulis "|"
respon.tulis " "
berikutnya
'Cetak informasi data sub-lapisan
respon.tulis " |----"
respon.tulis "<a href='powerlist.asp?SelfID=" & rs_sub("powerid") & "&BelongID=" & rs_sub("belongid") &"'>" & rs_sub("powername") & "< /a>"
respon.write "<br>"
'Panggil subrutin itu sendiri secara rekursif untuk memproses data sub-lapisan secara bertahap
ListSubPower(rs_sub("powerid"))
rs_sub.movenext
loop
'Jumlah level menunjukkan bahwa variabel semakin menurun
format_i=format_i-1
'Tutup kumpulan data sublapisan
rs_sub.close
atur rs_sub=tidak ada
Akhiri Sub
%>
Dalam program powerlist.asp, pertama-tama kita membuka data tingkat atas dan menampilkannya dalam loop; kemudian kita merancang subrutin ListSubPower, yang dipanggil dalam loop melalui a algoritma rekursif untuk membuka subrutin informasi data lapisan, dan berulang kali memanggil dirinya sendiri di loop dalam subrutin untuk memperluas data mendalam lapis demi lapis.
Selain itu, variabel statis format_i digunakan dalam program untuk mengontrol format tampilan indentasi.
Artikel ini merupakan upaya sederhana dalam mendesain data dan pengendalian program pada struktur pohon. Tujuannya adalah untuk menginspirasi orang lain.