qsqldatabase example c++ sql database qt user-interface

c++ - example - qt sql



¿En qué punto vale la pena usar una base de datos? (13)

"¿En qué punto vale la pena usar una base de datos?"

¿Cuándo y cuándo tienes que administrar los datos?

Tengo una pregunta relacionada con las bases de datos y en qué punto vale la pena sumergirme en una. Principalmente soy un ingeniero incrustado, pero estoy escribiendo una aplicación usando Qt para interactuar con nuestro controlador.

Estamos en un punto extraño en el que tenemos suficientes datos de que sería factible implementar una base de datos (alrededor de más de 700 elementos y en crecimiento) para administrar todo, pero no estoy seguro de que valga la pena el tiempo ahora mismo para tratar. No tengo problemas para implementar la GUI con archivos generados desde excel y analizados, pero es tedioso y difícil de rastrear incluso con scripts de VBA. He estado jugando con la conversión de nuestros datos en algo más manejable para el lado de la aplicación con Microsoft Access y que parece estar funcionando bien. Si eso funciona, estoy a solo un paso (o varios) de utilizar una base de datos SQL y usar la biblioteca Qt para acceder y modificarla.

No tengo mucha experiencia en la administración de datos en este nivel y tengo curiosidad por saber cuál puede ser la mejor manera de abordar esto. Entonces, ¿cuáles son algunos de los beneficios reales de usar una base de datos si hay alguna en este caso? Me doy cuenta de que gran parte de esto puede ser muy específico de la aplicación, pero algunas ideas generales y sugerencias sobre cómo montar la línea de programación integrada / de la aplicación serían útiles.

No se trata de poner una base de datos en un proyecto incrustado. Tampoco es una aplicación de tipo comercial donde las bases de datos más grandes se usan comúnmente. Estoy diseñando una GUI para un solo usuario en un escritorio para interactuar con un microcontrolador con fines de monitoreo y configuración.

Decidí ir con SQLite. Puede hacer cosas muy interesantes con datos que realmente no consideré una opción cuando comencé este proyecto.


Cuando tiene muchos datos, no está seguro de cómo serán explotados en el futuro.

Por ejemplo, es posible que desee agregar una base de datos SQLite en una aplicación incrustada que necesita registrar estadísticas que no está seguro de cómo se usarán. Más tarde envías la base de datos completa para la inyección en una más grande que se ejecuta en un servidor central y esos datos pueden explotarse fácilmente, utilizando solicitudes.

De hecho, si el propósito de su aplicación es "recopilar datos", entonces es imprescindible disponer de una base de datos.


Lo que está describiendo no suena como una aplicación empresarial típica, y muchas de las respuestas ya publicadas aquí suponen que este es el tipo de aplicación de la que está hablando, así que permítame ofrecerle una perspectiva diferente.

Si usa o no una base de datos para 700 artículos va a depender en gran medida de la naturaleza de los datos.

Diría que, aproximadamente el 90% del tiempo en esta escala, se beneficiará de una base de datos liviana como SQLite, siempre que:

  1. Los datos pueden crecer sustancialmente más grandes que lo que está describiendo,
  2. Los datos pueden ser compartidos por más de un usuario,
  3. Es posible que necesite ejecutar consultas en contra de los datos (que no creo que esté haciendo en este momento), y
  4. Los datos se pueden describir fácilmente en forma de tabla.

El otro 10% de las veces, sus datos serán altamente estructurados, jerárquicos, basados ​​en objetos, y no encajan perfectamente en el modelo de tabla de una base de datos o tabla de Excel. Si este es el caso, considere usar archivos XML.

Sé que los desarrolladores instintivamente les gusta lanzar bases de datos a problemas como este, pero si actualmente está utilizando datos de Excel para diseñar interfaces de usuario (o mostrar configuraciones), en lugar de mostrar un registro de cliente, XML puede ser una mejor opción. XML es más expresivo que Excel o las tablas de bases de datos, y se puede manipular fácilmente con un editor de texto simple.

Los analizadores XML y los archivos de datos para C ++ son fáciles de encontrar .


No hay un punto específico en el que una base de datos valga la pena. En cambio, generalmente hago las siguientes preguntas:

  • ¿La cantidad de datos que usa / crea la aplicación está creciendo?
  • ¿El límite superior de este crecimiento de datos es desconocido (o no está claro)?
  • ¿La aplicación necesitará agregar o filtrar esta información?
  • ¿Podría haber usos futuros de los datos que pueden no ser obvios en este momento?
  • ¿Es importante el rendimiento de la recuperación o el almacenamiento de datos?
  • ¿Hay (o podría haber) múltiples usuarios de la aplicación que comparten datos?

Si respondo ''Sí'' a la mayoría de estas preguntas, casi siempre elijo una base de datos (a diferencia de otras opciones como XML / ini / CSV / Excel / archivos de texto o el sistema de archivos).

Además, si la aplicación tendrá muchos usuarios que podrían acceder a los datos al mismo tiempo, me inclinaré hacia un servidor de base de datos completo (MySQL, SQl Server, Oracle, etc.).

Pero a menudo en una situación de usuario único (o concurrencia pequeña), una base de datos local como SQLite no se puede superar por la portabilidad y la facilidad de implementación.


No necesita una base de datos si tiene miles de filas en una o dos tablas para manejar en una sola aplicación de usuario (para el punto incrustado).

Si es para múltiples usuarios (acceso concurrente, bloqueo) o la necesidad de transacciones, definitivamente debe considerar una base de datos. Manejar las estructuras de datos complejas en tablas normalizadas y mantener la integridad, o una gran cantidad de datos, sería otra indicación de que debería usar una base de datos.


No olvide que la base de datos apropiada puede ser bastante diferente dependiendo de sus requisitos (y no olvide que un archivo de texto podría usarse como una base de datos si sus requisitos son lo suficientemente simples; por ejemplo, los archivos de configuración son solo específicos tipo de base de datos). Tales parámetros pueden ser:

  • cantidad de registros
  • tamaño de los elementos de datos
  • ¿la base de datos necesita ser compartida con otros dispositivos? ¿Al mismo tiempo?
  • cuán complejas son las relaciones entre los diversos datos
  • ¿La base de datos es de solo lectura (creada en tiempo de compilación y no modificada, por ejemplo)?
  • ¿la base de datos necesita ser actualizada por múltiples entidades concurrentemente?
  • ¿Necesitas soportar consultas complejas?

Para una base de datos con 700 entradas, una matriz ordenada en memoria cargada desde un archivo de texto podría ser apropiada. Pero también podría ver la necesidad de una base de datos SQL incorporada o tal vez hacer que el controlador solicite datos de la base de datos a través de una conexión de red dependiendo de los diversos requisitos (y limitaciones de recursos).


Para agregar un negativo: no es adecuado para el procesamiento en tiempo real, debido a la latencia no determinista. Sin embargo, sería bastante amplio buscar y establecer parámetros de operación, por ejemplo, durante el inicio. No pondría accesos a la base de datos en rutas de tiempo críticas.


Parece que su aplicación se ejecuta en una computadora de escritorio y simplemente se comunica con el dispositivo incorporado.

Como tal, usar una base de datos es mucho más factible. Usar uno en una plataforma incrustada es un problema mucho más complejo.

En el escritorio utilizo una base de datos cuando existe la necesidad de almacenar nueva información continuamente y la necesidad de extraer esa información de una manera relacional. Lo que no uso bases de datos es almacenar información estática, información que leo una vez al cargar y eso es todo. La excepción es cuando la aplicación tiene muchos usuarios y existe la necesidad de almacenar esta información por usuario.

Me parece que es como recopilar información de su dispositivo incrustado, almacenarla de alguna manera y luego usarla más tarde para mostrarla a través de una GUI.

Este es un buen caso para usar una base de datos, especialmente si puede diseñar el sistema de modo que haya un daemon de recolección de datos que administre la comunicación continua con el dispositivo incorporado. Esta aplicación puede simplemente escribir los datos en la base de datos. Cuando se inicia la GUI, puede extraer los datos para su visualización.

El uso de la base de datos también facilitará el desarrollo de su GUI si necesita visualizar diferentes vistas, como "muéstreme todas las entradas entre 2 fechas". Con una base de datos, simplemente solicite los valores correctos para mostrar con una consulta SQL adecuada y la GUI muestra lo que le devuelve, lo que le permite desacoplar gran parte del código de "lógica de negocios" de la GUI.


Razones para usar una base de datos:

  • Escrituras concurrentes. Es fácil lograr la concurrencia en las bases de datos
  • Consulta fácil. Las consultas SQL tienden a ser mucho más concisas que el código de procedimiento para buscar datos. ACTUALIZACIONES, INSERTAR INTO también puede hacer muchas cosas con muy poco código
  • Integridad. Las restricciones son muy fáciles de definir y se aplican sin escribir código. Si tiene una restricción no nula, puede estar seguro de que el valor no será nulo, no es necesario escribir cheques en ningún lado. Si tiene una restricción de clave externa en su lugar, no tendrá "referencias colgantes".
  • Rendimiento sobre grandes conjuntos de datos. La indexación es muy simple de agregar a una base de datos SQL

Razones para no usar una base de datos:

  • Tiende a ser una dependencia adicional (aunque existen bases de datos muy livianas, como H2 para Java, por ejemplo)
  • Datos no adecuados para un esquema relacional. Cosas que son básicamente mapas clave / valor. XML (aunque las bases de datos suelen ser compatibles con XPath, etc.).
  • A veces los archivos son más convenientes. Pueden ser modificados, fusionados, editados con un editor de texto plano, etc. Algunas veces las hojas de cálculo pueden ser más prácticas (no es necesario crear un editor, puede usar un programa de hoja de cálculo)
  • Tus datos ya están en otro lado

También enfrentamos una situación similar. Tenemos un conjunto de datos provenientes de diferentes configuraciones de prueba y actualmente se está volcando en hojas de Excel, procesadas usando Perl o VBA.

Descubrimos que este método tenía muchos problemas:

yo. Administrar datos usando hojas de excel es bastante engorroso. Después de un tiempo, tiene muchas hojas de Excel y no hay una manera fácil de recuperar los datos requeridos.

ii. Las personas comienzan a enviar las hojas de Excel de un lado a otro para comentarios y revisión a través de correos electrónicos. El correo electrónico se convierte en el modo principal de administrar los comentarios relacionados con los datos. Estos comentarios se pierden en un momento posterior y no hay forma de recuperarlos.

iii. Se crean varias copias de los archivos y los cambios en una copia no se reflejan en la otra; no hay versiones.

Esto es por las mismas razones por las que decidimos pasar a una solución basada en una base de datos y actualmente estamos trabajando en ello. Déjenme resumir lo que estamos tratando de hacer:

yo. La base de datos se encuentra en un servidor central accesible para PC en todas las configuraciones de prueba.

ii. Todos los datos entran en una ubicación temporal (disco duro local en los archivos) tan pronto como se generan. A partir de los archivos, es llevado a la base de datos por un proceso que se ejecuta en segundo plano (por lo que incluso si hay un problema de red, los datos estarán presentes en el sistema de archivos local).

iii. Tenemos una aplicación basada en la web que permite a los usuarios iniciar sesión y acceder a los datos en el formato que deseen. El portal les permitirá agregar comentarios, generar diferentes tipos de informes, compartirlos con otros usuarios después de la revisión, etc. También tendrá la capacidad de exportar datos a la hoja de Excel, en caso de que necesite llevarlos con usted.

Sepa si esto se puede implementar mejor.


Te recomiendo que introduzcas una base de datos en tu aplicación, tu aplicación ganará flexibilidad y será más fácil de mantener y mejorar con nuevas funciones en el futuro.
Empezaría con una base de datos basada en archivos livianos como sqlite.org .
Con un db bien diseñado, tendrás:

  1. Redundancia de datos reducida
  2. Mayor integridad de datos
  3. Mejora de la seguridad de los datos

Por último, pero no menos importante, el uso de una base de datos te salvará de la importación / actualización / exportación de Excel . ¡ Infierno !


Una base de datos vale la pena cuando:

  1. Su aplicación evoluciona a alguna forma de ejecución impulsada por datos.
  2. Su tiempo dedicado a diseñar y desarrollar estructuras externas de almacenamiento de datos.
  3. Compartir datos entre aplicaciones u organizaciones (incluidas personas individuales)
  4. Los datos ya no son cortos y simples.
  5. Duplicación de datos

Evolución a la ejecución impulsada por datos
Cuando los datos cambian pero la ejecución no es, esto es un signo de un programa impulsado por datos o partes del programa son impulsadas por datos. Un conjunto de opciones de configuración es un signo de una función impulsada por datos, pero toda la aplicación puede no estar impulsada por datos. En cualquier caso, una base de datos puede ayudar a administrar los datos. (La biblioteca o aplicación de la base de datos no tiene que ser enorme como Oracle, pero puede ser delgada y mala como SQLite).

Diseño y Desarrollo de Estructuras de Datos Externas
Publicar preguntas en sobre la serialización o la conversión de árboles y listas para usar archivos es una buena indicación de que su programa se ha graduado para usar una base de datos. Además, si está gastando cualquier cantidad de tiempo diseñando algoritmos para almacenar datos en un archivo o diseñando los datos en un archivo, es un buen momento para investigar el uso de una base de datos.

Compartir datos
Ya sea que su aplicación esté compartiendo datos con otra aplicación, otra organización u otra persona, una base de datos puede ayudarlo. Al usar una base de datos, la consistencia de los datos es más fácil de lograr. Uno de los grandes problemas en la investigación de problemas es que los equipos no usan los mismos datos. El cliente puede usar un conjunto de datos; el equipo de validación es otro y el desarrollo usa un conjunto diferente de datos. Una base de datos facilita el control de versiones de los datos y permite a las entidades utilizar los mismos datos.

Datos complejos
Los programas comienzan usando tablas pequeñas de datos codificados. Esto evoluciona hacia el uso de datos dinámicos con mapas, árboles y listas. En ocasiones, los datos se expanden de dos columnas simples a 8 o más. La base de datos y las bases de datos pueden aliviar la complejidad de organizar los datos. Deje que la base de datos se preocupe por la administración de los datos y libere su aplicación y su tiempo de desarrollo. Después de todo, la forma en que se manejan los datos no es tan importante como la calidad de los datos y su accesibilidad.

Duplicación de datos
Muchas veces, cuando los datos crecen, existe una atracción cada vez mayor por la duplicación de datos. Las bases de datos y la teoría de la base de datos pueden minimizar la duplicación de datos. Las bases de datos se pueden configurar para prevenir duplicaciones.

Pasar a usar una base de datos tiene muchos factores a considerar. Algunos incluyen, pero no están limitados a: complejidad de datos, duplicación de datos (incluidas partes de los datos), plazos del proyecto, costos de desarrollo y problemas de licencia. Si su programa puede ejecutarse de manera más eficiente con una base de datos, hágalo. Una base de datos también puede ahorrar tiempo de desarrollo (y dinero). Hay otras tareas que usted y su aplicación pueden realizar que administrar datos. Deje la administración de datos a los expertos.


Veo bastantes requisitos que las bases de datos satisfacen:

1). Consultas ad hoc. Encuéntrame todos los {X} que cumplen los criterios Y

2). Datos con estructura que pueden beneficiarse de la normalización: factorizar valores comunes en "tablas" separadas. Puede ahorrar espacio y reducir la posibilidad de inconsistencia de esta manera. Una vez que haya hecho esto, esas consultas ad-hoc comenzarán a ser realmente útiles.

3). Grandes volúmenes de datos. La base de datos profesional es muy buena para hacer un buen uso de las resorciones, las optmisations de consultas inteligentes y las estrategias de búsqueda. Tratar de escribir esto usted mismo es un verdadero desafío.

Claramente, no necesitas eso último, pero los otros dos tal vez te correspondan.