Forum Programmation.SQL quelle base de données choisir ave Qt

Posté par  .
Étiquettes : aucune
0
26
juin
2009
Bonjour,

Je suis actuellement en train de développer une application GNU pour que mon amie puisse gérer sa patientèle. (Elle est ostéopathe). J’ai choisi de développer cette application avec Qt pour que l’application soit portable sur les 3 principales plate-formes (Linux, Mac OS et Windows).

A la base, je développe plutôt des applications middleware sur des systèmes embarqués en C. Donc voilà, c’est pas trop mon domaine, du coup je me forme à Qt, aux SGBD, et rafraîchi un peu mon C++…

Au niveau graphique, je commence à me débrouiller, j’ai réussi à mettre en place l’agenda pour la prise de rendez-vous. (Au passage, j’ai utilisé un widget sous licence GNU terrible !!! Et vu que j’ai un peu galéré à trouver ça, j’en profite pour donner le lien : http://www.qtsoftware.com/developer/pimp-my-widgets-develope(...)

Bref, je suis maintenant rendu à la base de données. Et je ne sais pas trop quoi choisir. La simplicité voudrait que je me tourne vers SQLite car c'est incorporé à Qt. Enfin si j'ai bien compris... Mais j’ai lu que cette BDD pouvait s’avérer lente. (http://alain-defrance.developpez.com/articles/Qt/SGBD/). Chose qui évidemment me dérange…

Du coup, je voudrais avoir votre avis…

Pour information, voici mes contraintes :
*Je ne sais pas encore si je veux que la BD soit accessible sur plusieurs machines. Dans un premier temps, mon application fonctionnera uniquement en local. Mais ça pourrait être intéressant qu’elle puisse être accessible sur une autre machine locale. (Pour prendre en compte le cas où le logiciel serait par plusieurs praticiens).
*Je ne veux pas qu’elle soit accessible via le net
Une base de données compatible avec la GNU (vu que mon code est sous cette licence)
*Concernant l’administration, si tout pouvais se faire via mon logiciel, c’est pas plus mal :p
* la BD servira à stocker les informations sur les patients, sur les consultations, la facturation, etc.

Merci pour votre aide !
  • # pourquoi pas postgresql ?

    Posté par  . Évalué à 2.

    Bonjour,
    je l'utilise avec des requêtes SQL mais je suppose qu'il y a un "wrapper" générique que Qt pour les bases de données.
    Bonne journée
  • # Pas d'importance

    Posté par  (site web personnel) . Évalué à 2.

    Je pense que ca na pas encore vraiment d'importance.

    Tu as les drivers Qt pour utiliser postgres, mysql, db2, ibase, oracle, ... ainsi que sqllite.

    Tu peux utiliser sqllite en attendant, et le jour où tu auras plusieurs postes ou que la volumétrie se fera sentir, tu pourras migrer vers une autre base sans difficulté (juste changé de backend).
    • [^] # Re: Pas d'importance

      Posté par  . Évalué à 2.

      Avec la version libre de Qt, seuls les pilotes SQLite (2 et 3), MySQL, Postgres et ODBC sont présents. Pour les autres pilotes, il faut une licence obligatoirement Qt.

      > tu pourras migrer vers une autre base sans difficulté (juste changé de backend).
      Pas tout à fait, QtSql offre une abstraction par rapport aux APIs natives des diverses bases de données mais en aucun cas n'offre une abstraction vis à vis des dialectes SQL des bases.
      Soit on utilise le dénominateur commun de chacun des dialectes SQL des bases de données supportés, soit il faudra gérer les différences manuellement.

      Mais dans un premier temps, on peut se contenter effectivement d'une base SQLite qui est incluse par défaut dans Qt, mais pour un accès réseau ou concurrentiels et à partir d'un certain volume, mieux vaut passer à Postgres ou MySQL.
      • [^] # Re: Pas d'importance

        Posté par  . Évalué à 1.

        Merci à tous pour vos réponses !

        Concernant le volume, j’imagine quelque chose comme ça (à la grosse louche). 4 tables comportant :

        PATIENTS : 200~300 patients (pour chaque patient il y a toutes les infos habituelles : nom, prénom, adresse, téléphone, etc.)
        CONSULTATIONS : #3000 consultations par an. Pour chaque consultation il y a pas mal d’informations textes (le diagnostique, les soins, etc.)
        FACTURATION : autant de factures que de consultations. Contient le mode de paiement, la somme, etc.
        AGENDA : autant de RDV que de consultations. Contient la date, l’heure et l’id du patient

        Du coup, est-ce que vous pensez qu’une BDD SQLite sera assez performante pour stocker toutes ces informations sur quelques années ?
        • [^] # Re: Pas d'importance

          Posté par  . Évalué à 1.

          À première vue, tes tables vont dépasser la dizaine de mégaoctets (voire la centaine pour celle des consultations) donc même avec une table = une base sqlite, ça va être juste.
          Dès que tu commences à titiller le gigaoctet, tu peux oublier sqlite.

          Dans ton cas, je réserverais SQLite pour la phase de développement et les fonctionnalités annexes (sauvegarde, configuration, base temporaire etc ...) et en production, j'utiliserais une base de données plus costaud comme MySQL ou Postgres.
          • [^] # Re: Pas d'importance

            Posté par  . Évalué à 1.

            euuuuuuuh

            question idiote : je peux utiliser le même code avec une BDD SQLite et MySQL ?!?
            si j'ai bien compris, il faut changer le driver. non ? et du coup le code ne change pas ?

            désolé pour toute ces questions, mais j'y connais rien en BDD...
            • [^] # Re: Pas d'importance

              Posté par  . Évalué à 1.

              Au niveau des requêtes, tu peux utiliser le sous ensemble SQL commun à SQLite ou MySQL sans problème. Quant au code C++/Qt, t'as juste la partie connexion qui change un peu.
              Rien de bien méchant, voilà ce que ça donne:


              QSqlDatabase db = QSqlDatabase::addDatabase( "QMYSQL" );
              db.setHostName( "zorglub" );
              db.setDatabaseName( "ma_base_mysql" );
              db.setUserName( "mon_utilisateur" );
              db.setPassword( "mon_password" );
              if( !db.open() )
              {
              qDebug() << "Erreur : "<< db.lastError();
              qFatal( "La connexion a échouée." );
              }



              QSqlDatabase db = QSqlDatabase::addDatabase( "QSQLITE" );
              db.setDatabaseName( "ma_base_sqlite.db" );
              if( !db.open() )
              {
              qDebug() << "Erreur : " << db.lastError();
              qFatal( "La connexion a échouée." );
              }
      • [^] # Re: Pas d'importance

        Posté par  . Évalué à 1.

        C'est toujours le problème des couches d'abstraction qui souvent font perdre l'accès à des trucs sympa...

        Cependant, rien n'empêche avec des requêtes Sql à la syntaxe "standard" d'attaquer des vues, des procédures stockées, d'utiliser des fonctions "maison" rajoutées au moteur, de déclencher des triggers, etc...

        En utilisant ce type d'objets dans une base, on peut factoriser beaucoup de code, de contrôles et d'automatismes !

        Reste plus qu'à choisir po^wune base qui gère tout ça :-)
    • [^] # Re: Pas d'importance

      Posté par  . Évalué à 2.

      Les drivers disponibles sont :
      _ ODBC
      _ MySQL
      _ PSQL
      _ SQLite
      _ ibase
      _ Oracle
      _ Sybase
      _ DB2

      Attention, tous les drivers de base de données ne sont pas disponibles dans la version libre (par exemple le driver oracle).
      Pour plus d'info, voir la doc de Qt : http://doc.trolltech.com/4.5/qtsql.html

      J'ai personnellement utilisé PSQL, SQLite, Oracle et ODBC ; mis à part ODBC qui est lourding à utiliser par nature (paramétrage de Qt + de ODBC), les autres fonctionnes bien.
  • # Et l'existant ?

    Posté par  . Évalué à 1.

  • # xbase

    Posté par  (site web personnel) . Évalué à 0.

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.