db-tree: busca y navega por la base de datos


logotipo del árbol de db En esta publicación hablaré sobre una herramienta para encontrar rápidamente filas en una base de datos y navegar a través de ellas. Si trabaja en soporte y tiene que hacer muchas consultas a la base de datos, si está cansado de escribir SELECT, por favor, bajo cat.

Motivación


Hace algún tiempo, ayudé a mantener un gran sistema de contabilidad. En el curso del trabajo, fue necesario buscar información en la base de datos. Escenario típico: un usuario con un problema llama a petición N1. Para el diagnóstico, debe ver algunos datos de esta aplicación en la base de datos. Cumplimos la solicitud:

SQL SELECT * FROM ORDER WHERE ID = 'N1' 

La unidad está asociada con la aplicación, por lo tanto, realizamos la siguiente solicitud para obtener información sobre la unidad:

 SQL SELECT * FROM DEVICE WHERE ORDER_ID = 'N1' 

Luego buscamos todas las aplicaciones relacionadas con la unidad:

 SQL SELECT * FROM ORDERS WHERE DEVICEID = '92375' 

Y así sucesivamente. Después de ejecutar N consultas, tarde o temprano encontraremos un problema en los datos y tomaremos medidas. Las desventajas de este enfoque son obvias:

  • Escribir consultas manualmente es lento e inconveniente. Especialmente si la estructura de la base de datos es compleja y hay muchas tablas. Por lo tanto, es posible modificar el síndrome del túnel.
  • Cuando necesite encontrar una línea relacionada por restricción Única o Clave externa, debe escribir una nueva consulta.
  • Por lo general, las herramientas de base de datos muestran datos en forma de tabla. Cuando hay muchas columnas en la tabla, debe desplazar la tabla horizontalmente o seleccionar columnas en la consulta. Nuevamente, se requiere trabajo manual.

Idea


Primero necesitas simplificar la búsqueda. Esta acción debe realizarse con un mínimo de clics. Simplemente ingrese la línea deseada en el cuadro de texto y presione Entrar. Por lo general, las claves primarias están indexadas, por lo que puede buscar un valor de inmediato en todas las columnas que se incluyen en Claves primarias o Restricciones únicas.

Entonces necesitas resolver el problema de navegación. ¿Cómo saltar rápidamente a una entrada relacionada en una clave externa? Puede imaginar una base de datos como un sistema de archivos: imagine que una fila de la base de datos es un directorio, una línea relacionada por clave externa es un enlace simbólico y un campo que no es una clave externa es un archivo simple. No voy a escribir un controlador de sistema de archivos, es solo una analogía. Por lo tanto, las filas de la base de datos se pueden representar como una estructura jerárquica, que se puede mostrar utilizando el componente TreeTable.

También puede agregar una columna al componente TreeTable, en el que se mostrará un valor significativo para una fila determinada. Este valor se puede obtener concatenando los valores de los campos de fila de la base de datos. Por ejemplo, para una línea de orden puede hacer una expresión:
 ORDER_NAME + ', ' + ORDER_STATUS + ', ' + ORDER_CUSTOMER 

Analogía más cercana: método toString () en java.

Implementación


La programación tomó muchos meses. Al principio traté de usar C ++ y Qt, pero resultó ser difícil: en el mundo de C ++ no hay nada similar a los controladores jdbc, y el lenguaje en sí es mucho más complicado. Por lo tanto, la aplicación está escrita en Java.

ventana principal

En la captura de pantalla, vemos el cuadro de búsqueda, el cuadro combinado para cambiar la conexión actual y el componente TreeTable, que muestra datos jerárquicos.

Buscar


Puede ingresar una cadena en el cuadro de texto y presionar Entrar. La búsqueda ahora solo funciona en columnas de cadenas y tipos numéricos: VARCHAR, NUMBER, etc. Todavía no se admiten los tipos de fecha y hora. Por defecto, la herramienta busca valores en las columnas que se incluyen en la Clave primaria. En la configuración, puede marcar los otros campos que se utilizarán en la búsqueda.

Navegación clave


Los nodos etiquetados [F] son ​​la clave externa. En la columna Tabla, vemos el nombre de la tabla a la que se refiere esta clave. Una vez abierto el nodo, pasamos a la línea relacionada. Las claves extranjeras compuestas también son compatibles.

Los nodos etiquetados [U] son ​​Restricción única o Clave primaria. Habiendo expandido el nodo, puede ir a las líneas relacionadas. Echa un vistazo a la captura de pantalla:

ir a puntadas vinculadas por UniqueConstraint

Ingresamos el valor 10248 en la barra de búsqueda y encontramos una línea en la tabla PEDIDOS. Abrimos el nodo [U] ORDER_ID y encontramos 3 filas en la tabla ORDER_DETAILS. Luego puede expandir cada nodo e ir a las filas de la tabla ORDER_DETAILS.

Cadena de columna


Los valores clave principales a menudo no son informativos. En la captura de pantalla anterior, vemos los valores ORDER_ID = 10248, PRODUCT_ID = 11. Estos números no nos dicen nada. Para humanizarlos de alguna manera, puedes hacer una expresión:

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

e ingréselo en la celda de la columna Cadena:

expresiones de cadena

Presione Entrar y vea valores más significativos:

resultado de la expresión de cadena

Detalles técnicos


La aplicación está escrita en Java, una interfaz en JavaFX. Puede notar que TreeTable usa las cadenas "[U]" y "[F]" en lugar de iconos, esto se hizo debido a este molesto error: JDK-8190331 . Las contraseñas de la base de datos se almacenan en un repositorio seguro utilizando la biblioteca java-keyring . OpenJDK 13 y el paquete de compilación de acceso temprano se utilizan para compilar instaladores . Los comandos de compilación se pueden encontrar aquí .

Las bases de datos Oracle, MariaDB y PostgreSQL ahora son compatibles.

Referencias


Página del proyecto en github: db-tree-fx

Si encuentra un error o necesita agregar algo, no dude en comenzar el problema o escribir directamente al correo: db.tree.app@gmail.com .

Paquetes de instalación


Rpm para GNU / Linux: db-tree-0.0.2-1.x86_64.rpm
Deb para GNU / Linux: db-tree_0.0.2-1_amd64.deb
Dmg firmado para macOS: db-tree-0.0.2.dmg
MSI firmado para Windows: db-tree-0.0.2.msi

La última versión se puede encontrar en github

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


All Articles