IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Looping Discussion :

Rétroconception et types de données PostgreSQL


Sujet :

Looping

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    ced
    ced est déconnecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    Avril 2002
    Messages
    6 065
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 065
    Par défaut Rétroconception et types de données PostgreSQL
    Bonjour,

    J'ai constaté que Looping n'arrivait pas à "traduire" les types de données d'un script DDL de PostgreSQL.
    Par exemple, INT2 n'est pas traduit en SMALLINT (Looping conserve alors le type de script, ce qui est déjà bien !), BPCHAR(1) n'est pas traduit en CHAR(1), etc.
    J'imagine qu'un module de traduction des types par SGBD supporté n'est pas quelque chose de simple à mettre en œuvre, mais ça permettrait d'améliorer encore plus l'outil de rétroconception s'il était capable de faire cette traduction.

    ced
    Rédacteur / Modérateur SGBD et R
    Mes tutoriels et la FAQ MySQL

    ----------------------------------------------------
    Pensez aux balises code et au tag
    Une réponse vous a plu ? N'hésitez pas à y mettre un
    Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça

  2. #2
    Membre Expert
    Avatar de Paprick
    Homme Profil pro
    Professeur des Universités
    Inscrit en
    Juin 2019
    Messages
    771
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Professeur des Universités
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2019
    Messages : 771
    Par défaut
    Bonjour,

    En fait, lors de la rétroconception, Looping applique les types définis dans l'option "SGBD cible" du menu "MLD - LDD" dans la fenêtre "Propriétés", et ce quel que soit le SGBD qui a généré le DDL (parmi ceux connus de Looping bien sûr).

    Merci de m'indiquer si cela fonctionne comme tu le souhaites.
    Patrick Bergougnoux - Professeur des Universités au Département Informatique de l'IUT de Toulouse III
    La simplicité est la sophistication suprême (Léonard de Vinci)
    LIVRE : Modélisation Conceptuelle de Données - Une Démarche Pragmatique
    Looping - Logiciel de modélisation gratuit et libre d'utilisation

  3. #3
    ced
    ced est déconnecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    Avril 2002
    Messages
    6 065
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 065
    Par défaut
    Bonjour Paprick,

    Merci pour ta réponse.
    Le mieux est de partir d'un exemple relativement simple.
    Voici le script SQL issu d'un pg_dump (outil de sauvegarde de PostgreSQL) en me limitant à la structure (pas les données) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    CREATE TABLE services ( id_service int2 NOT NULL, code_service bpchar(10), nom_service varchar(50) NULL, CONSTRAINT services_pkey PRIMARY KEY (id_service));
    CREATE TABLE sgbd ( id_sgbd int2 NOT NULL, nom_sgbd varchar(50) NOT NULL, CONSTRAINT sgbd_pkey PRIMARY KEY (id_sgbd));
    CREATE TABLE dba ( id_dba int2 NOT NULL, nom_dba varchar(50) NOT NULL, prenom_dba varchar(50) NULL, id_service int2 NULL, CONSTRAINT dba_pkey PRIMARY KEY (id_dba), CONSTRAINT dba_id_service_fkey FOREIGN KEY (id_service) REFERENCES services(id_service));
    CREATE TABLE produits ( id_produit int2 NOT NULL, nom_produit varchar(50) NOT NULL, chef_produit varchar(50) NULL, id_service int2 NULL, CONSTRAINT produits_pkey PRIMARY KEY (id_produit), CONSTRAINT produits_id_service_fkey FOREIGN KEY (id_service) REFERENCES services(id_service));
    CREATE TABLE serveurs ( id_serveur int2 NOT NULL, nom_serveur varchar(50) NOT NULL, ip_serveur bpchar(15) NOT NULL, id_service int2 NOT NULL, CONSTRAINT serveurs_pkey PRIMARY KEY (id_serveur), CONSTRAINT serveurs_id_service_fkey FOREIGN KEY (id_service) REFERENCES services(id_service));
    CREATE TABLE instances ( id_serveur int2 NOT NULL, id_sgbd int2 NOT NULL, port bpchar(5) NOT NULL, version_sgbd varchar(50) NULL, actif bool DEFAULT true NULL, CONSTRAINT instances_pkey PRIMARY KEY (id_serveur, id_sgbd, port), CONSTRAINT instances_id_serveur_fkey FOREIGN KEY (id_serveur) REFERENCES serveurs(id_serveur), CONSTRAINT instances_id_sgbd_fkey FOREIGN KEY (id_sgbd) REFERENCES sgbd(id_sgbd));
    CREATE TABLE serveur_dba ( id_serveur int2 NOT NULL, id_dba int2 NOT NULL, CONSTRAINT serveur_dba_pkey PRIMARY KEY (id_serveur, id_dba), CONSTRAINT serveur_dba_id_dba_fkey FOREIGN KEY (id_dba) REFERENCES dba(id_dba), CONSTRAINT serveur_dba_id_serveur_fkey FOREIGN KEY (id_serveur) REFERENCES serveurs(id_serveur));
    CREATE TABLE bases ( id_base int2 NOT NULL, nom_base varchar(50) NOT NULL, id_serveur int2 NOT NULL, id_sgbd int2 NOT NULL, port varchar(5) NOT NULL, CONSTRAINT bases_pkey PRIMARY KEY (id_base), CONSTRAINT bases_id_serveur_id_sgbd_port_fkey FOREIGN KEY (id_serveur,id_sgbd,port) REFERENCES instances(id_serveur,id_sgbd,port));
    CREATE TABLE bases_produits ( id_base int2 NOT NULL, id_produit int2 NOT NULL, CONSTRAINT bases_produits_pkey PRIMARY KEY (id_base, id_produit), CONSTRAINT bases_produits_id_base_fkey FOREIGN KEY (id_base) REFERENCES bases(id_base), CONSTRAINT bases_produits_id_produit_fkey FOREIGN KEY (id_produit) REFERENCES produits(id_produit));
    Je crée un nouveau modèle dans Looping, et je lui indique PostgreSQL comme SGBD cible.
    Voici ce que donne la rétro-conception :
    Nom : Capture d’écran du 2025-09-02 11-06-48.png
Affichages : 127
Taille : 59,8 Ko

    On voit que le type des clés primaires (INT2 sous PostgreSQL pour un entier court, soit SMALLINT) n'est pas reconnu par Looping.
    Idem pour la donnée CODE_SERVICE de l'entité SERVICES (bpchar = char pour PostgreSQL).
    Enfin, la donnée ACTIF de l'entité INSTANCES a "bool DEFAULT true" comme type, au lieu d'un type booléen et une valeur par défaut à vraie.

    J'espère que ce petit exemple illustre bien une partie du problème...

    ced
    Rédacteur / Modérateur SGBD et R
    Mes tutoriels et la FAQ MySQL

    ----------------------------------------------------
    Pensez aux balises code et au tag
    Une réponse vous a plu ? N'hésitez pas à y mettre un
    Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça

  4. #4
    Membre Expert
    Avatar de Paprick
    Homme Profil pro
    Professeur des Universités
    Inscrit en
    Juin 2019
    Messages
    771
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Professeur des Universités
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2019
    Messages : 771
    Par défaut
    Bonjour,

    En fait, il faut comprendre que Looping ne peut identifier que des types dont il a connaissance dans le SGBD de référence ; sinon, il crée un type libre.
    La solution consiste donc à lui enseigner les types qu'il n'utilise pas par défaut.
    Pour cela, il faut aller, depuis le menu principal, dans "Paramètres LDD" -> "Configuration du SGBD personnalisé".
    Choisir PostgreSQL dans la zone "basé sur" et faire les adaptations souhaitées (par exemple, remplacer SMALLINT par INT2).
    Il suffit ensuite de choisir "Personnalisé" dans l'option "SGBD cible" et ça devrait fonctionner comme souhaité .

    Merci de me tenir informé.
    Patrick Bergougnoux - Professeur des Universités au Département Informatique de l'IUT de Toulouse III
    La simplicité est la sophistication suprême (Léonard de Vinci)
    LIVRE : Modélisation Conceptuelle de Données - Une Démarche Pragmatique
    Looping - Logiciel de modélisation gratuit et libre d'utilisation

  5. #5
    ced
    ced est déconnecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    Avril 2002
    Messages
    6 065
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 065
    Par défaut
    OK, je vais tester cette solution.
    Autre possibilité : parser le script généré par pg_dump en remplaçant les types, via un script, pour le rendre compatible avec Looping. Cette solution-là fonctionne également.
    Je te tiens au courant des tests dès que je les ai menés.

    ced
    Rédacteur / Modérateur SGBD et R
    Mes tutoriels et la FAQ MySQL

    ----------------------------------------------------
    Pensez aux balises code et au tag
    Une réponse vous a plu ? N'hésitez pas à y mettre un
    Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça

Discussions similaires

  1. comment reconnaitre le type de donnes ?
    Par donyas dans le forum Langage
    Réponses: 5
    Dernier message: 22/03/2007, 23h03
  2. quel type de donné renvoie un socket
    Par sneb5757 dans le forum Développement
    Réponses: 4
    Dernier message: 18/11/2006, 18h06
  3. Intérêt passage version supérieur, type de donnés
    Par cbroissa dans le forum Requêtes
    Réponses: 1
    Dernier message: 31/10/2006, 16h26
  4. interbase : types de donnés : AutoIncrement et Date ???
    Par delphien dans le forum Bases de données
    Réponses: 2
    Dernier message: 12/04/2004, 17h29

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo