db-tree: cari dan navigasikan basis data


db tree logo Dalam posting ini saya akan berbicara tentang alat untuk dengan cepat menemukan baris dalam database dan menavigasi melalui mereka. Jika Anda bekerja dalam dukungan dan Anda harus membuat banyak permintaan basis data, jika Anda bosan menulis SELECT, silakan, di bawah cat.

Motivasi


Beberapa waktu lalu, saya membantu menjaga sistem akuntansi yang besar. Dalam perjalanan kerja, diperlukan untuk mencari informasi tentang database. Skenario umum: pengguna dengan masalah panggilan berdasarkan permintaan N1. Untuk diagnosa, Anda perlu melihat beberapa data pada aplikasi ini dalam database. Kami memenuhi permintaan:

SQL SELECT * FROM ORDER WHERE ID = 'N1' 

Unit dikaitkan dengan aplikasi, oleh karena itu, kami melakukan permintaan berikut untuk mendapatkan informasi tentang unit:

 SQL SELECT * FROM DEVICE WHERE ORDER_ID = 'N1' 

Kemudian kami mencari semua aplikasi yang terkait dengan unit:

 SQL SELECT * FROM ORDERS WHERE DEVICEID = '92375' 

Dan sebagainya. Setelah mengeksekusi N query, cepat atau lambat kami akan menemukan masalah dalam data dan mengambil tindakan. Kerugian dari pendekatan ini jelas:

  • Menulis pertanyaan secara manual lambat dan tidak nyaman. Apalagi jika struktur datanya kompleks dan ada banyak tabel. Jadi dimungkinkan untuk memodifikasi sindrom terowongan.
  • Saat Anda perlu menemukan baris terkait dengan batasan Unik atau Kunci Asing, Anda harus menulis kueri baru.
  • Biasanya, alat basis data menampilkan data dalam bentuk tabel. Ketika ada banyak kolom dalam tabel, Anda harus menggulir tabel secara horizontal, atau memilih kolom dalam kueri. Sekali lagi, pekerjaan manual diperlukan.

Ide


Pertama, Anda perlu menyederhanakan pencarian. Tindakan ini harus dilakukan dengan minimum klik. Cukup masukkan baris yang diinginkan di kotak teks, dan tekan Enter. Kunci primer biasanya diindeks, sehingga Anda dapat mencari nilai segera di semua kolom yang termasuk dalam Kunci Utama atau Kendala Unik.

Maka Anda perlu menyelesaikan masalah navigasi. Bagaimana cara cepat melompat ke entri terkait dengan Kunci Asing? Anda dapat membayangkan database sebagai sistem file: bayangkan bahwa baris basis data adalah direktori, baris terkait oleh Foreign Key adalah symlink, dan bidang yang bukan merupakan Foreign Key adalah file sederhana. Saya tidak akan menulis driver sistem file, itu hanya analogi. Jadi baris basis data dapat direpresentasikan sebagai struktur hierarkis, yang dapat ditampilkan menggunakan komponen TreeTable.

Anda juga dapat menambahkan kolom ke komponen TreeTable, di mana beberapa nilai yang berarti untuk baris yang diberikan akan ditampilkan. Nilai ini dapat diperoleh dengan menggabungkan nilai-nilai bidang baris database. Misalnya, untuk baris pesanan Anda dapat membuat ekspresi:
 ORDER_NAME + ', ' + ORDER_STATUS + ', ' + ORDER_CUSTOMER 

Analogi terdekat: metode toString () di java.

Implementasi


Pemrograman membutuhkan waktu berbulan-bulan. Pada awalnya saya mencoba menggunakan C ++ dan Qt, tetapi ternyata sulit: di dunia C ++ tidak ada yang mirip dengan driver jdbc, dan bahasanya sendiri jauh lebih rumit. Oleh karena itu, aplikasi ini ditulis dalam Java.

jendela utama

Di tangkapan layar, kita melihat kotak pencarian, kotak kombo untuk mengalihkan koneksi saat ini dan komponen TreeTable, yang menampilkan data hierarkis.

Cari


Anda dapat memasukkan string di kotak teks dan tekan Enter. Pencarian sekarang hanya berfungsi pada kolom tipe string dan numerik: VARCHAR, NUMBER, dll. Tipe tanggal dan waktu belum didukung. Secara default, alat mencari nilai dalam kolom yang disertakan dalam Kunci Utama. Dalam pengaturan, Anda dapat menandai bidang lain yang akan digunakan dalam pencarian.

Navigasi kunci


Node yang berlabel [F] adalah kunci asing. Di kolom Tabel, kita melihat nama tabel yang dirujuk oleh kunci ini. Setelah membuka node, kami beralih ke jalur terkait. Compound Foreign Key juga didukung.

Node yang berlabel [U] adalah Batasan Unik atau Kunci Utama. Setelah memperluas node, Anda dapat pergi ke baris terkait. Lihatlah tangkapan layar:

buka jahitan tertaut oleh UniqueConstraint

Kami memasukkan nilai 10248 di bilah pencarian dan menemukan garis di tabel PESANAN. Kami membuka simpul [U] ORDER_ID dan menemukan 3 baris dalam tabel ORDER_DETAILS. Kemudian Anda dapat memperluas setiap node dan pergi ke baris tabel ORDER_DETAILS.

String Kolom


Nilai kunci primer seringkali tidak informatif. Pada tangkapan layar sebelumnya, kita melihat nilai ORDER_ID = 10248, PRODUCT_ID = 11. Angka-angka ini tidak memberi tahu kami apa pun. Untuk memanusiakan mereka, Anda dapat membuat ekspresi:

 'Product: ' + PRODUCT_ID.PRODUCT_NAME + ', Price: ' + UNIT_PRICE 

dan masukkan di sel kolom String:

ekspresi string

Tekan Enter dan lihat nilai yang lebih bermakna:

hasil ekspresi string

Rincian teknis


Aplikasi ini ditulis dalam Java, sebuah antarmuka di JavaFX. Anda mungkin memperhatikan bahwa TreeTable menggunakan string "[U]" dan "[F]" sebagai ganti ikon, ini dilakukan karena bug yang mengganggu ini: JDK-8190331 . Kata sandi basis data disimpan dalam repositori yang aman menggunakan perpustakaan java-keyring . OpenJDK 13 dan build jpackage akses awal digunakan untuk membangun installer . Membangun perintah dapat ditemukan di sini .

Database Oracle, MariaDB, dan PostgreSQL sekarang didukung.

Referensi


Halaman proyek di github: db-tree-fx

Jika Anda menemukan kesalahan, atau perlu menambahkan sesuatu, jangan ragu untuk memulai masalah atau menulis langsung ke surat: db.tree.app@gmail.com .

Paket Instalasi


Rpm untuk GNU / Linux: db-tree-0.0.2-1.x86_64.rpm
Deb untuk GNU / Linux: db-tree_0.0.2-1_amd64.deb
Dmg ditandatangani untuk macOS: db-tree-0.0.2.dmg
Msi yang ditandatangani untuk Windows: db-tree-0.0.2.msi

Rilis terbaru dapat ditemukan di github

Source: https://habr.com/ru/post/id478638/


All Articles