db-tree: recherche et navigation dans la base de données


logo d'arbre db Dans cet article, je parlerai d'un outil pour trouver rapidement des lignes dans une base de données et les parcourir. Si vous travaillez dans le support et que vous devez faire beaucoup de requêtes de base de données, si vous en avez assez d'écrire des SELECT, s'il vous plaît, sous cat.

La motivation


Il y a quelque temps, j'ai aidé à maintenir un grand système comptable. Au cours des travaux, il a été nécessaire de rechercher des informations sur la base de données. Scénario typique: un utilisateur ayant un problème appelle sur demande N1. Pour les diagnostics, vous devez afficher certaines données sur cette application dans la base de données. Nous répondons à la demande:

SQL SELECT * FROM ORDER WHERE ID = 'N1' 

L'unité est associée à l'application, par conséquent, nous effectuons la demande suivante pour obtenir des informations sur l'unité:

 SQL SELECT * FROM DEVICE WHERE ORDER_ID = 'N1' 

Ensuite, nous recherchons toutes les applications liées à l'unité:

 SQL SELECT * FROM ORDERS WHERE DEVICEID = '92375' 

Et ainsi de suite. Après avoir exécuté N requêtes, tôt ou tard, nous trouverons un problème dans les données et prendrons des mesures. Les inconvénients de cette approche sont évidents:

  • L'écriture manuelle de requêtes est lente et peu pratique. Surtout si la structure de la base de données est complexe et qu'il existe de nombreuses tables. Il est donc possible de modifier le syndrome du tunnel.
  • Lorsque vous devez trouver une ligne associée par contrainte Unique ou Clé étrangère, vous devez écrire une nouvelle requête.
  • En règle générale, les outils de base de données affichent les données sous forme de tableau. Lorsqu'il y a plusieurs colonnes dans le tableau, vous devez faire défiler le tableau horizontalement ou sélectionner des colonnes dans la requête. Encore une fois, un travail manuel est nécessaire.

Idée


Vous devez d'abord simplifier la recherche. Cette action doit être effectuée avec un minimum de clics. Entrez simplement la ligne souhaitée dans la zone de texte et appuyez sur Entrée. Les clés primaires sont généralement indexées, vous pouvez donc rechercher une valeur immédiatement dans toutes les colonnes incluses dans les clés primaires ou les contraintes uniques.

Ensuite, vous devez résoudre le problème de navigation. Comment passer rapidement à une entrée associée sur une clé étrangère? Vous pouvez imaginer une base de données comme un système de fichiers: imaginez qu'une ligne de base de données est un répertoire, une ligne associée par une clé étrangère est un lien symbolique et un champ qui n'est pas une clé étrangère est un simple fichier. Je ne vais pas écrire un pilote de système de fichiers, c'est juste une analogie. Ainsi, les lignes de base de données peuvent être représentées comme une structure hiérarchique, qui peut être affichée à l'aide du composant TreeTable.

Vous pouvez également ajouter une colonne au composant TreeTable, dans laquelle une valeur significative pour une ligne donnée sera affichée. Cette valeur peut être obtenue en concaténant les valeurs des champs de ligne de la base de données. Par exemple, pour une ligne de commande, vous pouvez créer une expression:
 ORDER_NAME + ', ' + ORDER_STATUS + ', ' + ORDER_CUSTOMER 

Analogie la plus proche: méthode toString () en java.

Implémentation


La programmation a pris plusieurs mois. Au début, j'ai essayé d'utiliser C ++ et Qt, mais cela s'est avéré difficile: dans le monde C ++, il n'y a rien de similaire aux pilotes jdbc et le langage lui-même est beaucoup plus compliqué. Par conséquent, l'application est écrite en Java.

fenêtre principale

Dans la capture d'écran, nous voyons la zone de recherche, la zone de liste déroulante pour commuter la connexion actuelle et le composant TreeTable, qui affiche des données hiérarchiques.

Chercher


Vous pouvez saisir une chaîne dans la zone de texte et appuyer sur Entrée. La recherche ne fonctionne désormais que sur les colonnes de type chaîne et numérique: VARCHAR, NUMBER, etc. Les types de date et d'heure ne sont pas encore pris en charge. Par défaut, l'outil recherche les valeurs dans les colonnes incluses dans la clé primaire. Dans les paramètres, vous pouvez cocher les autres champs qui seront utilisés dans la recherche.

Navigation par touches


Les nœuds étiquetés [F] sont la clé étrangère. Dans la colonne Table, nous voyons le nom de la table à laquelle cette clé fait référence. Après avoir ouvert le nœud, nous passons à la ligne associée. Les clés étrangères composées sont également prises en charge.

Les nœuds étiquetés [U] sont Contrainte unique ou Clé primaire. Après avoir développé le nœud, vous pouvez accéder aux lignes associées. Jetez un œil à la capture d'écran:

aller aux points liés par UniqueConstraint

Nous avons entré la valeur 10248 dans la barre de recherche et trouvé une ligne dans la table ORDERS. Nous avons ouvert le nœud [U] ORDER_ID et trouvé 3 lignes dans la table ORDER_DETAILS. Vous pouvez ensuite développer chaque nœud et accéder aux lignes de la table ORDER_DETAILS.

Chaîne de colonne


Les valeurs de clé primaire sont souvent non informatives. Dans la capture d'écran précédente, nous voyons les valeurs ORDER_ID = 10248, PRODUCT_ID = 11. Ces chiffres ne nous disent rien. Pour les humaniser d'une manière ou d'une autre, vous pouvez faire une expression:

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

et entrez-le dans la cellule de la colonne Chaîne:

expressions de chaîne

Appuyez sur Entrée et voyez des valeurs plus significatives:

résultat d'expression de chaîne

Détails techniques


L'application est écrite en Java, une interface en JavaFX. Vous pouvez remarquer que TreeTable utilise les chaînes "[U]" et "[F]" au lieu d'icônes, cela a été fait en raison de ce bogue ennuyeux: JDK-8190331 . Les mots de passe de la base de données sont stockés dans un référentiel sécurisé à l'aide de la bibliothèque java-keyring . OpenJDK 13 et jpackage de build à accès anticipé sont utilisés pour construire des installateurs . Les commandes de build peuvent être trouvées ici .

Les bases de données Oracle, MariaDB et PostgreSQL sont désormais prises en charge.

Les références


Page du projet sur github: db-tree-fx

Si vous trouvez une erreur ou si vous avez besoin d'ajouter quelque chose, n'hésitez pas à démarrer le problème ou à écrire directement sur le mail: db.tree.app@gmail.com .

Packages d'installation


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

La dernière version peut être trouvée sur github

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


All Articles