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

ALM Discussion :

Modélisation des tables et des vues : monde physique vs monde logique


Sujet :

ALM

  1. #1
    Membre habitué
    Avatar de martinbrait
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    74
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 74
    Points : 131
    Points
    131
    Par défaut Modélisation des tables et des vues : monde physique vs monde logique
    exercice 1 :
    Dans un premier temps :
    on gère l'organisation du séjour de sportifs, participants à un championnat :
    dates et heures d'entraînements préparatoires, soins médicaux, coaching,
    préparations mentales, disponibilité des stades et salles d'entraînements.

    Dans un deuxième temps :
    on gère le retour par avion de nos sportifs, avec des destinations de retour différentes
    et des dates de retours différentes.

    contrainte proposée :
    Séparer le stockage, le monde du stockeur de données, concepteur de tables dba
    Séparer le logiciel, le monde du développeur des traitements, utilisateur de vues dev


    Passant au monde du dba, chaque nom de table et chaque nom de champ, seront systématiquement optimisés,
    avec quelques indications : typages des données, contraintes.

    Comment choisir le nom d'une table ?


    gestion de participants à une compétition
    gestion de transports de voyageurs



    étape 1 : choisir le nom explicite d'une entité :
    remarque : le nom explicite de cette entité sera utilisé côté alias (vue de table), pour le développeur
    -> NomDuSportif

    étape 2 : on écrit tout en minuscules, sans accent ni caractère spécial :
    -> nomdusportif

    étape 3 : on préfixe avec le rôle et la hiérarchie de la table :
    t_ pour table de mouvement,
    tr_ pour table de référence,
    tj_ pour table de jointure,
    tg_ pour table générique, mère d'un héritage,
    th_ pour table héritée, fille d'un héritage
    -> tr_nomdusportif

    étape 4 : on raccourcit les noms de tables, sur 7 caractères
    remarque : cela nous facilitera la vie, pour ne pas saisir des noms qui n'en finissent pas dans nos requêtes sql.
    -> tr_nmsport

    étape 5 : on élargit le domaine des valeurs à prendre en compte dans chaque table, et on adapte le nom de la table en conséquence (partage d'entités communes entre plusieurs schémas)
    Schéma 2 : nos sportifs dans un premier temps, deviennent des voyageurs dans un deuxième temps. Sportifs et voyageurs sont des personnes (avec éventuellement des spécialisations)
    La table tr_nompers sera commune à nos compétiteurs dans le schéma 1 devenant nos voyageurs dans le schéma 2.
    -> tr_nompers

    étape 6 : on suffixe
    ajouter un trigramme (voire quadrigramme pour les très gros projets de plus de 100 tables)
    remarque : ce suffixe, pourquoi pas, nous servira d'alias de table dans du sql
    (select npr.d_inscript from tr_nompers_npr As npr)

    -> tr_nompers_npr

    Comment choisir le nom d'un champ ?
    Etape 1 : Eviter les majuscules. Pour écrire 2 mots il faut privilégier l’utilisation d’un underscore.
    -> "cle_nom_de_personne"
    -> "matricule_personne"
    -> “date_inscription”

    Etape 2 : préfixer le nom du champ lui-même, du type de données qu'il contient.
    t_ ou t255_ pour texte, (255 caractères)
    (on pourrait pousser le bouchon en personnalisant le nombre de caractères si on le croit définitif, pour plusieurs années)
    d_ pour date
    b_ pour booléen
    m_ pour mémo
    a_ pour tableau (domaines, types sous postgres)
    -> "n_clenompersonne"
    -> "t_matriculepersonne"
    -> “d_inscription”

    Etape 3 : avoir des noms courts. Ne pas dépasser 7 caractères
    -> "n_clenomp"
    -> "t_matriprs"
    -> “d_inscript”

    Etape 4 : on identifie si le champ est une clef primaire (kn),étrangère (kn) ou alternative (ak)
    et on le préfixe le cas échéant :
    -> "kn_clenomp"
    -> "ak_matriprs"
    -> “d_inscript”

    Etape 5 : si le champ est une clef primaire ou étrangère, on le suffixe avec le trigramme du nom de sa table :
    -> "kn_clenomp_npr"
    -> “d_inscript”


    Passant au monde du développeur, chaque table lui sera présentée sous forme de vue,
    avec alias de nom de champs et alias de noms de table, pour l'utilisation logicielle.
    2 vues pour le développeur, une lui servant à gérer les sportifs en compétition,
    l'autre lui servant à gérer les sportifs en voyage de retour
    -> vNomDuSportif
    -> vNomDuVoyageur


    Les préfixes de clef seront convertis en Ref,
    Les préfixes de clef alternative seront convertis en Cod

    -> RefSportif (c'est la clef primaire ou étrangère, autoincrement)
    -> CodSportif (c'est la clef unique, que connaît le gestionnaire)
    -> DateInscription

    Exemple de données :
    -> RefSportif : 1(c'est la clef autoincrement)
    -> CodSportif : FR017ESC(c'est la clef "parlante" qu'utilise le gestionnaire)(equipe france, sportif 17, escrime)
    -> DateInscription : 01/01/2019




    exercice2 :
    On décide de faire une statistique de l'utilisation de types de couverts (plastique, inox, argenterie...)
    que choisit une personne pendant chacun de ses repas (petit-déjeuner, déjeuner, goûter, dîner)
    schéma physique :
    Le dba identifie sans effort excessif, les clefs primaires, clefs étrangères,
    clefs alternatives, typages des champs, sans se déconcentrer.
    Nom : schemaphysique_repasetcouverts.PNG
Affichages : 889
Taille : 13,5 Ko
    schéma logique :
    Le développeur identifie sans effort excessif,l'information cachée, derrière les mnémoniques jargonneux des clients de son application.

    Les noms de champs destinés au dev :
    Soyons libres avec les majuscules. Soyons libre avec l'utilisation des accents.
    “DateInscription”,"DateEvénementSportif"
    Eviter l’utilisation d’abréviation. A première vu c’est pratique pour faire noms de tables pas très long pour le dba, mais dans la pratique logicielle, un développeur ne comprendra pas facilement à quoi ça correspond et il devrait visualiser le contenu pour comprendre ce qui se cache derrière
    Nom : schemalogique_repasetcouverts.PNG
Affichages : 853
Taille : 14,1 Ko

  2. #2
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Il y a des choses discutables dans ton texte mais c'est assez proche de ce que je fais et le nommage est partiellement celui aussi de SQLPro dont je me suis moi-même inspiré.

    Pourquoi poster ça dans le forum (qui est plutôt pour poser des problèmes et appeler à l'aide) que dans ton blog (qui est plutôt pour partager ton expérience) ?
    Tu as des questions suite à ce que tu as posté ?

    Tu pourrais même suggérer d'en faire un article à publier sur DVP (mais il y a du boulot de correction de rédaction et de mise en forme à faire).
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  3. #3
    Membre habitué
    Avatar de martinbrait
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    74
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 74
    Points : 131
    Points
    131
    Par défaut
    Merci pour avoir donné signe de vie !

    Je vais ouvrir ce tuto sur mon blog, en suivant sagement ton conseil.
    Je partagerai notamment mes astuces access de productivité :
    • automation de création des vues normalisées,
    • automation de création de formulaires parfaitement nommés,
    • automation de création de noms de contrôles ultra normalisés (frédéric BROUARD),
    • automation de création des textes d'étiquettes de contrôle ultra explicites,
    • automation de création des infobulles parfaites révélant la légende de champ, en relation avec chaque contrôle.



    Voici un exemple :
    Nommage de la colonne de ma vue : CodeMatricule
    Nommage de la colonne de ma table : ak_matriprs
    Nommage de la la légende de ma colonne : CodeMatricule (clé alternative identifiant la personne de manière unique) [svi] ak_matriprs
    Infobulle sur l'étiquette de ma colonne :CodeMatricule (clé alternative identifiant la personne de manière unique) [svi] ak_matriprs

  4. #4
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Nommage de la colonne de ma table : ak_matriprs
    Je n'ai pas tout relu mais, si je me souviens bien, le préfixe ak_ est pour "alternative key" or une clé alternative peut porter sur plusieurs colonnes alors que le préfixe ak_ semble indiquer que c'est cette colonne seule qui constitue la clé alternative.
    Autre danger que j'y vois : le changement de la structure de la table qui rend cette colonne insuffisante pour constituer une clé alternative ou même qui supprime son caractère d'unicité. On commence par considérer que tel attribut doit être unique puis on constate, à l'usage ou suite à une modification des pratiques, que ce n'est plus le cas. La colonne perd son caractère de clé alternative et son nom doit être changé (ce qui a des conséquences lourdes) ou n'est plus aussi signifiant (ce qui peut entraîner des erreurs dans la rédaction des requêtes).

    Les noms des colonnes sont en principe issus de la modélisation des données. Les contraintes relèvent davantage de la mécanique de la BDD implémentée et peuvent varier, même avec un schéma qui n'a pas changé. Donc vouloir introduire des notions de contraintes dans le nommage des colonnes est, à mon avis, une mauvaise idée.

    Un exemple fictif qui me vient en tête...

    Soit une entreprise hôtelière qui n'a qu'un seul hôtel.
    La table des chambres est modélisée ainsi : chambre (id, numero, etage...)
    Selon ton principe, comme id est clé primaire, elle doit être nommée (si je me souviens bien) pk_id et comme numero est clé alternative, la colonne doit être nommée ak_numero.

    Quelques temps plus tard, la société acquiert un autre hôtel et doit modifier son modèle de données. On crée une table pour les hôtels et on fait une identification relative pour les chambres :
    hotel (id, id_ville, nom...)
    chambre (id_hotel, numero, etage...)

    Cette fois, la clé primaire porte sur deux colonnes dont une est clé étrangère et le numéro perd son caractère de clé alternative et est inclus dans la clé primaire.
    => Le nommage des colonnes est à refaire ; les vues et/ou les programmes qui accèdent directement à la table des chambres doivent être modifiés... alors que cela aurait pu être évité en grande partie sans ce nommage trop descriptif.


    Autre chose : "ak_matriprs" ne m'évoque pas du tout un code matricule !
    Chez moi, cette colonne serait nommée [préfixe de table]_code_matricule ou bien plus simplement [préfixe de table]_matricule.

    On s'en fout un peu des noms longs des colonnes, tant que ce n'est pas exagéré, genre : identifiant_chef_de_projet. prj_id_chef est suffisamment significatif puisque le trigramme indique que la colonne est dans la table des projets, qu'il s'agit d'un identifiant et qu'il s'agit donc de celui du chef (de projet).

    Que signifie "prs" dans le nom de ta colonne ?
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  5. #5
    Membre habitué
    Avatar de martinbrait
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    74
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 74
    Points : 131
    Points
    131
    Par défaut j'ai besoin d'un nommage techniquement trop descriptif !!!
    Citation Envoyé par CinePhil
    Les noms des colonnes sont en principe issus de la modélisation des données. Les contraintes relèvent davantage de la mécanique de la BDD implémentée et peuvent varier, même avec un schéma qui n'a pas changé. Donc vouloir introduire des notions de contraintes dans le nommage des colonnes est, à mon avis, une mauvaise idée.
    Tu vois juste !
    Cependant, mon choix de préfixer au nom de ma colonne, le type de données, vient de la modélisation des données.
    Cette contrainte est, il me semble, directement issue du le schéma logique MLD.
    Si je suis dans l'obligation de modifier mon schéma, en modifiant le type de données d'une colonne, de texte à numérique, je préfère immédiatement modifier toute la chaine : nom de ma colonne avec préfixe qui change n_macolonne au lieu de t_macolonne. Je passe ensuite effectivement en revue mes requêtes, vues et formulaires liés, pour les réajuster.

    Ce choix me permet d'avoir en permanence sous les yeux la description de mes colonnes avec leur type de données, lors du fonctionnement normal, quotidien, de mon application.
    Je préfère payer le prix de réadapter le nom de ma colonne et les requêtes, vues, formulaires liés, en cas de changement incontournable, exceptionnel, une fois tous les 5 ans.


    Citation Envoyé par CinePhil
    "ak_matriprs" ne m'évoque pas du tout un code matricule !
    Chez moi, cette colonne serait nommée [préfixe de table]_code_matricule ou bien plus simplement [préfixe de table]_matricule.
    Tu vois juste !
    Je pars du principe que lorsque je me focalise, sur l'information technique associée à une colonne, je veux perdre à cet instant la description de l'information qu'elle stocke
    Ainsi, je préfère de beaucoup le libellé ak_matri, qui m'évoque de manière courte le rôle technique de clef alternative de ma colonne, sans chercher à identifier à tout prix
    au même moment, l'information que stocke ma colonne, lorsque ma préoccupation est d'analyser mon schéma relationnel.
    Au contraire, lorsque j'exploite ma colonne, dans mon programme, en vue de son utilisation logicielle, kn_matri, désagréablement flou, prend le doux alias de CodeMatricule, évoquant cette fois très explicitement le contenu de la colonne.

    Parfois, donner un nom générique à une colonne présente un avantage caché :
    Exemple :
    Partons avec deux colonnes de propriétés.
    Nommons les génériquement t_avantage1,t_avantage2 etc...
    Dans l'utilisation logicielle, mes noms de colonnes sont aliassés : t_avantage1(AllocationLogement),t_avantage2(AllocationPosteDifficile) en 2010
    Dix ans plus tard, le gestionnaire m'indique qu'il n'utilise plus ces colonnes. Il désire y stocker des informations d'une autre nature.
    Dans l'utilisation logicielle, ces noms de colonnes seront aliassées : t_avantage1(AllocationExcellenceProfessionnelle),t_avantage2(DroitApretTauxZero) en 2020

    Autrement dit, le contenu de la colonne peut changer sans avoir à faire mentir le nom de ma colonne. En stockant sans modification, une information nouvelle, sans rapport avec celle qu'il contenait initialement. Le nom de la colonne ne change pas, seul l'alias de la colonne évolue.

  6. #6
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Je trouve quand même paradoxal que d'un côté tu écrives ceci pour justifier ton choix de préfixe des colonnes :
    Ce choix me permet d'avoir en permanence sous les yeux la description de mes colonnes avec leur type de données, lors du fonctionnement normal, quotidien, de mon application.
    Mais qu'en même temps tu préfères avoir des noms de colonnes potentiellement peu compréhensibles !
    Ainsi, je préfère de beaucoup le libellé ak_matri, qui m'évoque de manière courte le rôle technique de clef alternative de ma colonne, sans chercher à identifier à tout prix
    au même moment, l'information que stocke ma colonne, lorsque ma préoccupation est d'analyser mon schéma relationnel.
    Au contraire, lorsque j'exploite ma colonne, dans mon programme, en vue de son utilisation logicielle, kn_matri, désagréablement flou, prend le doux alias de CodeMatricule, évoquant cette fois très explicitement le contenu de la colonne.
    Lorsque je fais une requête, je préfère voir de suite ce que j'utilise comme colonne. Non pas comme type de colonne mais comme contenu de colonne.

    J'ai un peu l'impression que tu réfléchis davantage en développeur d'application qu'en concepteur de BDD et que c'est pour ça que ton standard s'attache autant à indiquer les types de données. Je te souhaite que ça ne te joue pas de mauvais tours, un jour.

    Bref, nous ne serons pas d'accord là-dessus. Ce n'est pas très grave.

    Nommons les génériquement t_avantage1,t_avantage2 etc...
    Dans l'utilisation logicielle, mes noms de colonnes sont aliassés : t_avantage1(AllocationLogement),t_avantage2(AllocationPosteDifficile) en 2010
    Dix ans plus tard, le gestionnaire m'indique qu'il n'utilise plus ces colonnes. Il désire y stocker des informations d'une autre nature.
    Dans l'utilisation logicielle, ces noms de colonnes seront aliassées : t_avantage1(AllocationExcellenceProfessionnelle),t_avantage2(DroitApretTauxZero) en 2020
    Ça c'est plutôt une erreur de modélisation !
    S'il y a potentiellement plusieurs avantages, il convient de faire une table pour les avantages et une association avec celle-ci.
    Et changer la nature du contenu d'une colonne, c'est mélanger les torchons et les serviettes !
    Si je vais rechercher une information ancienne et que le contenu à changé, je dois maintenir quelque part la date a laquelle l'information a changé. Ce n'est vraiment pas top !
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  7. #7
    Membre habitué
    Avatar de martinbrait
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    74
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 74
    Points : 131
    Points
    131
    Par défaut
    Citation Envoyé par CinePhil
    J'ai un peu l'impression que tu réfléchis davantage en développeur d'application qu'en concepteur de BDD et que c'est pour ça que ton standard s'attache autant à indiquer les types de données.
    Bien vu CinePhil, il est vrai que je suis formaté, pour l'instant, à programmer les moindres traitements, de manière jusqu'au boutiste, quel que soit le coût en temps, et en nombre de lignes de code. Ce monde bien familier, ne me demande plus vraiment d'effort ! Ce temps est passé, aux dépens de la saine modélisation des données, même rudimentaire (?)

    Je mets spontanément mon énergie, à cogiter, une programmation poussée permettant de réaliser un nommage standardisé de mes colonnes, vues, requêtes, avec déploiements divers, avant même de m'intéresser un tant soit peu, à modéliser mes dites colonnes, vues et requêtes. J'ai gratification à réaliser dans mon esprit, sans effort excessif, le programme de déploiement de mes 700 colonnes ultra-standardisées, par programme. A contrario, je repousse le moment de réaliser mon MCD, me coûtant un effort hautement plus élevé !

    Je procrastine lâchement, côté MCD. Avant de m'y attaquer, je peaufine, LA méthode idéalement paresseuse, qui m'offre constamment sous les yeux, les informations exhaustives, de cardinalités, règles de gestion et typage, concernant les 70 colonnes de liaison de mes 70 tables.
    Question épineuse : Lorsque survient une inévitable nouvelle règle de gestion de mon client, comment puis-je me sentir prêt, et léger, à modifier adéquatement ma structure en conséquence ? Etre à l'aise dans la maintenance d'un gros MCD, est-ce vraiment possible ?


    Citation Envoyé par CinePhil
    J'ai un peu l'impression que tu réfléchis davantage en développeur d'application qu'en concepteur de BDD et que c'est pour ça que ton standard s'attache autant à indiquer les types de données. Je te souhaite que ça ne te joue pas de mauvais tours, un jour.
    Est-ce aberrant, sur le fond, de travailler avec deux règles de nommage de colonnes, au sein du même projet ?

    Citation Envoyé par CinePhil
    Ça c'est plutôt une erreur de modélisation !
    S'il y a potentiellement plusieurs avantages, il convient de faire une table pour les avantages et une association avec celle-ci.
    Et changer la nature du contenu d'une colonne, c'est mélanger les torchons et les serviettes ! Si je vais rechercher une information ancienne et que le contenu à changé, je dois maintenir quelque part la date a laquelle l'information a changé. Ce n'est vraiment pas top !
    Ok, bien compris ! Merci de ne pas m'avoir dépêtré avec clairvoyance, de mon propre raisonnement foireux !

  8. #8
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Etre à l'aise dans la maintenance d'un gros MCD, est-ce vraiment possible ?
    C'est justement avec un bon MCD qu'on lit comme un livre la structure des données, les règles de gestion qui ont abouti au MCD... et avec les outils modernes qui prévoient les types de données dès le MCD (alors que dans le principe de la méthode Merise, c'est trop tôt), on a sous les yeux en un schéma toutes les informations sur les données à enregistrer en BDD. Alors autant que les noms des tables et des colonnes soient le plus clair possible.
    Quand on revient des mois ou des années après sur un MCD, il vaut mieux lire "emp_matricule" pour savoir instantanément et mnémotechniquement que cette colonne stocke le matricule de l'employé, non ?
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  9. #9
    Invité
    Invité(e)
    Par défaut Pourquoi faire simple quand on peut faire compliqué ?
    "Il vaut mieux pomper d'arrache pied même s'il ne se passe rien que de risquer qu'il se passe quelque chose de pire en ne pompant pas."

    SOMMAIRE

    -------------------------------------

    1ère partie : Nom de tables, noms de champs
    2ème partie : Synchronisation MCD / BDD
    3ème partie : Expérience personnelle
    4ème partie : Exemple de vue un peu complexe
    5ème partie : État récapitulatif des tables (Tables, Colonnes, Rangées, Synonymes, Vue, Noms)
    6ème partie : Références croisées TABLES/CHAMPS
    7ème partie : Conclusion

    1ère partie : Nom de tables, noms de champs
    Citation Envoyé par martinbrait Voir le message
    Comment choisir le nom d'une table ?
    - Gestion de participants à une compétition
    - Gestion des transports de voyageurs
    Étape 1 : choisir le nom explicite d'une entité (exemple « NomDuSportif »)
    Étape 2 : on écrit tout en minuscules, sans accent ni caractère spécial
    Étape 3 : on préfixe avec le rôle et la hiérarchie de la table
    Étape 4 : on raccourcit les noms de tables, sur 7 caractères
    Étape 5 : on élargit le domaine des valeurs à prendre en compte dans chaque table, et on adapte le nom de la table en conséquence (partage d'entités communes entre plusieurs schémas)
    Étape 6 : on suffixe avec un trigramme (voire quadrigramme pour les très gros projets de plus de 100 tables)
    Remarque : Le fait qu’une personne soit tantôt compétiteur, tantôt voyageur n’a pas d’incidence sur la table des personnes gérées. Si l’on doit gérer des compétitions et des voyages, cela fait l’objet de deux autres tables.

    Pour nommer une table, on fait (enfin, je fais) comme au bon vieux temps quand on affectait une étiquette logique à un fichier dans nos programmes COBOL, on choisit un mnémonique le plus court possible (2 à 5 caractères) et puis c’est tout.

    Dès l’étape 1, l’exemple est inadapté. Le nom explicite de table proposé « NomDuSportif » n’est pas pertinent, cela correspond à un nom d’attribut et non à celui d’une entité, d’un objet du monde réel, bref d’une table.

    Six étapes pour arriver de « NomDuSportif » à « tr_nompers_npr », un nom de table composé de six éléments, pour moi, c’est de l’enculage de mouche. Il faut avoir du temps à perdre.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ┌────┬───┬─────┬──────┬───┬─────┐
    │ tr │ _ │ nom │ pers │ _ │ npr │
    └────┴───┴─────┴──────┴───┴─────┘
    … Et « nompers » n’est toujours pas un nom d’entité mais un nom d’attribut et de plus, ce n’est pas une table de références si cette table est sensé être une table de personnes.

    Citation Envoyé par martinbrait Voir le message
    Comment choisir le nom d'un champ ?
    Étape 1 : éviter les majuscules. Pour écrire 2 mots il faut privilégier l’utilisation d’un underscore
    Étape 2 : préfixer le nom du champ lui-même, du type de données qu'il contient
    Étape 3 : avoir des noms courts. Ne pas dépasser 7 caractères
    Étape 4 : on identifie si le champ est une clef primaire (kn), étrangère (kn) ou alternative (ak)
    et on le préfixe le cas échéant
    Étape 5 : si le champ est une clef primaire ou étrangère, on le suffixe avec le trigramme du nom de sa table
    On nomme le champ par son nom et puis c’est tout.

    Nommer une table, un champ, ça se décide. Seulement quand on procrastine, on ne décide pas, on tergiverse, on analyse, on argumente, on raisonne, et c’est le raisonnement qui décide.

    Citation Envoyé par martinbrait Voir le message
    Je procrastine lâchement, côté MCD. Avant de m'y attaquer, je peaufine, LA méthode idéalement paresseuse, qui m'offre constamment sous les yeux, les informations exhaustives, de cardinalités, règles de gestion et typage, concernant les 70 colonnes de liaison de mes 70 tables.
    2ème partie : Synchronisation MCD / BDD
    Si l’objectif d’un MCD consiste à imiter conceptuellement un SGBD, pourquoi pas, j’imagine que ça rassure mais à un moment donné, il faut lâcher son trotteur (ou son déambulateur !), et se déplacer en toute liberté. Il faut oser franchir le Rubicon, abandonner la forme sécuritaire de son modèle conceptuel et passer à la forme développement, s’affranchir de la lecture syllabique et pratiquer la lecture rapide.

    Ce n’est pas au développeur de singer le modèle conceptuel mais au concepteur d’intégrer dans sa démarche conceptuelle des pratiques performantes, pragmatiques, de développement.

    Car c’est ça en fait le problème, le MCD (ou MLD) préfigure la BDD, puis la BDD reproduit le MCD (ou MLD). MCD/MLD et BDD doivent être synchronisés pour que concepteur et développeur parlent le même langage. On tourne en rond.

    Lorsque concepteur et développeur sont une même personne, il doit être difficile, voire impossible de penser le développement autrement qu’en se conformant rigoureusement à son MCD. La démarche conceptuelle a demandé un investissement, elle est imprimée, impossible de se débarrasser de ce que l’on a minutieusement pensé et construit ; bien au contraire, on s’attache à reproduire sa BDD à l’identique de son MCD référent. (CinéPhil : Les noms des colonnes sont en principe issus de la modélisation des données).

    Mais au final :

    • le développeur n’a que faire de la typologie des tables dans leurs noms,
    • quant aux champs, le développeur dispose de toutes les spécifications dans la BDD sans qu’il soit nécessaire d’en rappeler certaines dans leurs noms,
    • et une Base de Données n’a pas besoin non plus qu’on lui précise dans son nom que c’est une BD (Frédéric BROUARD : Le nom d'une base de données doit commencer par le préfixe « BD_ » suivi d'une indication pertinente.).

      Pourquoi ne pas préfixer le nom de mes BDD par « BD_ » ? Tout simplement parce qu’elles sont déjà suffixées « .dbs » par le SGBD Informix. C’est peut-être une spécificité Informix mais c’est pour dire de se méfier de vouloir généraliser certaines règles.

      À noter que le nom de mon répertoire de développement est le même que celui de ma BDD (sans le suffixe « .dbs ») ; c’est une question de cohérence, une façon de satisfaire l’œil, d’éviter une charge mentale, de standardiser mes sauvegardes :

      - soit la totalité de l’application (/concours),
      - soit le développement (/concours/concours),
      - soit la BDD (/concours/concours.dbs).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    ┌───────────────────────────────────────────────────────────────────┬──────────┐
    │                        ARBORESCENCE Ex&Co                         │31/07/2007│
    └───────────────────────────────────────────────────────────────────┴──────────┘
                                                                       
    ┌──────────────────────────────────────────────────────────────────────────────┐
    │                                                                              │
    │  ┌─┐   ┌────────────┐   ┌────────────┐   ┌Répertoires─┐      ┌Lignes──────┐  │
    │  │R├───┤concours    ├─┬─┤concours    ├───┤ace         │   13 │      3.718 │  │
    │  │O│   └────────────┘ │ └────────────┘   │ace_1       │   60 │     44.950 │  │
    │  │O│                  │ ┌────────────┐   │ace_2       │   71 │     49.376 │  │
    │  │T│                  └─┤concours.dbs│   │ace_1_n     │    7 │      6.180 │  │
    │  └─┘                    └────────────┘   │ace_2_n     │   24 │     22.526 │  │
    │                                          │ace_mj      │   20 │     12.894 │  │
    │                                          │ace_mj_n    │   10 │      7.834 │  │
    │                                          │ascii       │   66 │        251 │  │
    │                                          │bull        │  115 │     27.149 │  │
    │                                          │doc         │   14 │      2.802 │  │
    │                                          │man         │   20 │     18.719 │  │
    │                                          │file        │  106 │      7.178 │  │
    │                                          │frm         │      │            │  │
    │                                          │ftp         │      │            │  │
    │                                          │isql        │  445 │     61.536 │  │
    │                                          │per         │  900 │    969.648 │  │
    │                                          │prg         │      │            │  │
    │                                          │shell       │   29 │      2.430 │  │
    │                                          │shell_1     │   75 │     12.207 │  │
    │                                          │shell_2     │   83 │     15.054 │  │
    │                                          │shell_1_n   │    7 │      1.050 │  │
    │                                          │shell_2_n   │   24 │      4.554 │  │
    │                                          │shell_mj    │   24 │      4.272 │  │
    │                                          │shell_mj_n  │    9 │      1.748 │  │
    │                                          │sql         │      │            │  │
    │                                          │sql_1       │   33 │      1.078 │  │
    │                                          │sql_2       │   26 │      2.544 │  │
    │                                          │sql_mj      │   11 │        576 │  │
    │                                          │sql_1_n     │      │            │  │
    │                                          │sql_2_n     │    5 │        761 │  │
    │                                          │sql_mj_n    │    2 │        101 │  │
    │                                          └────────────┘      └────────────┘  │
    │                                                              ┌Menu────────┐  │
    │                                                              │     37.213 │  │
    │                                                              └────────────┘  │
    │                                                              ┌────────────┐  │
    │                                                              │  1.318.349 │  │
    │                                                              └────────────┘  │
    │                                                                              │
    └──────────────────────────────────────────────────────────────────────────────┘
    3ème partie : Expérience personnelle
    Finalement, il y a deux univers très différents, la planète « top-down », à gauche du ciel, où vivent les Shadocks qui pompent, qui pompent… qui conceptualisent, qui modélisent, qui identifient, qui préfixent, qui suffixent, qui "trigramment", qui "aliassent", etc.

    Et puis, il y a la planète « bottom-up », une petite planète sur les bords d’une galaxie, une jolie petite planète qui fait gentiment le tour de son soleil.

    Elle se prend pour une planète, une planète de développement.

    Elle n’a pas besoin de cahier des charges, pas besoin de modèles, elle avance très bien. Pas besoin de préfixes non plus, ni de suffixes, ni de trigrammes, ni d’alias… et c’est bien comme ça.

    Sur cette petite planète, une informatisation s’initie immanquablement à partir d’un fait banal, une rencontre, une opportunité associée au contexte dramatique d’une problématique en désespérance. Il s’en suit une aventure qui se vit comme telle, dans une atmosphère d’excitation, d’expérimentation et d’urgence.

    10 mai 1991 : Les inscriptions aux stages de formation continue s’accumulent sur le bureau des gestionnaires… À l’arrache, un serveur vient d’être acquis et installé. Trois jours d’assistance pour comprendre le minimum du SGBD (Informix) et du système (Unix). Premier écran, les gestionnaires commencent à saisir. L’aventure va durer 17 ans.

    1er février 1992 : D’autres inscriptions mais à des examens-concours, celles-là, s’empilent sur les bureaux. Pour se donner du temps, on a avancé les dates officielles d’inscription mais le nouveau serveur tarde à arriver à cause de l’inventaire de fin d’année de la société sollicitée. Une petite semaine pour installer Unix et Informix. Premier écran de saisie et démarrage dans la journée. L’aventure va durer 15 ans.

    Dans de telles conditions de développement, on n’a pas le temps de tergiverser, de se prendre la tête à conceptualiser, on va à l’essentiel, on prend les raccourcis, on épure, on s’organise pour tout maitriser, pour aller vite. L’enjeu, la pression, l’urgence, l’obligation de réussir dictent tous les choix. On n’a pas le droit à l’erreur car il est impossible de revenir en arrière, il faut déposer le bitume et avancer pour ne pas se faire écraser par le rouleau compresseur que sont les gestionnaires eux-mêmes malmené(e)s par les échéances. On ne réfléchit pas intellectuellement mais instinctivement. Le cerveau aime qu’on le sollicite dans la précipitation, il y a un plaisir beaucoup plus important à écouter son intuition que le plaisir à écouter sa logique analytique. L’intuition est le plus court chemin vers la décision.

    3 octobre 2007 (Fin de l’aventure) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    ┌──────────────────────────┬─────────────────────────┬─────────────────────────┐
    │            BILAN         │   FORMATION CONTINUE    │   EXAMENS ET CONCOURS   │
    ├──────────────────────────┼────────┬────────────────┼────────┬────────────────┤
    │             Gestionnaires│      35│                │      10│                │
    │        Procédures (shell)│     982│  105.567 lignes│     251│   41.218 lignes│
    │            Éditions (ace)│     916│  581.732 lignes│     205│  147.478 lignes│
    │ Requêtes applicatif (sql)│     330│   30.110 lignes│      77│    5.060 lignes│
    │   Requêtes diverses (sql)│     928│  184.049 lignes│     445│   61.536 lignes│
    │              Écrans (per)│     136│  434.778 lignes│     900│  969.648 lignes│
    │                    Divers│     415│   59.077 lignes│     321│   56.196 lignes│
    │                      Menu│        │    7.343 items │        │   35.567 items │
    │                    Tables│     205│                │      69│                │
    │                 Synonymes│      59│                │       9│                │
    │                      Vues│      12│                │     194│                │
    │                    Champs│   5.271│                │   2.515│                │
    ├──────────────────────────┼────────┼────────────────┼────────┼────────────────┤
    │                          │        │1.402.656 lignes│        │1.316.703 lignes│
    └──────────────────────────┴────────┴────────────────┴────────┴────────────────┘
    4ème partie : Exemple de vue un peu complexe
    Du coup, je me suis intéressé à l’exemple de vue un peu complexe proposé par CinéPhil. Jusque là, je pensais que ces histoires de nommages se limitaient aux modèles conceptuels ; mais visiblement non, ça concerne également les développements. Alors, j’ai voulu voir ce que cet exemple donnerait sur ma petite planète. Pour ceux qui ne suivent pas, j’ai évoqué mes règles personnelles de nommage dans la discussion : Choisir de créer ou de ne pas créer une table de références

    Bon, je ne suis plus au top du SQL car je ne connaissais pas « INNER JOIN », j’en étais resté à la clause « WHERE » bien plus simple. Je ne savais pas non plus que l’on pouvait créer des views rassemblant des champs de plusieurs tables. Cela dit, je ne me sens pas du tout frustré de m’être contenté pendant 17 ans de views sur une seule table. Cela doit avoir une utilité puisque ça existe mais elle m’échappe.

    Bref, pour lire et comprendre l’exemple de CinéPhil, j’ai dû passer par une étape de formatage mais malgré ça, je ne garantis pas d’avoir tout bien compris. L’important, c’est le résultat visuel. C’est limpide, évident. Pour l’écrire, c’est facile, il suffit de dupliquer avec l’éditeur chaque champ sur la même ligne et de remplacer le point par un underscore. C’est rapide et les seules erreurs éventuelles sont des erreurs de frappe. Et pas besoin de tests unitaires ; Je les évoque mais en fait, je ne sais pas ce que c’est.

    Avec cette façon de travailler, je suis capable de relire et de comprendre tout ce que j’ai développé depuis mes débuts.

    Ha ! J’oubliais… Je suis arrivé à ça, parce que je ne fais pas de MCD, tout simplement. Lorsque j’ai un doute, je réfléchis sur les 2-3 entités-relations qui me posent problème en les dessinant sur mon bureau ou j’attends le lendemain... Je trouve la solution pendant mon footing matinal.

    L’exemple de CinéPhil (discussion « normalisation du concepteur et du développeur : nommage , entre nécessité et dogmatisme »)

    Désolé pour la présentation, je ne sais pas comment on insère une balise "CODE SQL"...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    CREATE OR REPLACE VIEW v_candidature AS
    SELECT 
          -- Candidat
          cd.cdt_id_candidat cdtIdCandidat,
          c.canPrenomUsuel cdtPrenomUsuel,
          c.canNomUsuel cdtNomUsuel,
          c.canIdSexe cdtIdSexe,
          -- Parcours
          cd.cdt_id_diplome_ensfea cdtIdDiplomeEnsfea,
          d.dpl_code cdtCodeDiplomeEnsfea,
          d.dpl_libelle_court cdtDiplomeEnsfea,
          cd.cdt_numero_mention cdtNumeroMention,
          m.men_code cdtCodeMention,
          m.men_libelle cdtLibelleMention,
          cd.cdt_id_specialisation cdtIdSpecialisation,
          s.spe_code cdtCodeSpecialisation,
          s.spe_libelle cdtLibelleSpecialisation,
          cd.cdt_id_option cdtIdOption,
          o.opt_code cdtCodeOption,
          o.opt_libelle cdtLibelleOption,
          -- te_candidature_cdt
          cd.cdt_id cdtId,
          cd.cdt_id_etat cdtIdEtat,
          e.eti_code cdtCodeEtat,
          e.eti_libelle cdtLibelleEtat,
          cd.cdt_id_session,
          se.ses_code cdtCodeSession,
          se.ses_libelle cdtLibelleSession,
          cd.cdt_date cdtDate,
          cd.cdt_annee_universitaire cdtAnneeUniv,
          cd.cdt_annee_dans_diplome cdtAnneeDansDiplome
    FROM te_candidature_cdt cd
    INNER JOIN v_candidat c ON c.canId = cd.cdt_id_candidat
    INNER JOIN te_parcours_pcr p 
          ON p.pcr_id_diplome_ensfea = cd.cdt_id_diplome_ensfea
          AND p.pcr_numero_mention = cd.cdt_numero_mention
          AND p.pcr_id_specialisation = cd.cdt_id_specialisation
          AND p.pcr_id_option = cd.cdt_id_option
          INNER JOIN te_diplome_dpl d ON d.dpl_id = cd.cdt_id_diplome_ensfea
          INNER JOIN te_mention_men m 
                ON m.men_id_diplome_ensfea = p.pcr_id_diplome_ensfea
                AND m.men_numero = p.pcr_numero_mention
          INNER JOIN te_specialisation_spe s ON s.spe_id = p.pcr_id_specialisation
          INNER JOIN te_option_opt o ON o.opt_id = p.pcr_id_option
    INNER JOIN tr_etat_inscription_eti e ON e.eti_id = cd.cdt_id_etat
    INNER JOIN tr_session_ses se ON se.ses_id = cd.cdt_id_session
    L’exemple de CinéPhil adapté à mon univers, ça donne ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    Tables :
    
    pf  : personnes formation      (v_candidat)
    cf  : candidature formation    (te_candidature_cdt)
    pcr : parcours                 (te_parcours_pcr)
    dip : diplôme                  (te_diplome_dpl)
    men : mention                  (te_mention_men)
    spe : spécialité               (te_specialisation_spe)
    opt : option                   (te_option_opt)
    eti : état inscription         (tr_etat_inscription_et)
    ses : session                  (tr_session_ses)
    
                             
    CREATE OR REPLACE VIEW v_cf 
    AS SELECT 
              --- Candidat
               pf.n_pf              pf_n_pf,
               pf.nom               pf_nom,
               pf.prenom            pf_prenom,
               pf.sexe              pf_sexe,
    
               --- Candidature
               cf.n_cf              cf_n_cf,
               cf.etat              cf_etat,
               cf.d_cf              cf_d_cf,
               cf.annee_univ        cf_annee_univ,
               cf.annee_dans_dip    cf_annee_dans_dip
    
               --- etat
               eti.c_eti           eti_c_eti,
               eti.l_eti           eti_l_eti,
    
               --- Session
               ses.c_ses           ses_c_ses,
               ses.l_ses           ses_l_ses,
    
               --- Parcours
    
                   Diplôme
               dip.c_dip           dip_c_dip,
               dip.l_dip_court     dip_l_dip_court,
    
                   Mention
               men.c_men           men_c_men,
               men.l_men           men_l_men,
    
                   Spécialité
               spe.c_spe           spe_c_spe,
               spe.l_spe           spe_l_spe,
    
                   Option
               opt.c_opt           opt_c_opt,
               opt.l_opt           opt_l_opt,
    
    FROM        pf
    
    INNER JOIN  cf 
    ON          pf.n_pf  =  cf.n_pf
    
    INNER JOIN eti 
    ON          cf.c_eti = eti.c_eti
    
    INNER JOIN ses  
    ON          cf.c_ses = ses.c_ses
    
    INNER JOIN pcr  
    ON          cf.c_dip = pcr.c_dip
    AND         cf.c_men = pcr.c_men
    AND         cf.c_spe = pcr.c_spe
    AND 	      cf.c_opt = pcr.c_opt
    	
               INNER JOIN dip  
               ON         pcr.c.dip = dip.c_dip
    
               INNER JOIN men  
               ON         pcr.c_dip = men.c_dip
               AND        pcr.c_men = men.c_men
    
               INNER JOIN spe  
               ON         pcr.c_spe = spe.c_spe
    
               INNER JOIN opt  
               ON         pcr.c_opt = opt.c_opt
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    ┌─────────────────────┬──────────┬────────────────────────────────┐
    │    Statistiques     │ CinéPhil │            IFA2377             │
    ├─────────────────────┼──────────┼──────────┬──────────┬──────────┤
    │                Mots │      147 │      137 │    -  10 │          │
    │ Espaces non compris │     1528 │      869 │    - 659 │  56,87 % │
    │      Espace compris │     1677 │     1736 │    +  59 │          │
    │              Lignes │       46 │       70 │    +  24 │          │
    └─────────────────────┴──────────┴──────────┴──────────┴──────────┘

    Ces petites statistiques (Word) révèlent que ma façon de travailler réduit de presque la moitié le nombre de caractères saisis. Mais le plus important - difficilement quantifiable - c’est l’absence de charge mentale liée à ma méthode de nommage.

    Saisie deux fois plus importante, préfixes, renommage de noms concaténés mais avec initiales majuscules pour réduire le nombre de caractères (cd.cdt_id_diplome_ensfea cdtIdDiplomeEnsfea ) et parfois différents de l’original (d.dpl_code cdtCodeDiplomeEnsfea), suffixes, alias, sont autant de sollicitations insidieuses qui se traduisent par une charge mentale réductrice de performance.

    5ème partie : État récapitulatif des tables (Tables, Colonnes, Rangées, Synonymes, Vue, Noms)

    Pour illustrer mon propos, j’ai retrouvé dans mes archives les états récapitulatifs des tables de mes deux BDD, je vous joins l’état de la plus petite. L’état exploite les tables system et une table « sys_t » que j’ai ajoutée pour renseigner le nom des tables en clair ; je ne me suis pas risquer à ajouter un champ dans une table system.

    Mes tables « AGL » :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    « sys_c » : colonnes, 
                Dictionnaire des données
    « sys_d » : développements (éditions, écrans, shells, requêtes sql)
                Mise en relation des développements d’une même fonctionnalité
    « sys_t » : tables
                Informations sur les tables à partir du systemm catalog
    Ces tables sont préfixées « sys_ » pour apparaitre alphabétiquement avec les tables system. Ce sont des tables qui participent à un AGL personnel. Classiquement, c’est le cordonnier le plus mal chaussé. Je me suis créé un petit AGL très tardivement.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    ┌──────────────────────────────────────────────────────────────────────────────┐
    │                                  TABLES Ex&Co                                │
    ├────────────┬──────────┬──────────┬──────────┬──────────┬─────────────────────┤
    │   TABLES   │ COLONNES │ RANGÉES  │SYNONYMES │   VUES   │        NOMS         │
    └────────────┴──────────┴──────────┴──────────┴──────────┴─────────────────────┘
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    267
    268
    269
    270
    271
    272
    273
    274
    275
    276
    277
    278
    279
    280
    281
    282
    283
    284
    285
    286
    287
    288
    289
    290
    291
    292
    293
    294
    295
    296
    297
    298
    299
    300
    301
    302
    303
    304
    305
    306
    307
    308
    309
    310
    311
    312
    313
    314
    315
    316
    317
    318
    319
    320
    321
    322
    323
    324
    325
    326
    327
    328
    329
    330
    331
    332
    333
    334
    335
    336
    337
    338
    339
    340
    341
    342
    ┌──────────────────────────────────────────────────────────────────────────────┐
    │                                  TABLES Ex&Co                                │
    ├────────────┬──────────┬──────────┬──────────┬──────────┬─────────────────────┤
    │   TABLES   │ COLONNES │ RANGÉES  │SYNONYMES │   VUES   │        NOMS         │
    ├────────────┼──────────┼──────────┼──────────┼──────────┼─────────────────────┤
    │ac          │         7│        32│          │          │académies            │
    ├────────────┼──────────┼──────────┼──────────┼──────────┼─────────────────────┤
    │cea         │        28│          │          │          │candid. admission    │
    ├────────────┼──────────┼──────────┼──────────┼──────────┼─────────────────────┤
    │cea_n       │        28│          │          │          │candid. admission -n │
    ├────────────┼──────────┼──────────┼──────────┼──────────┼─────────────────────┤
    │cec         │       176│       797│          │aa_1cce   │candidatures Ex&Co   │
    │            │          │          │          │aa_1cci   │                     │
    │            │          │          │          │aa_agce   │                     │
    │            │          │          │          │aa_agci   │                     │
    │            │          │          │          │aa_sdce   │                     │
    │            │          │          │          │aa_sdci   │                     │
    │            │          │          │          │aa_ssce   │                     │
    │            │          │          │          │aa_ssci   │                     │
    │            │          │          │          │aacaacx   │                     │
    │            │          │          │          │aacr      │                     │
    │            │          │          │          │aacs      │                     │
    │            │          │          │          │aacu      │                     │
    │            │          │          │          │aare      │                     │
    │            │          │          │          │aass2ce   │                     │
    │            │          │          │          │aass2ci   │                     │
    │            │          │          │          │aasuce    │                     │
    │            │          │          │          │aasuci    │                     │
    │            │          │          │          │agtlcu    │                     │
    │            │          │          │          │ai_ece    │                     │
    │            │          │          │          │ai_eci    │                     │
    │            │          │          │          │al_esce   │                     │
    │            │          │          │          │al_esci   │                     │
    │            │          │          │          │atl_ace   │                     │
    │            │          │          │          │atl_aci   │                     │
    │            │          │          │          │atl_bce   │                     │
    │            │          │          │          │atl_bci   │                     │
    │            │          │          │          │atl_cce   │                     │
    │            │          │          │          │atl_cci   │                     │
    │            │          │          │          │bbeb      │                     │
    │            │          │          │          │caep      │                     │
    │            │          │          │          │casuep    │                     │
    │            │          │          │          │egeb      │                     │
    │            │          │          │          │i_epece   │                     │
    │            │          │          │          │i_epeci   │                     │
    │            │          │          │          │i_epecu   │                     │
    │            │          │          │          │icepcep   │                     │
    │            │          │          │          │icepeep   │                     │
    │            │          │          │          │iceppep   │                     │
    │            │          │          │          │icepvep   │                     │
    │            │          │          │          │ichefep   │                     │
    │            │          │          │          │ie_e1ce   │                     │
    │            │          │          │          │ie_e1ci   │                     │
    │            │          │          │          │ie_e2ce   │                     │
    │            │          │          │          │ie_e2ci   │                     │
    │            │          │          │          │ie_e3ce   │                     │
    │            │          │          │          │ie_e3ci   │                     │
    │            │          │          │          │ie_stce   │                     │
    │            │          │          │          │ie_stci   │                     │
    │            │          │          │          │ir_ece    │                     │
    │            │          │          │          │ir_eci    │                     │
    │            │          │          │          │ir_ice    │                     │
    │            │          │          │          │ir_ici    │                     │
    │            │          │          │          │mo_arce   │                     │
    │            │          │          │          │mo_arci   │                     │
    │            │          │          │          │mo_cce    │                     │
    │            │          │          │          │mo_cci    │                     │
    │            │          │          │          │mo_ssep   │                     │
    │            │          │          │          │moebace   │                     │
    │            │          │          │          │moebaci   │                     │
    │            │          │          │          │moss2ep   │                     │
    │            │          │          │          │oea75cu   │                     │
    │            │          │          │          │oea77cu   │                     │
    │            │          │          │          │oea78cu   │                     │
    │            │          │          │          │oea91cu   │                     │
    │            │          │          │          │oea92cu   │                     │
    │            │          │          │          │oea93cu   │                     │
    │            │          │          │          │oea94cu   │                     │
    │            │          │          │          │oea95cu   │                     │
    │            │          │          │          │oeacr     │                     │
    │            │          │          │          │oeacu     │                     │
    │            │          │          │          │oeare     │                     │
    │            │          │          │          │oeascre   │                     │
    │            │          │          │          │op_acce   │                     │
    │            │          │          │          │op_acci   │                     │
    │            │          │          │          │op_acep   │                     │
    │            │          │          │          │op_aice   │                     │
    │            │          │          │          │op_aici   │                     │
    │            │          │          │          │op_aiep   │                     │
    │            │          │          │          │op_cce    │                     │
    │            │          │          │          │op_cci    │                     │
    │            │          │          │          │op_cep    │                     │
    │            │          │          │          │op_evce   │                     │
    │            │          │          │          │op_evci   │                     │
    │            │          │          │          │op_evep   │                     │
    │            │          │          │          │op_iece   │                     │
    │            │          │          │          │op_ieci   │                     │
    │            │          │          │          │op_ieep   │                     │
    │            │          │          │          │op_lce    │                     │
    │            │          │          │          │op_lci    │                     │
    │            │          │          │          │op_lep    │                     │
    │            │          │          │          │op_mace   │                     │
    │            │          │          │          │op_maci   │                     │
    │            │          │          │          │op_maep   │                     │
    │            │          │          │          │op_rfce   │                     │
    │            │          │          │          │op_rfci   │                     │
    │            │          │          │          │op_rfep   │                     │
    │            │          │          │          │opebace   │                     │
    │            │          │          │          │opebaci   │                     │
    │            │          │          │          │opebaep   │                     │
    │            │          │          │          │opistce   │                     │
    │            │          │          │          │opistci   │                     │
    │            │          │          │          │opistep   │                     │
    │            │          │          │          │rpe771i   │                     │
    │            │          │          │          │rpe931i   │                     │
    │            │          │          │          │rpe941i   │                     │
    │            │          │          │          │rpe_22i   │                     │
    │            │          │          │          │rpe_33i   │                     │
    │            │          │          │          │rpece     │                     │
    │            │          │          │          │rpecpci   │                     │
    │            │          │          │          │saaagcr   │                     │
    │            │          │          │          │saaager   │                     │
    │            │          │          │          │saasscr   │                     │
    │            │          │          │          │saleser   │                     │
    │            │          │          │          │sasu3c    │                     │
    │            │          │          │          │sasuce    │                     │
    │            │          │          │          │sasuci    │                     │
    │            │          │          │          │sasueep   │                     │
    │            │          │          │          │sasuep    │                     │
    │            │          │          │          │siepecr   │                     │
    │            │          │          │          │sop_cer   │                     │
    │            │          │          │          │sop_ler   │                     │
    │            │          │          │          │sopaier   │                     │
    │            │          │          │          │sopever   │                     │
    │            │          │          │          │sopieer   │                     │
    │            │          │          │          │sopiser   │                     │
    │            │          │          │          │soprfer   │                     │
    │            │          │          │          │ssasucr   │                     │
    ├────────────┼──────────┼──────────┼──────────┼──────────┼─────────────────────┤
    │cec_n       │       176│   119 008│          │          │candidatures Ex&Co –n│
    ├────────────┼──────────┼──────────┼──────────┼──────────┼─────────────────────┤
    │cm          │         7│       521│cm_bis    │          │communes             │
    ├────────────┼──────────┼──────────┼──────────┼──────────┼─────────────────────┤
    │cnd         │        42│     4 282│          │          │candidatures OCEAN   │
    ├────────────┼──────────┼──────────┼──────────┼──────────┼─────────────────────┤
    │cp          │         3│     6 133│cp_bis    │          │codes postaux        │
    ├────────────┼──────────┼──────────┼──────────┼──────────┼─────────────────────┤
    │dec         │        91│     5 561│          │          │dir. examens-concours│
    ├────────────┼──────────┼──────────┼──────────┼──────────┼─────────────────────┤
    │dg          │         3│        34│dg_bis    │          │districts géo.       │
    ├────────────┼──────────┼──────────┼──────────┼──────────┼─────────────────────┤
    │dip         │         3│        76│          │          │diplômes = "eaq"     │
    ├────────────┼──────────┼──────────┼──────────┼──────────┼─────────────────────┤
    │dp          │         8│       106│dp_bis    │          │départements         │
    ├────────────┼──────────┼──────────┼──────────┼──────────┼─────────────────────┤
    │ea          │        40│     1 097│          │          │épreuves admission   │
    ├────────────┼──────────┼──────────┼──────────┼──────────┼─────────────────────┤
    │ea_n        │        40│    10 846│          │          │épreuves admission -n│
    ├────────────┼──────────┼──────────┼──────────┼──────────┼─────────────────────┤
    │eaq         │         4│        76│          │          │examen pour acquis   │
    ├────────────┼──────────┼──────────┼──────────┼──────────┼─────────────────────┤
    │ec          │       396│       153│ec_bis    │          │examens-concours     │
    ├────────────┼──────────┼──────────┼──────────┼──────────┼─────────────────────┤
    │ec_n        │       396│     1 461│          │          │examens-concours -n  │
    ├────────────┼──────────┼──────────┼──────────┼──────────┼─────────────────────┤
    │epr         │        20│     2 374│          │          │épreuves OCEAN       │
    ├────────────┼──────────┼──────────┼──────────┼──────────┼─────────────────────┤
    │et          │        36│    34 163│          │          │établissements       │
    ├────────────┼──────────┼──────────┼──────────┼──────────┼─────────────────────┤
    │exa         │         5│        82│          │          │examens OCEAN        │
    ├────────────┼──────────┼──────────┼──────────┼──────────┼─────────────────────┤
    │gr          │        14│     1 034│          │          │grades               │
    ├────────────┼──────────┼──────────┼──────────┼──────────┼─────────────────────┤
    │itrf        │        17│        93│          │          │ITRF                 │
    ├────────────┼──────────┼──────────┼──────────┼──────────┼─────────────────────┤
    │ln          │        17│        11│          │          │logname              │
    ├────────────┼──────────┼──────────┼──────────┼──────────┼─────────────────────┤
    │lv          │         3│         7│          │          │langues vivantes     │
    ├────────────┼──────────┼──────────┼──────────┼──────────┼─────────────────────┤
    │mat         │         2│     4 091│          │          │matières             │
    ├────────────┼──────────┼──────────┼──────────┼──────────┼─────────────────────┤
    │mj          │        23│     4 513│          │          │membres du jury      │
    ├────────────┼──────────┼──────────┼──────────┼──────────┼─────────────────────┤
    │mra         │         2│         8│          │          │motifs recul d'âge   │
    ├────────────┼──────────┼──────────┼──────────┼──────────┼─────────────────────┤
    │nat         │         2│        18│          │          │nationalités         │
    ├────────────┼──────────┼──────────┼──────────┼──────────┼─────────────────────┤
    │ne          │        13│       185│          │          │nature établissement │
    ├────────────┼──────────┼──────────┼──────────┼──────────┼─────────────────────┤
    │net         │        19│       148│          │          │candidatures internet│
    ├────────────┼──────────┼──────────┼──────────┼──────────┼─────────────────────┤
    │oc          │         2│        18│          │          │origine candidats    │
    ├────────────┼──────────┼──────────┼──────────┼──────────┼─────────────────────┤
    │opt         │         2│        62│          │          │options              │
    ├────────────┼──────────┼──────────┼──────────┼──────────┼─────────────────────┤
    │oral        │         9│        57│          │          │ordre oral           │
    ├────────────┼──────────┼──────────┼──────────┼──────────┼─────────────────────┤
    │os          │         2│        18│          │          │origines statutaires │
    ├────────────┼──────────┼──────────┼──────────┼──────────┼─────────────────────┤
    │pec         │        37│          │pec_bis   │          │personnels Ex&Co     │
    ├────────────┼──────────┼──────────┼──────────┼──────────┼─────────────────────┤
    │pec_n       │        37│    85 278│          │          │personnels Ex&Co     │
    ├────────────┼──────────┼──────────┼──────────┼──────────┼─────────────────────┤
    │pic         │        71│          │cic       │          │pré-inscr. cand.     │
    │            │          │          │pic_bis   │          │                     │
    ├────────────┼──────────┼──────────┼──────────┼──────────┼─────────────────────┤
    │pic_n       │        71│          │          │          │pré-inscr. cand. -n  │
    ├────────────┼──────────┼──────────┼──────────┼──────────┼─────────────────────┤
    │pim         │        38│     3 687│          │          │pré-inscr. MINITEL   │
    ├────────────┼──────────┼──────────┼──────────┼──────────┼─────────────────────┤
    │pim_n       │        36│          │          │          │pré-inscr. MINITEL -n│
    ├────────────┼──────────┼──────────┼──────────┼──────────┼─────────────────────┤
    │pj          │        26│          │          │          │planning jury        │
    ├────────────┼──────────┼──────────┼──────────┼──────────┼─────────────────────┤
    │pm          │         8│        21│          │          │pièces manquantes    │
    ├────────────┼──────────┼──────────┼──────────┼──────────┼─────────────────────┤
    │prf         │         2│        57│          │          │professions OCEAN    │
    ├────────────┼──────────┼──────────┼──────────┼──────────┼─────────────────────┤
    │qcm         │         2│        52│          │          │QCM : importation    │
    ├────────────┼──────────┼──────────┼──────────┼──────────┼─────────────────────┤
    │qjo         │         2│       280│          │          │questions jury oral  │
    ├────────────┼──────────┼──────────┼──────────┼──────────┼─────────────────────┤
    │rc          │         8│        13│          │          │refus à concourir    │
    ├────────────┼──────────┼──────────┼──────────┼──────────┼─────────────────────┤
    │sa          │         2│        16│          │          │situations admin.    │
    ├────────────┼──────────┼──────────┼──────────┼──────────┼─────────────────────┤
    │sg          │        54│         9│          │          │services gestion     │
    ├────────────┼──────────┼──────────┼──────────┼──────────┼─────────────────────┤
    │sh          │        15│          │          │          │suivi historique     │
    ├────────────┼──────────┼──────────┼──────────┼──────────┼─────────────────────┤
    │sh_n        │        15│          │          │          │suivi historique -n  │
    ├────────────┼──────────┼──────────┼──────────┼──────────┼─────────────────────┤
    │sp          │        10│          │          │          │salles/places        │
    ├────────────┼──────────┼──────────┼──────────┼──────────┼─────────────────────┤
    │spe         │         7│       186│ocean     │          │spécialités          │
    ├────────────┼──────────┼──────────┼──────────┼──────────┼─────────────────────┤
    │sys_c       │        13│       941│          │          │colonnes/dico données│
    ├────────────┼──────────┼──────────┼──────────┼──────────┼─────────────────────┤
    │sys_d       │         7│     1 030│          │ace       │dév. éditions        │
    │            │          │          │          │per       │dév. écrans          │
    │            │          │          │          │shl       │dév. shells          │
    │            │          │          │          │sql       │dév. requêtes sql    │
    ├────────────┼──────────┼──────────┼──────────┼──────────┼─────────────────────┤
    │sys_t       │         4│          │          │          │tables               │
    ├────────────┼──────────┼──────────┼──────────┼──────────┼─────────────────────┤
    │sysmenuitems│         5│    33 294│          │          │menu (items detail)  │
    ├────────────┼──────────┼──────────┼──────────┼──────────┼─────────────────────┤
    │sysmenus    │         2│     3 273│          │          │menu (items master)  │
    ├────────────┼──────────┼──────────┼──────────┼──────────┼─────────────────────┤
    │t_cm        │         2│         1│          │          │typologie communes   │
    ├────────────┼──────────┼──────────┼──────────┼──────────┼─────────────────────┤
    │tec         │        10│        16│          │          │typologie Ex&Co      │
    ├────────────┼──────────┼──────────┼──────────┼──────────┼─────────────────────┤
    │tj          │        35│       160│          │aa_1ctj   │travaux jury         │
    │            │          │          │          │aa_agtj   │                     │
    │            │          │          │          │aa_sdtj   │                     │
    │            │          │          │          │aa_sstj   │                     │
    │            │          │          │          │aacaatj   │                     │
    │            │          │          │          │aass2tj   │                     │
    │            │          │          │          │aasutj    │                     │
    │            │          │          │          │aatj      │                     │
    │            │          │          │          │agtltj    │                     │
    │            │          │          │          │ai_etj    │                     │
    │            │          │          │          │al_estj   │                     │
    │            │          │          │          │atl_atj   │                     │
    │            │          │          │          │atl_btj   │                     │
    │            │          │          │          │atl_ctj   │                     │
    │            │          │          │          │bbtj      │                     │
    │            │          │          │          │casutj    │                     │
    │            │          │          │          │catj      │                     │
    │            │          │          │          │egtj      │                     │
    │            │          │          │          │i_epetj   │                     │
    │            │          │          │          │icepctj   │                     │
    │            │          │          │          │icepetj   │                     │
    │            │          │          │          │icepptj   │                     │
    │            │          │          │          │icepvtj   │                     │
    │            │          │          │          │icheftj   │                     │
    │            │          │          │          │ie_e1tj   │                     │
    │            │          │          │          │ie_e2tj   │                     │
    │            │          │          │          │ie_e3tj   │                     │
    │            │          │          │          │ie_sttj   │                     │
    │            │          │          │          │ir_etj    │                     │
    │            │          │          │          │ir_itj    │                     │
    │            │          │          │          │mo_artj   │                     │
    │            │          │          │          │mo_ctj    │                     │
    │            │          │          │          │mo_sstj   │                     │ 
    │            │          │          │          │moebatj   │                     │
    │            │          │          │          │mop_ctj   │                     │
    │            │          │          │          │moss2tj   │                     │
    │            │          │          │          │oeatj     │                     │
    │            │          │          │          │op_actj   │                     │
    │            │          │          │          │op_aitj   │                     │
    │            │          │          │          │op_btj    │                     │
    │            │          │          │          │op_ctj    │                     │
    │            │          │          │          │op_evtj   │                     │
    │            │          │          │          │op_ietj   │                     │
    │            │          │          │          │op_ltj    │                     │
    │            │          │          │          │op_matj   │                     │
    │            │          │          │          │op_rftj   │                     │
    │            │          │          │          │opebatj   │                     │
    │            │          │          │          │opisttj   │                     │
    │            │          │          │          │rpetj     │                     │
    │            │          │          │          │saaagtj   │                     │
    │            │          │          │          │saasstj   │                     │
    │            │          │          │          │salestj   │                     │
    │            │          │          │          │sasuetj   │                     │
    │            │          │          │          │sasutj    │                     │
    │            │          │          │          │siepetj   │                     │
    │            │          │          │          │sop_ctj   │                     │
    │            │          │          │          │sop_ltj   │                     │
    │            │          │          │          │sopaitj   │                     │
    │            │          │          │          │sopevtj   │                     │
    │            │          │          │          │sopietj   │                     │
    │            │          │          │          │sopistj   │                     │
    │            │          │          │          │spebatj   │                     │
    │            │          │          │          │ssasutj   │                     │
    ├────────────┼──────────┼──────────┼──────────┼──────────┼─────────────────────┤
    │tj_n        │        35│    37 122│          │          │travaux jury -n      │
    ├────────────┼──────────┼──────────┼──────────┼──────────┼─────────────────────┤
    │tmp         │        22│        55│          │          │temporaire           │
    ├────────────┼──────────┼──────────┼──────────┼──────────┼─────────────────────┤
    │tmp_hf      │        28│         1│          │          │tmp hommes/femmes    │
    ├────────────┼──────────┼──────────┼──────────┼──────────┼─────────────────────┤
    │tmp_nd      │        52│         1│          │          │tmp niveau diplôme   │
    ├────────────┼──────────┼──────────┼──────────┼──────────┼─────────────────────┤
    │tmp_nh      │        28│        91│          │          │tmp hiérarchique     │
    ├────────────┼──────────┼──────────┼──────────┼──────────┼─────────────────────┤
    │tmp_os      │        94│         1│          │          │tmp origine statut   │
    ├────────────┼──────────┼──────────┼──────────┼──────────┼─────────────────────┤
    │tmp_ta      │        46│         1│          │          │tmp tranches d'âge   │
    ├────────────┼──────────┼──────────┼──────────┼──────────┼─────────────────────┤
    │uad         │         2│        39│          │          │unité administrative │
    ├────────────┼──────────┼──────────┼──────────┼──────────┼─────────────────────┤
    │ut          │         8│       993│          │          │unités de trait.     │
    └────────────┴──────────┴──────────┴──────────┴──────────┴─────────────────────┘
    
    ┌────────────┬──────────┬──────────┬──────────┬──────────┬─────────────────────┐
    │   TABLES   │ COLONNES │ RANGÉES  │SYNONYMES │   VUES   │         NOMS        │
    ├────────────┼──────────┼──────────┼──────────┼──────────┼─────────────────────┤
    │          69│     2 470│   363 683│         9│       194│                     │
    └────────────┴──────────┴──────────┴──────────┴──────────┴─────────────────────┘
    6ème partie : Références croisées TABLES/CHAMPS
    Toujours dans mes archives, je retrouve un état intéressant que j’ai réalisé pour comprendre une Base de Données CONCOURS qui ne m’appartient pas. Dans cette BDD, il y a une table avec le nom des champs en clair, soit l’équivalent de ma table sys_c citée précdemment, sauf que tous les noms de champs n’y sont pas renseignés (691 sur 796). Comme pour l’état récapitulatif précédent, cet état exploite bien sûr les tables système.

    La même colonne pouvant être référencée dans plusieurs tables avec un type et/ou une longueur différente(s), un "!" repère ces incohérences.
    À noter, concernant les noms de tables et de champs de cette BDD, que les développeurs ont opté pour des noms ne dépassant pas 7 caractères. Tous les noms de champs sont composés de deux fois trois lettres séparées par un underscore.

    Ci-dessous, un extrait de cet état (table a_nex) montre que le champ « cod-exa » de cette table « a_nex » est également cité dans les tabes afc_val, aff_spe, etc.

    BDD - Table a_nex - le 6 Juin 2006
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    ┌──────────┬──────────┬──────────────────────────────────────┬────────────────────────┬─┐
    │  tables  │ colonnes │               libellés               │     type-longueur      │!│
    └──────────┴──────────┴──────────────────────────────────────┴────────────────────────┴─┘
    ┌──────────┬──────────┬──────────────────────────────────────┬────────────────────────┬─┐
    │afc_val   │cod_exa   │CODE EXAMEN                           │char(3)                 │ │
    │aff_spe   │cod_exa   │CODE EXAMEN                           │char(3)                 │ │
    │ano_ce2   │cod_exa   │CODE EXAMEN                           │char(3)                 │ │
    │cnd       │cod_exa   │CODE EXAMEN                           │char(3)                 │ │
    │cnd_epr   │cod_exa   │CODE EXAMEN                           │char(3)                 │ │
    │csg       │cod_exa   │CODE EXAMEN                           │char(3)                 │ │
    │dat_suj   │cod_exa   │CODE EXAMEN                           │char(3)                 │ │
    │dci       │cod_exa   │CODE EXAMEN                           │char(3)                 │ │
    │dci_grd   │cod_exa   │CODE EXAMEN                           │char(3)                 │ │
    │epr       │cod_exa   │CODE EXAMEN                           │char(3)                 │ │
    │epr_dco   │cod_exa   │CODE EXAMEN                           │char(3)                 │ │
    │epr_epr   │cod_exa   │CODE EXAMEN                           │char(3)                 │ │
    │epr_grp   │cod_exa   │CODE EXAMEN                           │char(3)                 │ │
    │epr_lml   │cod_exa   │CODE EXAMEN                           │char(3)                 │ │
    │epr_men   │cod_exa   │CODE EXAMEN                           │char(3)                 │ │
    │epr_not   │cod_exa   │CODE EXAMEN                           │char(3)                 │ │
    │epr_org   │cod_exa   │CODE EXAMEN                           │char(3)                 │ │
    │eta_opt   │cod_exa   │CODE EXAMEN                           │char(3)                 │ │
    │eta_spe   │cod_exa   │CODE EXAMEN                           │char(3)                 │ │
    │exa       │cod_exa   │CODE EXAMEN                           │char(3)                 │ │
    │fma       │cod_exa   │CODE EXAMEN                           │char(3)                 │ │
    │gen_org   │cod_exa   │CODE EXAMEN                           │char(3)                 │ │
    │grp       │cod_exa   │CODE EXAMEN                           │char(3)                 │ │
    │lml       │cod_exa   │CODE EXAMEN                           │char(3)                 │ │
    │lml_mlo   │cod_exa   │CODE EXAMEN                           │char(3)                 │ │
    │lop       │cod_exa   │CODE EXAMEN                           │char(3)                 │ │
    │mat_fma   │cod_exa   │CODE EXAMEN                           │char(3)                 │ │
    │mef_spe   │cod_exa   │CODE EXAMEN                           │char(3)                 │ │
    │opt       │cod_exa   │CODE EXAMEN                           │char(3)                 │ │
    │par       │cod_exa   │CODE EXAMEN                           │char(3)                 │ │
    │rat_geo   │cod_exa   │CODE EXAMEN                           │char(3)                 │ │
    │reg       │cod_exa   │CODE EXAMEN                           │char(3)                 │ │
    │spe       │cod_exa   │CODE EXAMEN                           │char(3)                 │ │
    │spe_acq   │cod_exa   │CODE EXAMEN                           │char(3)                 │ │
    │spe_grd   │cod_exa   │CODE EXAMEN                           │char(3)                 │ │
    │spe_par   │cod_exa   │CODE EXAMEN                           │char(3)                 │ │
    │spe_ran   │cod_exa   │CODE EXAMEN                           │char(3)                 │ │
    │suj       │cod_exa   │CODE EXAMEN                           │char(3)                 │ │
    │tca       │cod_exa   │CODE EXAMEN                           │char(3)                 │ │
    │typ_can   │cod_exa   │CODE EXAMEN                           │char(3)                 │ │
    │typ_eta   │cod_exa   │CODE EXAMEN                           │char(3)                 │ │
    │uni       │cod_exa   │CODE EXAMEN                           │char(3)                 │ │
    │          │typ_nex   │TYPE DE NOMENCLATURE EXAMEN           │char(3)                 │ │
    │          │cod_nex   │CODE DE NOMENCLATURE EXAMEN           │char(4)                 │ │
    │          │ind_nex   │INDICATEUR MAJ LOCALE NOMENCLA        │char(1)                 │ │
    └──────────┴──────────┴──────────────────────────────────────┴────────────────────────┴─┘
    7ème partie : Conclusion
    Pour les addicts du MCD, il suffit d’affecter une étiquette logique de 2 à 5 caractères à chaque entité, étiquette logique (moins restrictive qu’un trigramme, souvent des initiales) qui deviendra le nom de la table dans la BDD.

    • Étiquette logique-nom de table assure la corrélation entre le MCD et la BDD.
    • La typologie de l’entité (car on ne parle pas de table au niveau du MCD) reste, si vraiment indispensable au concepteur, une information du MCD.
    • Le trigramme devenu inutile disparait,
    • Plus besoin de noms mnémotechniques-concaténés-préfixés-suffixés dans la BDD et les développements,
    • Plus besoin d’alias dans les requêtes,
    • Plus de charge mentale autoalimentée,
    • Tout devient plus clair, évident.

    Étonnant, non ?... Évidemment, je plaisante, je ne cherche à convaincre personne, seulement à montrer une autre façon de voir les choses.

    Vous pouvez reprendre vos activités normales avec vos typologies de tables, d’attributs, vos trigrammes, alias, vues, etc.
    ________________________________________

    PS : Dommage qu’il n’existe pas un sous-forum SGBD généraliste car on trouve également ces sujets de discussion disséminés dans d’autres sous-forums plus spécifiques :

    Dernière modification par Invité ; 10/12/2018 à 11h59. Motif: Ajout d'une partie : Références croisées TABLES/CHAMPS

  10. #10
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Le gros truc sur lequel je ne suis pas d'accord :
    Plus de charge mentale autoalimentée,
    Tout devient plus clair, évident.
    Peut-être que c'est votre expérience mais si j'avais à utiliser votre BDD, je ne saurais pas d'emblée ce que veut dire "cea", par exemple.

    Je n'ai pas de charge mentale non plus avec mon système de nommage, justement parce qu'il est mnémotechnique et donc clair.
    Je peux écrire les requêtes quasiment sans regarder le modèle de données, tellement cette méthode de nommage est devenu intuitive. Et je peux lire mes requêtes, même longtemps après les avoir écrites, comme je lis une phrase, sans avoir besoin du dictionnaire (de données).


    Ensuite, un autre détail qui m'a choqué :
    Je ne savais pas non plus que l’on pouvait créer des views rassemblant des champs de plusieurs tables. Cela dit, je ne me sens pas du tout frustré de m’être contenté pendant 17 ans de views sur une seule table. Cela doit avoir une utilité puisque ça existe mais elle m’échappe.
    Je pense le contraire : À quoi sert de faire une vue sur une seule table alors qu'on peut interroger directement la table ?
    OK, ça peut être une question de droit d'utilisation (GRANT PRIVILEGE) mais à part ça, le seul intérêt éventuel que je vois et qui n'est pas le cas le plus fréquent, c'est de programmer des colonnes calculées (pourcentages, âge ou ancienneté...).

    L'intérêt des vues est justement de pouvoir interroger plusieurs tables en ayant l'impression d'en interroger qu'une seule. La vue sera plus fidèle à la vision métier de ce que l'on représente : une vue pour les salariés, une vue pour les contacts clients... qui utilisent toutes la table des personnes physiques.

    À moins qu'on doivent comprendre de votre discours sur le développement rapide sans modélisation que vous avez des tables indépendantes pour des concepts voisins et qu'ainsi, par exemple, une personne physique avec son nom et son prénom usuels et d'autres données la caractérisant soit présente dans la table des employés, des chefs de service, des membres du comité d'entreprise et que sais-je encore... Autrement dit que vous soyez un adepte de la redondance des données avec tous les risques que ça suppose en terme de cohérence de données...

    Tant que votre système fonctionne et que c'est vous qui le maîtrisez, tout va bien. Mais je ne voudrais pas avoir à intervenir sur votre BDD ! Rien que de voir que vous avez 205 tables pour un système de formation continue me laisse songeur...
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  11. #11
    Invité
    Invité(e)
    Par défaut Il n’y a pas qu’un seul SGBD, qu’une seule façon de développer.
    Citation Envoyé par CinePhil Voir le message
    Je n'ai pas de charge mentale non plus avec mon système de nommage, justement parce qu'il est mnémotechnique et donc clair.
    C’est de la mauvaise foi.

    Ce n’est pas pareil de décrypter un nom de table composé de mnémoniques concaténés entre un préfixe et un suffixe que de lire un petit mnémonique de 2 à 5 caractères. L’esprit est fatalement sollicité à la lecture/écriture du préfixe et du suffixe. Si ce n’est pas le cas, cela voudrait dire qu’ils sont inutiles. Sur le plan performance, il suffit de chronométrer l’écriture d’une dizaine de fois d’un tel nom de table avec une dizaine de fois 2 à 5 caractères. Le rapport doit être de l’ordre de 3 à 5 contre 1. Cela impacte forcément la charge mentale. Sur un petit SQL, j’ai calculé précédemment qu’il y avait un rapport de 2 contre 1 en défaveur de ce type de nommage. Et je ne parle pas de la présentation, de la mise-en-page des lignes de codes, autre source de fatigue mentale.

    Je note par ailleurs que le suffixe du nom de table (un trigramme) se répète en tant que préfixe des noms de champs. C’est comme si le concepteur contruisait une entité-maison et rappelait dans chaque pièce-attribut l’adresse de la maison. C’est sûr que le développeur ne risque pas de se perde en passant d’une pièce à l’autre, il peut vérifier qu’il habite au même endroit qu’elle que soit la pièce où il se trouve.

    Lorque je lis le nom d’un identifiant XXX_IdXXXXXXX_XXX, je me revois 40 ans en arrière sur les bancs de l’IUT. L’enseignant l’écrit au tableau mais c’est une forme pédagogique pour faire passer son message dans l’instant. Il n’y a donc aucune différence entre la forme pédagogique, la forme conceptuelle et la forme développement, aucune réflexion en termes de performance.

    Cela dit encore une fois, je n’interviens pas dans cette dicussion pour imposer ma vision des choses mais pour montrer qu’il en existe d’autres en argumentant mes choix et en proposant des exemples concrets.

    Citation Envoyé par CinePhil Voir le message
    Si j'avais à utiliser votre BDD, je ne saurais pas d'emblée ce que veut dire "cea", par exemple.
    cea = candidatures épreuve d'admission.

    Est-ce mieux, un nom de table "te_canepad_cea" que simplement "cea" ?
    Est-ce mieux, un nom de champ "te_canepad_cea.cea_id_cannepad" que simplement "cea.n_cea" ?

    C’est un mauvais procès. On n’intervient rarement d’emblée dans une BDD. Et quand bien même, ce serait le cas, tout est indiqué dans la BDD. Il suffit de s’intéresser un tant soit peu au sujet et si un développeur n’est pas capable de mémoriser une centaine de noms de 2 à 5 caractères, il vaut mieux qu’il fasse un autre métier.

    Il se trouve toutefois que j’ai eu à intervenir d’emblée dans une BDD créée par d’autres dévéloppeurs qui ont fait des choix de nommage un peu similaires aux miens. Je l’évoque dans ma 6ème partie : Référence croisées TABLES/CHAMPS. J’ai très bien compris leur démarche et trouvé les tables qui m’étaient nécessaires.

    Un autre exemple de nommage : Noms de table et noms de champs de la forme "XXX_XXX"

    Ci-joint un SQL écrit il y a une douzaine d'années, concernant précisément la BDD sur laquelle j'ai été amené à m'intéresser "d'emblée" pour sauver une situation. Ce SQL montre deux choses, d'une part que je n'ai pas eu besoin de créer de views et d'autre part que les développeurs de cette BDD ont fait un choix de noms de champs particulier de la forme "XXX_XXX". La plupart des noms de tables sont également composés de la même façon.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    267
    268
    269
    270
    271
    272
    273
    274
    275
    276
    277
    278
    279
    280
    281
    282
    283
    284
    285
    286
    287
    288
    289
    290
    291
    292
    293
    294
    {---------------------------------------------------------------------------}
    {
    LGE_lp.sql
    
    LGE_lp.txt : EXTRACTION DES ADMIS SUR LA LISTE PRINCIPALE POUR L'IUFM
    }
    {---------------------------------------------------------------------------}
    {
    SQL de précaution en cas de run accidentel
    }
    {---------------------------------------------------------------------------}
    {
    select rien
    from   rien;
    }
    {---------------------------------------------------------------------------}
    {
    Calcul de la note globale à partir de la note de chacun des 2 groupes d'épreuves
    
    Extraction d'informations liées au même conditionnement
    afin de simplifier le dernier SQL de création du fichier d'extraction.
    }
    {---------------------------------------------------------------------------}
    
    select        unique
    {NUM_CAN}     cnd.num_can       num_can, {NUMERO CANDIDAT                      }
          sum(cnd_grp.pts_sai)      pts_sai, {TOTAL DE POINTS SAISIS               }
    {DEC2   } cnd_grp.dci_sai       dci_sai, {DECISION GROUPE 2                    }
    {LIB_DC2}     dci.lbl_dci       lbi_dci, {LIBELLE DECISION GROUPE 2            }
    {DEPX   } cnd_exe.dep_exe       dep_exe, {DEPARTEMENT D'EXERCICE               }
    {LIB_PRF}   x_nge.lbl_nge       lbl_nge  {LIBELLE PROFESSION CANDIDAT          }
    
    from          cnd,
                  dci,
              cnd_grp,
    outer     cnd_exe,
    outer       x_nge
    
    where         cnd.cod_exa = "LGE"
    and           cnd.cod_spe = "CERP1"
    and           cnd.eta_can = "I"
    and           cnd.num_can = cnd_grp.num_can
    and           cnd.num_can = cnd_exe.num_can
    and           cnd.cod_prf =   x_nge.cod_nge
    
    and       cnd_grp.cod_grp = "2"
    and       cnd_grp.dci_sai = "A"
    and       cnd_grp.dci_sai =     dci.cod_dci
    
    and           dci.cod_exa = "LGE"
    
    group by      cnd.num_can,
              cnd_grp.dci_sai,
                  dci.lbl_dci,
              cnd_exe.dep_exe,
                x_nge.lbl_nge
    
    order by      cnd.num_can
    
    into temp     rpe;
    
    {---------------------------------------------------------------------------}
    {
    Département de nomination
    Rang de nomination
    }
    {---------------------------------------------------------------------------}
    
    select        unique
                  rpe.num_can  V200_num_can,
              cnd_voe.cod_uad  V200_cod_uad,
              cnd_voe.rng_nom  V200_rng_nom
              
    from          rpe,
              cnd_voe
    
    where         rpe.num_can  = cnd_voe.num_can
    
    and       cnd_voe.rng_nom is not null
    
    into temp V200;
    
    {---------------------------------------------------------------------------}
    {
    Voeu 1
    }
    {---------------------------------------------------------------------------}
    
    select        unique
                  rpe.num_can  V201_num_can,
              cnd_voe.cod_uad  V201_cod_uad
              
    from          rpe,
              cnd_voe
    
    where         rpe.num_can = cnd_voe.num_can
    
    and       cnd_voe.num_voe = 1
    
    into temp V201;
    
    {---------------------------------------------------------------------------}
    {
    Voeu 2
    }
    {---------------------------------------------------------------------------}
    
    select        unique
                  rpe.num_can  V202_num_can,
              cnd_voe.cod_uad  V202_cod_uad
              
    from          rpe,
              cnd_voe
    
    where         rpe.num_can = cnd_voe.num_can
    
    and       cnd_voe.num_voe = 2
    
    into temp V202;
    
    {---------------------------------------------------------------------------}
    {
    Voeu 3
    }
    {---------------------------------------------------------------------------}
    
    select        unique
                  rpe.num_can  V203_num_can,
              cnd_voe.cod_uad  V203_cod_uad
              
    from          rpe,
              cnd_voe
    
    where         rpe.num_can = cnd_voe.num_can
    
    and       cnd_voe.num_voe = 3
    
    into temp V203;
    
    {---------------------------------------------------------------------------}
    {
    205 : 0001 = ALLEMAND
          0002 = ANGLAIS
          0007 = ESPAGNOL
          0008 = ITALIEN
          0010 = PORTUGAIS
          0030 = ARABE LITTERAL
    
          3178 = ARTS PLATIQUES (ENTRETIEN)
    
          1647 = MUSIQUE:VOIX ACCOMPAGNEE
          1648 = MUSIQUE:VOIX NON ACCOMPAGNEE
          1649 = MUSIQUE:INSTRUMENT ACCOMPAGNEE
          1650 = MUSIQUE:INSTRUMENT NON ACCOMPAGNEE
    }
    {---------------------------------------------------------------------------}
    
    select        unique
                  rpe.num_can  E205_num_can,
                x_mat.cod_mat  E205_cod_mat,
                x_mat.lbl_mat  E205_lbl_mat,
              cnd_epr.not_epr  E205_not_epr
              
    from          rpe,
              cnd_epr,
                x_mat
    
    where         rpe.num_can = cnd_epr.num_can
    
    and       cnd_epr.cod_epr  = "205"
    and       cnd_epr.cod_mat  =   x_mat.cod_mat
    and      (cnd_epr.cod_mat  = "0001"                     { ALLEMAND             }
     or       cnd_epr.cod_mat  = "0002"                     { ANGLAIS              }
     or       cnd_epr.cod_mat  = "0007"                     { ESPAGNOL             }
     or       cnd_epr.cod_mat  = "0008"                     { ITALIEN              }
     or       cnd_epr.cod_mat  = "0010"                     { PORTUGAIS            }
     or       cnd_epr.cod_mat  = "0030")                    { ARABE LITTERAL       }
    
    into temp E205;
    
    {---------------------------------------------------------------------------}
    {
    Création du fichier d'extraction
    }
    {---------------------------------------------------------------------------}
    
    unload to LGE_lp.txt
    
    {---------------------------------------------------------------------------}
    { Noms des champs extraits qui deviendront les noms des colonnes sous Excel }
    {                                                                           }
    { Ajout d'un espace au début de chaque nom de champ afin qu'à l'issue du tri}
    { cet item soit le premier du fichier                                       }
    {---------------------------------------------------------------------------}
    
    select " Matricule",
           " NUMEN",
           " Civilité",
           " Nom de naissance",
           " Nom d'usage",
           " Prénom(s)",
           " Adresse",
           " Complément d'adresse",
           " Lieu-dit",
           " Code postal",
           " Lieu distribué",
           " Date de naissance",
           " Enfants",
           " Code profession",
           " Libellé profession",
           " Situation de famille",
           " Situation militaire",
           " UAD de gestion",
           " Date de MàJ dossier",
           " Code décision",
           " Libellé décision",
           " Rang classement",
           " Rang nomination",
           " Département nomination",
           " Voeu 1",
           " Voeu 2",
           " Voeu 3",
           " Département d'exercice",
           " Code langue",
           " Langue",
           " Note"
    
    from   x_mat
    
    where  xmat.cod_mat = "0000"
    
    union
    
    select        unique
    
    {NUM_MTR}     cnd.num_mtr  E200_num_mtr, {NUMERO MATRICULE                     }
    {NUM_MEN}     cnd.num_men  E200_num_men, {NUMERO EDUCATION NATIONALE           }
    {COD_TIT}     cnd.cod_tit  E200_cod_tit, {CODE TITRE                           }
    {NMN_CAN}     cnd.nmn_can  E200_nmn_can, {NOM DE NAISSANCE DU CANDIDAT         }
    {NOM_CAN}     cnd.nom_can  E200_nom_can, {NOM USUEL DU CANDIDAT                }
    {PRE_CAN}     cnd.pre_can  E200_pre_can, {PRENOM DU CANDIDAT                   }
    {ADR_CAN}     cnd.adr_can  E200_adr_can, {MENTION DE DISTRIBUTION DU CANDIDAT  }
    {AD2_CAN}     cnd.ad2_can  E200_ad2_can, {VOIE (ADRESSE 2 DU CANDIDAT)         }
    {LDI_CAN}     cnd.ldi_can  E200_ldi_can, {LIEU-DIT DU CANDIDAT                 }
    {CPO_CAN}     cnd.cpo_can  E200_cpo_can, {CODE POSTAL DU CANDIDAT              }
    {CMN_CAN}     cnd.cmn_can  E200_cmn_cal, {LOCALITE D'ACHEMINEMENT DU CANDIDAT  }
    {DAT_NAI}     cnd.dat_nai  E200_dat_nai, {DATE DE NAISSANCE DU CANDIDAT        }
    {NBR_ENF}     cnd.nbr_enf  E200_nbr_enf, {NOMBRE D'ENFANTS                     }
    {COD_PRF}     cnd.cod_prf  E200_cod_prf, {PROFESSION DU CANDIDAT               }
    {LIB_PRF}{  x_nge.lbl_nge}  rpe.lbl_nge, {LIBELLE PROFESSION CANDIDAT          }
    {COD_FAM}     cnd.cod_fam  E200_cod_fam, {SITUATION DE FAMILLE DU CANDIDAT     }
    {COD_SML}     cnd.cod_sml  E200_cod_sml, {SITUATION MILITAIRE  DU CANDIDAT     }
    
    {UAD_GES}     cnd.uad_ges  E200_uad_ges, {UAD DE GESTION DU CANDIDAT           }
    {DAT_MDO}     cnd.dat_mdo  E200_dat_mdo, {DATE DE MAJ DU DOSSIER D'INSCRIPTION }
    {LIB_SES}{    ses.ide_ses}{E200_ide_ses,}{SESSION                              }
    
    {TOT_PTS}{cnd_grp.pts_sai}{ rpe.pts_sai,}{TOTAL DE POINTS FINAL                }
    {DEC2   }{cnd_grp.dci_sai}  rpe.dci_sai, {DECISION GROUPE 2                    }
    {LIB_DC2}{    dci.lbl_dci}  rpe.lbi_dci, {LIBELLE DECISION GROUPE 2            }
    {RNG_CLR}     cnd.rng_clr  E200_rng_clr, {RANG DE CLASSEMENT R                 }
    {RGNO   }{cnd_voe.rng_nom} V200_rng_nom, {RANG DE NOMINATION                   }
    {UADN   }{cnd_voe.cod_uad} V200_cod_uad, {DEPARTEMENT DE NOMINATION            }
    
    {COD_VOE}{cnd_voe.cod_uad} V201_cod_uad, {VOEU 1                               }
    {COD_VOE}{cnd_voe.cod_uad} V202_cod_uad, {VOEU 2                               }
    {COD_VOE}{cnd_voe.cod_uad} V203_cod_uad, {VOEU 3                               }
    
    {DEPX   }{cnd_exe.dep_exe}  rpe.dep_exe, {DEPARTEMENT D'EXERCICE               }
    
    {COD_MAT}{  x_mat.cod_mat} E205_cod_mat, {MATIERE DE L'EPREUVE                 }
    {LIB_MAT}{  x_mat.lbl_mat} E205_lbl_mat, {LIBELLE MATIERE EPREUVE              }
    {NOT_EPR}{cnd_epr.not_epr} E205_not_epr  {NOTE DE L'EPREUVE                    }
    
    from          rpe,
                  cnd,
    outer        V200,
                 V201,
                 V202,
                 V203,
    outer        E205
    
    where         rpe.num_can =     cnd.num_can
    and           rpe.num_can =    V200_num_can
    and           rpe.num_can =    V201_num_can
    and           rpe.num_can =    V202_num_can
    and           rpe.num_can =    V203_num_can
    and           rpe.num_can =    E205_num_can
    
    order by  4,                 { E200_nmn_can, }
              6;                 { E200_pre_can; }
    
    {---------------------------------------------------------------------------}
    Citation Envoyé par CinePhil Voir le message
    À quoi sert de faire une vue sur une seule table alors qu'on peut interroger directement la table ?

    À moins qu'on doive comprendre de votre discours sur le développement rapide sans modélisation que vous avez des tables indépendantes pour des concepts voisins… Autrement dit que vous soyez un adepte de la redondance des données avec tous les risques que ça suppose en termes de cohérence de données...
    Cela sert tout simplement à ne permettre l’accès via un écran ou un SQL qu’à une partie de cette table. Les gestionnaires ne saisissent aucun code. Ils ignorent même les codes de leurs concours. Ils « rentrent » dans un concours par un item de leur menu ; à partir de là, tous les traitements fonctionnent sans aucune saisie de code.

    Il n’y a pas de redondance là-dedans. Bien au contraire justement, il n’y a qu’une seule table et les views permettent de n’en voir que la partie qui nous intéresse.

    Exemple Examens-Concours :

    Table cec (candidatures examens-concours) : Une seule table mais 126 vues.
    Table tj (travaux jury) : une seule table mais 63 views.

    Ci-après, un SQL de création de 5 views pour le concours « SASU » (Secrétaire Administratif)…

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    {------------------------------------------------------------------------------}
    {
    view_sasu
    }
    {------------------------------------------------------------------------------}
    {
    drop view sasuce;
    drop view sasuci;
    drop view sasu3c;
    drop view sasuep;
    drop view sasutj;
    }
    {------------------------------------------------------------------------------}
    
    create view sasuce
           as select * from cec
           where c_ec    = "SASU"
           and   t_ec    = "CE"
           with check option;
    
    grant insert, update, select, delete on sasuce to public;
    
    create view sasuci
           as select * from cec
           where c_ec    = "SASU"
           and   t_ec    = "CI"
           with check option;
    
    grant insert, update, select, delete on sasuci to public;
    
    create view sasu3c
           as select * from cec
           where c_ec    = "SASU"
           and   t_ec    = "3C"
           with check option;
    
    grant insert, update, select, delete on sasu3c to public;
    
    create view sasuep
           as select * from cec
           where c_ec    = "SASU"
           and   t_ec    = "EP"
           with check option;
    
    grant insert, update, select, delete on sasuep to public;
    
    create view sasutj
           as select * from tj
           where c_ec    = "SASU"
           with check option;
    
    grant insert, update, select, delete on sasutj to public;
    
    {------------------------------------------------------------------------------}
    Ci-après, un écran de saisie des notes utilisant la view « SASUCE » (Secrétaire Adminstratif Concours Externe)…

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    267
    268
    269
    270
    271
    272
    273
    274
    275
    276
    277
    278
    279
    280
    281
    282
    283
    284
    285
    286
    287
    288
    289
    290
    291
    292
    293
    294
    295
    296
    297
    298
    299
    300
    301
    302
    303
    304
    305
    306
    307
    308
    309
    310
    311
    312
    313
    314
    315
    316
    317
    318
    319
    320
    321
    322
    323
    324
    325
    326
    327
    328
    329
    330
    331
    332
    333
    334
    335
    336
    337
    338
    339
    340
    341
    342
    343
    344
    345
    346
    347
    348
    349
    350
    351
    352
    353
    354
    355
    356
    357
    358
    359
    360
    361
    362
    363
    364
    365
    366
    367
    368
    369
    370
    371
    372
    373
    374
    375
    376
    377
    378
    379
    380
    381
    382
    383
    384
    385
    386
    387
    388
    389
    390
    391
    392
    393
    {
    sasuce1    : SAISIE DES NOTES/20 DES ÉPREUVES D'ADMISSIBILITÉ
    AUTEUR     : IFA2377
    DATE       : 14 Avril 1992
    }
    
    database concours
    
    screen
    
    {
    ┌N+ d'anonymat  [A1    ]───────────────────────────────────────┬Ex&Co──────────┐
    │                                                              │[C_EC ][EC][AA]│
    ├──G───E───O───┬──Mini──┬Coef.┬Note/20┬N/20 * C┬(A)bsence──────┴───────────────┤
    │  1 - 1 -[A]  │[M1    ]│[CE1]│[E1   ]│[E1C   ]│[B] Note de synthèse           │
    │  1 - 2 -[C]  │[M2    ]│[CE2]│[E2   ]│[E2C   ]│[D] Dissertation               │
    ├──────────────┼────────┼─────┴───────┼────────┼(A)dmissible───────────────────┤
    │ADMISSIBILITÉ │[T1    ]│ TOTAL 1     │[EE    ]│[Y]                            │
    ├──────────────┼────────┼─────┬───────┼────────┼(A)bsence──────────────────────┤
    │  2 - 1 -[M]  │[N1    ]│[CO1]│[O1   ]│[O1C   ]│[N] Conversation               │
    │  2 - 1 -[O]  │[N2    ]│[CO2]│[O2   ]│[O2C   ]│[P][DO2                       ]│
    ├──────────────┼────────┼─────┴───────┼────────┤                               │
    │ADMISSION     │[T2    ]│ TOTAL 2     │[EO    ]│                               │
    ├──────────────┼────────┼─────────────┼────────┼(A)dmis┬─Liste─┬──Rang─┬Exaequo┤
    │DÉCISION JURY │[TP    ]│ TOTAL 1 + 2 │[TN    ]│[Z]    │  [W]  │ [RAN] │  [X]  │
    └──────────────┴────────┴─────────────┴────────┴───────┴───────┴───────┴───────┘
    }
    
    screen
    
    {
    ┌N° d'anonymat  [A1    ]───────────────────────────────────────┬Ex&Co──────────┐
    │                                                              │[C_EC ][EC][AA]│
    ├──G───E───O───┬──Mini──┬Coef.┬Note/20┬N/20 * C┬(A)bsence──────┴───────────────┤
    │  1 - 1 -[A]  │[M1    ]│[CE1]│[E1   ]│[E1C   ]│[B] Note de synthèse           │
    │  1 - 2 -[C]  │[M2    ]│[CE2]│[E2   ]│[E2C   ]│[D] Dissertation               │
    ├──────────────┼────────┼─────┴───────┼────────┼(A)dmissible───────────────────┤
    │ADMISSIBILITÉ │[T1    ]│ TOTAL 1     │[EE    ]│[Y]                            │
    ├──────────────┼────────┼─────┬───────┼────────┼(A)bsence──────────────────────┤
    │  2 - 1 -[M]  │[N1    ]│[CO1]│[O1   ]│[O1C   ]│[N] Conversation               │
    │  2 - 1 -[O]  │[N2    ]│[CO2]│[O2   ]│[O2C   ]│[P][DO2                       ]│
    ├──────────────┼────────┼─────┴───────┼────────┤   [CUP   ]                    │
    │ADMISSION     │[T2    ]│ TOTAL 2     │[EO    ]│                               │
    ├──────────────┼────────┼─────────────┼────────┼(A)dmis┬─Liste─┬──Rang─┬Exaequo┤
    │DÉCISION JURY │[TP    ]│ TOTAL 1 + 2 │[TN    ]│[Z]    │  [W]  │ [RAN] │  [X]  │
    └──────────────┴────────┴─────────────┴────────┴───────┴───────┴───────┴───────┘
    }
    
    end
    
    tables  sasuce
                ec
    
    attributes
    
    A1   =  sasuce.anonymat,upshift,right,reverse,noentry,noupdate,
                   comments="[<-] : Raccourci pour valider=[A]/invalider=[ ] les champs Absences";
    
    A    =  sasuce.option_11,upshift,reverse,noentry,noupdate;
    E1   =  sasuce.note_11,reverse,right,autonext;
    E1C  =  sasuce.note_11c,reverse,right,autonext;
    B    =  sasuce.absent_11,upshift,reverse,autonext,
                   include=(null, " ", "A");
    
    C    =  sasuce.option_12,upshift,reverse,noentry,noupdate;
    E2   =  sasuce.note_12,reverse,right,autonext;
    E2C  =  sasuce.note_12c,reverse,right,autonext;
    D    =  sasuce.absent_12,upshift,reverse,autonext,
                   include=(null, " ", "A");
    
    EE   =  sasuce.note_1,reverse,right,autonext;
    
    Y    =  sasuce.admis_1,upshift,reverse,noentry,noupdate,
                   include=(null, "A");
    
    M    =  sasuce.option_21,upshift,reverse,noentry,noupdate;
    O1   =  sasuce.note_21,reverse,right,autonext;
    O1C  =  sasuce.note_21c,reverse,right,autonext;
    N    =  sasuce.absent_21,upshift,reverse,autonext,
                   include=(null, " ", "A");
    
    O    =  sasuce.option_22,upshift,reverse,noentry,noupdate;
    O2   =  sasuce.note_22,reverse,right,autonext;
    O2C  =  sasuce.note_22c,reverse,right,autonext;
    P    =  sasuce.absent_22,upshift,reverse,autonext,
                   include=(null, " ", "A");
    DO2  =         displayonly type char;
    
    EO   =  sasuce.note_2,reverse,right,autonext;
    
    TN   =  sasuce.note_total,reverse,right,autonext;
    Z    =  sasuce.admis_2,upshift,reverse,noentry,noupdate,
                   include=(null, "A");
    
    W    =  sasuce.liste,upshift,reverse,noentry,noupdate,
                   include=(null, "P", "C"),
                   comments="Liste : [P]rincipale ou [C]omplÚmentaire";
    RAN  =  sasuce.rang,right,reverse,noentry,noupdate;
    X    =  sasuce.exaequo,upshift,reverse,right,autonext;
    
    C_EC =  sasuce.c_ec,upshift,reverse,noentry,noupdate;
         =      ec.c_ec,upshift,reverse,noentry,noupdate;
    EC   =  sasuce.t_ec,upshift,reverse,noentry,noupdate,
                   include =("CE", "CI", "CR", "CS", "CU", "CX", "EB", "EP"),
                   comments="[CE], [CI], [CR], [CS], [CU], [CX], [EB], [EP]";
         =      ec.t_ec,upshift,reverse,noentry,noupdate;
    AA   =  sasuce.s_ec,upshift,reverse,noentry,noupdate,
                   include=("00" to "99"),
                   comments="Session";
         =      ec.s_ec,upshift,reverse,noentry,noupdate;
    
    M1   =      ec.mini_11,right,reverse,noentry,noupdate;
    CE1  =      ec.coef_11,reverse,noentry,noupdate;
    
    M2   =      ec.mini_12,right,reverse,noentry,noupdate;
    CE2  =      ec.coef_12,reverse,noentry,noupdate;
    
    T1   =      ec.mini_1,right,reverse,noentry,noupdate;
    
    N1   =      ec.mini_21,right,reverse,noentry,noupdate;
    CO1  =      ec.coef_21,reverse,noentry,noupdate;
    
    N2   =      ec.mini_22,right,reverse,noentry,noupdate;
    CO2  =      ec.coef_22,reverse,noentry,noupdate;
    
    T2   =      ec.mini_2,right,reverse,noentry,noupdate;
    TP   =      ec.mini_total,right,reverse,noentry,noupdate;
    
    CUP  =         displayonly type char;
    
    INSTRUCTIONS
    
    composites *<      ec.c_ec,       ec.t_ec,       ec.s_ec >
                <  sasuce.c_ec,   sasuce.t_ec,   sasuce.s_ec >
    
    {  sasuce ---------------------------------------------------------------------}
    
    before remove of  sasuce
           abort;
    
    before editadd of  sasuce
           abort;
    
    before editupdate of  sasuce
           if A1 is null
           then abort
           else nextfield = E1;
    
    after  display of  sasuce
                           let DO2 = null
           if O = "A" then let DO2 = "Org. constit. et adm.     "
           if O = "B" then let DO2 = "Pb Eco. et Finances Pub.  "
           if O = "C" then let DO2 = "Histoire-Géographie       ";
    
    { Note 11 ---------------------------------------------------------------------}
    
    before editupdate of  sasuce.note_11
           let CUP = "1 -> 2";
    
    after  editupdate of  sasuce.note_11
           if   E1   is null
           then begin
                let  E1C = null
                let  EE  = 0
    
                if   E2C is not null then let EE  = (EE + E2C)
                end
    
           else begin
                if   E1   > 20
                then begin
                     let  E1C = null
                     let  EE  = 0
    
                     if   E2C is not null then let EE  = (EE + E2C)
    
                     nextfield   = E1
                     end
    
                else begin
                     let  E1C = (E1 * CE1)
                     let  EE  = 0
                     let  B   = null
    
                     if   E1C is not null then let EE  = (EE + E1C)
                     if   E2C is not null then let EE  = (EE + E2C)
                     end
                end
    
           if   EE  = 0
           and  E1 is null
           and  E2 is null
           then let EE = null
    
           if   EE  is null
           and  EO  is null
           then let TN = null
           else if   EE  is not null
                and  EO  is     null
                then let TN = (EE)
                else let TN = (EE + EO);
    
    { Note 11c --------------------------------------------------------------------}
    
    before editupdate of  sasuce.note_11c
           if   E1  is not null
           then nextfield = E2;
    
    after  editupdate of  sasuce.note_11c
           if   E1C  is null
           then begin
                let  E1  = null
                let  EE  = 0
    
                if   E2C is not null then let EE  = (EE + E2C)
                end
    
           else begin
                if   E1C  > (CE1 * 20)
                then begin
                     let  E1  = null
                     let  EE  = 0
    
                     if   E2C is not null then let EE  = (EE + E2C)
    
                     nextfield   = E1C
                     end
    
                else begin
                     let  E1  = (E1C / CE1)
                     let  EE  = 0
                     let  B   = null
    
                     if   E1C is not null then let EE  = (EE + E1C)
                     if   E2C is not null then let EE  = (EE + E2C)
                     end
                end
    
           if   EE  = 0
           and  E1 is null
           and  E2 is null
           then let EE = null
    
           if   EE  is null
           and  EO  is null
           then let TN = null
           else if   EE  is not null
                and  EO  is     null
                then let TN = (EE)
                else let TN = (EE + EO);
    
    { Absence 11 ------------------------------------------------------------------}
    
    before editupdate of  sasuce.absent_11
           if CUP = "2 -> 1"
           then nextfield = E1
           else if E1 is null
                then let B = "A"
                else nextfield = E2;
    
    after  editupdate of  sasuce.absent_11
           if B = " "
           then let B = null;
    
    { Note 12 ---------------------------------------------------------------------}
    
    before editupdate of  sasuce.note_12
           let CUP = "2 -> 1";
    
    after  editupdate of  sasuce.note_12
           if   E2   is null
           then begin
                let  E2C = null
                let  EE  = 0
    
                if   E1C is not null then let EE  = (EE + E1C)
                end
    
           else begin
                if   E2   > 20
                then begin
                     let  E2C = null
                     let  EE  = 0
    
                     if   E1C is not null then let EE  = (EE + E1C)
    
                     nextfield   = E2
                     end
    
                else begin
                     let  E2C = (E2 * CE2)
                     let  EE  = 0
                     let  D   = null
    
                     if   E1C is not null then let EE  = (EE + E1C)
                     if   E2C is not null then let EE  = (EE + E2C)
                     end
                end
    
           if   EE  = 0
           and  E1 is null
           and  E2 is null
           then let EE = null
    
           if   EE  is null
           and  EO  is null
           then let TN = null
           else if   EE  is not null
                and  EO  is     null
                then let TN = (EE)
                else let TN = (EE + EO);
    
    { Note 12c --------------------------------------------------------------------}
    
    before editupdate of  sasuce.note_12c
           if   E2  is not null
           then nextfield = exitnow;
    
    after  editupdate of  sasuce.note_12c
           if   E2C  is null
           then begin
                let  E2  = null
                let  EE  = 0
    
                if   E1C is not null then let EE  = (EE + E1C)
                end
    
           else begin
                if   E2C  > (CE2 * 20)
                then begin
                     let  E2  = null
                     let  EE  = 0
    
                     if   E1C is not null then let EE  = (EE + E1C)
    
                     nextfield   = E2C
                     end
    
                else begin
                     let  E2  = (E2C / CE2)
                     let  EE  = 0
                     let  D   = null
    
                     if   E1C is not null then let EE  = (EE + E1C)
                     if   E2C is not null then let EE  = (EE + E2C)
                     end
                end
    
           if   EE  = 0
           and  E1 is null
           and  E2 is null
           then let EE = null
    
           if   EE  is null
           and  EO  is null
           then let TN = null
           else if   EE  is not null
                and  EO  is     null
                then let TN = (EE)
                else let TN = (EE + EO);
    
    { Absence 12 ------------------------------------------------------------------}
    
    before editupdate of  sasuce.absent_12
           if E2 is null
           then let D = "A"
           else nextfield = exitnow;
    
    after  editupdate of  sasuce.absent_12
           if D = " "
           then let D = null;
    
    {------------------------------------------------------------------------------}
    
    before editupdate of  sasuce.note_1
           nextfield = exitnow;
    
    before editupdate of  sasuce.exaequo
           if B = "A"
           or D = "A"
           then begin
                if B = "A" then let B = null
                if D = "A" then let D = null
                end
           else begin
                if E1 is null then let B = "A"
                if E2 is null then let D = "A"
                end
    
           nextfield = E1;
    
    {-----------------------------------} end  {-----------------------------------}
    Citation Envoyé par CinePhil Voir le message
    L'intérêt des vues est justement de pouvoir interroger plusieurs tables en ayant l'impression d'en interroger qu'une seule.
    Pas besoin. On fait la même chose sans views. Passer par la création d’une view, c’est comme faire des nœuds au torchon avant de le mettre dans la machine à laver pour prouver que la lessive lave plus blanc que blanc ; le résultat est le même que sans les nœuds sauf qu’il faut faire les nœuds. Mais tout cela dépend certainement du SGBD utilisé.

    Citation Envoyé par CinePhil Voir le message
    Rien que de voir que vous avez 205 tables pour un système de formation continue me laisse songeur...
    Formation Continue :

    La formation continue d’une académie, c’est quatre services différents :

    • la gestion de la formation continue des personnels enseignants
    • la gestion de la formation continue des personnels administratifs
    • la gestion des stages nationaux
    • la création et le suivi des formations (cellule académique formation)

    Les views de la Formation continue servent essentiellement à distinguer le PAF du PNF (Plan Académique de Formation / Plan National de Formation).

    L’application gère 5 années, l’année en cours, l’année n +1, et les années n-1, n -2, n -3 et n -4. Cela multiplie donc par 6 une vingtaine de tables et par autant certains programmes ; mais il n’y a pas de création, c’est de la copie avec substitution des noms de tables, des noms de répertoires, etc.

    Il est possible en accédant à la BDD n -5 de remonter encore à 5 années antérieures.

    Bien que l’application ait été abandonnée en 2008-2009, les gestionnaires continuaient encore à utiliser certaines fonctionnalités il n’y a pas si longtemps (2015-2016).

    Ci-après, pour information, une liste des tables de ma BDD Formation Continue. Il s'agit des lignes d'information qui précèdent le SQL de création de la BDD...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    267
    268
    269
    270
    271
    272
    273
    {------------------------------------------------------------------------------}
    
    { ac    (académies) -----------------------------------------------------------}
    { act   (actions de formation KHEOPS) -----------------------------------------}
    { act_1 (actions de formation KHEOPS) -----------------------------------------}
    
    { af    (actions de formation) ------------------------------------------------}
    { af_1  (actions de formation) ------------------------------------------------}
    { af_2  (actions de formation) ------------------------------------------------}
    { af_3  (actions de formation) ------------------------------------------------}
    { af_4  (actions de formation) ------------------------------------------------}
    { af_9  (actions de formation) ------------------------------------------------}
    
    { alias (clones de la CAF) ----------------------------------------------------}
    {       (extraction FILE MAKER pour importation dans la table "uf") -----------}
    
    { am    (agglomérations multi-communales) -------------------------------------}
    { bb    (bilans budgétaires) --------------------------------------------------}
    
    { ca    (certificats administratifs) ------------------------------------------}
    { caf   (cellule académique formation) ----------------------------------------}
    {       (extraction FILE MAKER pour MàJ des codes GAIA de la table "af") ------}
    {       (objectif -> Bilans de formation DESCO) -------------------------------}
    
    { cde   (commande) ------------------------------------------------------------}
    { cde_1 (commande) ------------------------------------------------------------}
    { cde_2 (commande) ------------------------------------------------------------}
    { cde_3 (commande) ------------------------------------------------------------}
    { cde_4 (commande) ------------------------------------------------------------}
    { cde_9 (commande) ------------------------------------------------------------}
    { cde_l (commande ligne) ------------------------------------------------------}
    
    { cdf   (congés de formation) -------------------------------------------------}
    
    { cf    (candidatures formation) ----------------------------------------------}
    { cf_1  (candidatures formation) ----------------------------------------------}
    { cf_2  (candidatures formation) ----------------------------------------------}
    { cf_3  (candidatures formation) ----------------------------------------------}
    { cf_4  (candidatures formation) ----------------------------------------------}
    { cf_9  (candidatures formation) ----------------------------------------------}
    
    { ci    (candidatures individualisées) ----------------------------------------}
    { ci_1  (candidatures individualisées) ----------------------------------------}
    { ci_2  (candidatures individualisées) ----------------------------------------}
    { ci_3  (candidatures individualisées) ----------------------------------------}
    { ci_4  (candidatures individualisées) ----------------------------------------}
    { ci_9  (candidatures individualisées) ----------------------------------------}
    
    { cl    (communes limitrophes) ------------------------------------------------}
    { cm    (communes) ------------------------------------------------------------}
    { cp    (codes postaux) -------------------------------------------------------}
    { dc    (décisions candidatures) ----------------------------------------------}
    
    { df    (disciplines de formation) --------------------------------------------}
    { df_1  (disciplines de formation) --------------------------------------------}
    { df_2  (disciplines de formation) --------------------------------------------}
    { df_3  (disciplines de formation) --------------------------------------------}
    { df_4  (disciplines de formation) --------------------------------------------}
    { df_9  (disciplines de formation) --------------------------------------------}
    
    { dg    (districts géographique) ----------------------------------------------}
    { di_m  (disciplines poste/recrutement) ---------------------------------------}
    {       (extraction disciplines EPP pour mise à jour de la table "drdp")       }
    { div   (divisions) -----------------------------------------------------------}
    { dk    (diskettes - étiquettes) ----------------------------------------------}
    
    { dl    (dates et lieux) ------------------------------------------------------}
    { dl_1  (dates et lieux) ------------------------------------------------------}
    { dl_2  (dates et lieux) ------------------------------------------------------}
    { dl_3  (dates et lieux) ------------------------------------------------------}
    { dl_4  (dates et lieux) ------------------------------------------------------}
    { dl_9  (dates et lieux) ------------------------------------------------------}
    
    { dm    (disciplines-matières) ------------------------------------------------}
    { doc   (documentation OSMOSE : views, per, ace, shl, sql) --------------------}
    { dp    (départements) --------------------------------------------------------}
    { drdp  (disciplines de recrutement/disciplines de poste) ---------------------}
    { ds    (discipline-spécialité - idem table nnsp) -----------------------------}
    
    { et    (établissements) ------------------------------------------------------}
    { et_di (établissements DI) ---------------------------------------------------}
    { et_nt (établissements néo-titulaires) ---------------------------------------}
    { fd    (fonctions-disciplines EPP) -------------------------------------------}
    { ff    (fiches formateurs) ---------------------------------------------------}
    { fo    (finalités-objectifs) -------------------------------------------------}
    { gaia  (candidatures GAIA) ---------------------------------------------------}
    { gf    (grades/fonctions) ----------------------------------------------------}
    { gr    (grades) --------------------------------------------------------------}
    { gr_m  (grades) --------------------------------------------------------------}
    {       (extraction grades EPP pour mise à jour de la table "gr")              }
    { gs    (grades statutaires) --------------------------------------------------}
    { hbt   (habilitations basse tension) -----------------------------------------}
    
    { hsa   (heures supplémentaires effectives) -----------------------------------}
    { hsa_1 (heures supplémentaires effectives) -----------------------------------}
    { hsa_2 (heures supplémentaires effectives) -----------------------------------}
    { hsa_3 (heures supplémentaires effectives) -----------------------------------}
    { hsa_4 (heures supplémentaires effectives) -----------------------------------}
    { hsa_9 (heures supplémentaires effectives) -----------------------------------}
    
    { hse   (heures supplémentaires effectives) -----------------------------------}
    { hse_1 (heures supplémentaires effectives) -----------------------------------}
    { hse_2 (heures supplémentaires effectives) -----------------------------------}
    { hse_3 (heures supplémentaires effectives) -----------------------------------}
    { hse_4 (heures supplémentaires effectives) -----------------------------------}
    { hse_9 (heures supplémentaires effectives) -----------------------------------}
    
    { if    (interventions de formation) ------------------------------------------}
    { if_1  (interventions de formation) ------------------------------------------}
    { if_2  (interventions de formation) ------------------------------------------}
    { if_3  (interventions de formation) ------------------------------------------}
    { if_4  (interventions de formation) ------------------------------------------}
    { if_9  (interventions de formation) ------------------------------------------}
    
    { ik    (interventions khéops) ------------------------------------------------}
    {       (interface pour création d'interventions KHEOPS depuis la table "if_0")}
    {       (voir ifTOik_0.ace, el_ik_0.ace) --------------------------------------}
    { ik_1  (interventions khéops) ------------------------------------------------}
    {       (interface pour création d'interventions KHEOPS depuis la table "if_1")}
    {       (voir ifTOik_1.ace, el_ik_1.ace) --------------------------------------}
    { ik_2  (interventions khéops) ------------------------------------------------}
    {       (interface pour création d'interventions KHEOPS depuis la table "if_2")}
    {       (voir ifTOik_2.ace, el_ik_2.ace) --------------------------------------}
    { ik_3  (interventions khéops) ------------------------------------------------}
    {       (interface pour création d'interventions KHEOPS depuis la table "if_3")}
    {       (voir ifTOik_3.ace, el_ik_3.ace) --------------------------------------}
    { ik_4  (interventions khéops) ------------------------------------------------}
    {       (interface pour création d'interventions KHEOPS depuis la table "if_4")}
    {       (voir ifTOik_4.ace, el_ik_4.ace) --------------------------------------}
    { ik_9  (interventions khéops) ------------------------------------------------}
    {       (interface pour création d'interventions KHEOPS depuis la table "if_9")}
    {       (voir ifTOik_9.ace, el_ik_9.ace) --------------------------------------}
    
    { km    (distancier kilométrique) ---------------------------------------------}
    { ln    (logname) -------------------------------------------------------------}
    { lp    (line printer) --------------------------------------------------------}
    
    { mf    (macro-formations) ----------------------------------------------------}
    { mf_1  (macro-formations) ----------------------------------------------------}
    { mf_2  (macro-formations) ----------------------------------------------------}
    { mf_3  (macro-formations) ----------------------------------------------------}
    { mf_4  (macro-formations) ----------------------------------------------------}
    { mf_9  (macro-formations) ----------------------------------------------------}
    
    { mp    (média/post) ----------------------------------------------------------}
    
    { na    (nomenclature analytique) ---------------------------------------------}
    { nb    (nomenclature budgétaire) ---------------------------------------------}
    { ne    (natures établissements) ----------------------------------------------}
    { neo   (néo-titulaires) ------------------------------------------------------}
    
    { nnco  (nomenclature nationale : contenus de formation) ----------------------}
    { nndc  (nomenclature nationale : décisions candidatures) ---------------------}
    { nndo  (nomenclature nationale : domaines de formation) ----------------------}
    { nnfo  (nomenclature nationale : forme de l'organisation) --------------------}
    { nnmo  (nomenclature nationale : modalité de l'organisation) -----------------}
    { nnni  (nomenclature nationale : niveau d'initiative) ------------------------}
    { nnob  (nomenclature nationale : objectifs de formation) ---------------------}
    { nnpc  (nomenclature nationale : public cible) -------------------------------}
    { nnsp  (nomenclature nationale : spécialités - idem table ds) ----------------}
    { nntc  (nomenclature nationale : type de candidature) ------------------------}
    { nntf  (nomenclature nationale : type de formation) --------------------------}
    { nntmp (nomenclature nationale : temporaire) ---------------------------------}
    
    { omp   (OM permanents) -------------------------------------------------------}
    { omp_1 (OM permanents) -------------------------------------------------------}
    { omp_2 (OM permanents) -------------------------------------------------------}
    { omp_3 (OM permanents) -------------------------------------------------------}
    { omp_4 (OM permanents) -------------------------------------------------------}
    { omp_9 (OM permanents) -------------------------------------------------------}
    
    { pa    (priorités académiques) -----------------------------------------------}
    { pa_1  (priorités académiques) -----------------------------------------------}
    { pa_2  (priorités académiques) -----------------------------------------------}
    { pa_3  (priorités académiques) -----------------------------------------------}
    { pa_4  (priorités académiques) -----------------------------------------------}
    { pa_9  (priorités académiques) -----------------------------------------------}
    
    { pdf   (parcours de formation) -----------------------------------------------}
    { pdf_1 (parcours de formation) -----------------------------------------------}
    { pdf_2 (parcours de formation) -----------------------------------------------}
    { pdf_3 (parcours de formation) -----------------------------------------------}
    { pdf_4 (parcours de formation) -----------------------------------------------}
    { pdf_9 (parcours de formation) -----------------------------------------------}
    
    { pep4  (pep_4) ---------------------------------------------------------------}
    { pf    (personnel formation) -------------------------------------------------}
    { pf_1  (personnel formation) -------------------------------------------------}
    { pf_9  (personnel formation : EPP + AGORA) -----------------------------------}
    { pf_t  (personnels formation temporaire) -------------------------------------}
    { piaf  (procédure d'inscription aux actions de formation) --------------------}
    
    { pn    (priorités nationales) ------------------------------------------------}
    { pn_1  (priorités nationales) ------------------------------------------------}
    { pn_2  (priorités nationales) ------------------------------------------------}
    { pn_3  (priorités nationales) ------------------------------------------------}
    { pn_4  (priorités nationales) ------------------------------------------------}
    { pn_9  (priorités nationales) ------------------------------------------------}
    
    {*rh    (ressources humaines - application SIGARE) ----------------------------}
    {       (extraction SIGARE pour importation/mise-à-jour de la table "pf") -----}
    { rp    (répartitions pédagogiques des ca) ------------------------------------}
    
    { sa    (situations administratives -------------------------------------------}
    { ser   (services) ------------------------------------------------------------}
    
    { sf    (stages de formation) -------------------------------------------------}
    { sf_1  (stages de formation) -------------------------------------------------}
    { sf_2  (stages de formation) -------------------------------------------------}
    { sf_3  (stages de formation) -------------------------------------------------}
    { sf_4  (stages de formation) -------------------------------------------------}
    { sf_9  (stages de formation) -------------------------------------------------}
    
    { sg    (services gestionnaires) ----------------------------------------------}
    
    { sh    (suivi historique) ----------------------------------------------------}
    { sh_1  (suivi historique) ----------------------------------------------------}
    { sh_2  (suivi historique) ----------------------------------------------------}
    { sh_3  (suivi historique) ----------------------------------------------------}
    { sh_4  (suivi historique) ----------------------------------------------------}
    { sh_9  (suivi historique) ----------------------------------------------------}
    
    { sys_c (colonnes) ------------------------------------------------------------}
    { sys_t (tables) --------------------------------------------------------------}
    
    { sysmenus --------------------------------------------------------------------}
    { sysmenuitems ----------------------------------------------------------------}
    
    { t_cf  (temporaire candidatures formation) -----------------------------------}
    { t_cm  (typologie communes) --------------------------------------------------}
    { t_ne  (typologie nature établissement) --------------------------------------}
    
    { tbb   (temporaire bilans budgétaires) ---------------------------------------}
    { tmp   (temporaire) ----------------------------------------------------------}
    
    { ts    (transports-séjours) --------------------------------------------------}
    { ts_1  (transports-séjours) --------------------------------------------------}
    { ts_2  (transports-séjours) --------------------------------------------------}
    { ts_3  (transports-séjours) --------------------------------------------------}
    { ts_4  (transports-séjours) --------------------------------------------------}
    { ts_9  (transports-séjours) --------------------------------------------------}
    { ts_t  (transports-séjours) --------------------------------------------------}
    
    { tsa   (transport-séjour animateur) ------------------------------------------}
    { tsa_1 (transport-séjour animateur) ------------------------------------------}
    { tsa_2 (transport-séjour animateur) ------------------------------------------}
    { tsa_3 (transport-séjour animateur) ------------------------------------------}
    { tsa_4 (transport-séjour animateur) ------------------------------------------}
    { tsa_9 (transport-séjour animateur) ------------------------------------------}
    
    { tsdp  (transport-séjour dépense prévisionnelle) -----------------------------}
    
    { tss_t (transport-séjour stagiaire temporaire) -------------------------------}
    
    { uaa   (table nationale des établissements) ----------------------------------}
    
    { uf    (unités de formation) -------------------------------------------------}
    { uf_1  (unités de formation) -------------------------------------------------}
    { uf_2  (unités de formation) -------------------------------------------------}
    { uf_3  (unités de formation) -------------------------------------------------}
    { uf_4  (unités de formation) -------------------------------------------------}
    { uf_9  (unités de formation) -------------------------------------------------}
    
    { ut    (unités de traitement) ------------------------------------------------}
    
    { zep   (zone d'éducation prioritaire) ----------------------------------------}
    { zep_1 (zone d'éducation prioritaire) ----------------------------------------}
    { zep_2 (zone d'éducation prioritaire) ----------------------------------------}
    { zep_3 (zone d'éducation prioritaire) ----------------------------------------}
    { zep_4 (zone d'éducation prioritaire) ----------------------------------------}
    
    {==============================================================================}
    Citation Envoyé par CinePhil Voir le message
    Je ne voudrais pas avoir à intervenir sur votre BDD !
    Ce ne sera pas nécessaire. Elle est fiable à 100%... et elle a été poubellisée.

    J’exprime mon point de vue pour montrer qu’il en existe d’autres. L’important, c’est la diversité. Je profite de ces discussions pour apporter le fruit de mon expérience et peut-être faire avancer le shmilblick. Il appartient à chacun de prendre ou de laisser.
    Dernière modification par Invité ; 13/12/2018 à 20h35. Motif: Noms de table et noms de champs de la forme "XXX_XXX"

  12. #12
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 133
    Points : 38 555
    Points
    38 555
    Billets dans le blog
    9
    Par défaut
    Citation Envoyé par IFA2377 Voir le message
    On nomme le champ par son nom et puis c’est tout.
    La Palice n'aurait pas dit mieux, mais s'il avait connu les bases de données, il aurait probablement dit "On nomme l'attribut par son nom", la notion de "champ" étant réservée aux formulaires de saisie et non aux bases de données


    Citation Envoyé par IFA2377 Voir le message
    Si l’objectif d’un MCD consiste à imiter conceptuellement un SGBD, pourquoi pas, j’imagine que ça rassure mais à un moment donné, il faut lâcher son trotteur (ou son déambulateur !), et se déplacer en toute liberté. Il faut oser franchir le Rubicon, abandonner la forme sécuritaire de son modèle conceptuel et passer à la forme développement, s’affranchir de la lecture syllabique et pratiquer la lecture rapide.
    Non, l'objectif du MCD n'est pas d'imiter un SGBD car au niveau conceptuel, le SGBD n'existe pas. Le MCD décrit les individus (les types d'entité) et les liens entre ces individus (les associations).
    Contrairement à ce que vous affirmez c'est une étape indispensable, c'est le socle de l'édifice sur lequel sera bati le SGBD.
    Un très grand nombre de problèmes soulevés dans les sections relatives au langage SQL ou aux différents SGBD de developpez.net sont liés à une modélisation hasardeuse.
    Les solutions de contournement d'une modélisation négligée sont toujours complexes et donc difficiles à maintenir, peu propices aux performances et souvent peu fiables.
    Et quand les traitements sont déjà écrits, revoir la modélisation a un cout très élevé.


    Citation Envoyé par IFA2377 Voir le message
    bien au contraire, on s’attache à reproduire sa BDD à l’identique de son MCD référent.
    Encore une fois non, le MCD est complétement indépendant de la BDD (à quelques très rares nuances près tels que le choix de certains types d'attributs plus ou moins performants selont le choix de SGBD, mais c'est très marginal).


    Citation Envoyé par IFA2377 Voir le message
    [*]le développeur n’a que faire de la typologie des tables dans leurs noms, [*]quant aux champs, le développeur dispose de toutes les spécifications dans la BDD sans qu’il soit nécessaire d’en rappeler certaines dans leurs noms, [*]et une Base de Données n’a pas besoin non plus qu’on lui précise dans son nom que c’est une BD (Frédéric BROUARD : Le nom d'une base de données doit commencer par le préfixe « BD_ » suivi d'une indication pertinente.).
    Je vous rejoins en partie, il ne faut pas compliquer à outrance les noms des objets, chez l'un de mes clients où une nomenclature stricte et concise a été choisie, tous les objets utilisent un nom sur 8 caractères, rien de plus. Et bien à l'usage, on s'y fait en très peu de temps, c'est à la fois pratique et mnémotechnique car pensé avec intelligence.


    Citation Envoyé par IFA2377 Voir le message
    Dans de telles conditions de développement, on n’a pas le temps de tergiverser, de se prendre la tête à conceptualiser, on va à l’essentiel, on prend les raccourcis, on épure, on s’organise pour tout maitriser, pour aller vite. L’enjeu, la pression, l’urgence, l’obligation de réussir dictent tous les choix. On n’a pas le droit à l’erreur car il est impossible de revenir en arrière
    Faute de conceptualiser, c'est exactement le contraire qui se produit : à l'épreuve des faits (performances désastreuses, intégrité des données non vérifiées, règles de gestion hasardeuses), il faut revenir en arrière, casser pour reconstruire, ce qu'une conception soignée en amont aurait évité.
    Je le constate malheureusement chez de très nombreux clients, dans différents corps de métier.


    Citation Envoyé par CinePhil Voir le message
    Je pense le contraire : À quoi sert de faire une vue sur une seule table alors qu'on peut interroger directement la table ?
    OK, ça peut être une question de droit d'utilisation (GRANT PRIVILEGE) mais à part ça, le seul intérêt éventuel que je vois et qui n'est pas le cas le plus fréquent, c'est de programmer des colonnes calculées (pourcentages, âge ou ancienneté...).

    L'intérêt des vues est justement de pouvoir interroger plusieurs tables en ayant l'impression d'en interroger qu'une seule. La vue sera plus fidèle à la vision métier de ce que l'on représente : une vue pour les salariés, une vue pour les contacts clients... qui utilisent toutes la table des personnes physiques.
    Autre intérêt majeur : garantir l'indépendance entre la couche physique, la table, et la couche logique. Grace aux vues, une modification de structure des données est sans impact sur les traitements.
    Et aussi, avec une vue particulière, la vue matérialisée, un gain en performances.

  13. #13
    Invité
    Invité(e)
    Par défaut Métaphores de la démarche top-down et de la démarche bottom-up
    "On nomme l'attribut par son nom", la notion de "champ" étant réservée aux formulaires de saisie et non aux bases de données.
    J’ai réutilisé le terme employé par martinbrait, l’initiateur de cette discussion. Je lui enlève déjà son préfixe, son suffixe, son trigramme, si en plus je lui change son vocabulaire…

    L'objectif du MCD n'est pas d'imiter un SGBD. Le MCD est complètement indépendant de la BDD. Contrairement à ce que vous affirmez c'est une étape indispensable, le MCD, c'est le socle de l'édifice sur lequel sera bati le SGBD.
    Je ne dis pas que l’objectif du MCD est d’imiter le SGBD, je dis au contraire que le MCD est une chose et que le développement en est une autre. En scrutant la forme de nommage proposée par martinbrait, je constate seulement qu’il synchronise son nommage MCD avec son nommage développement. D’où ma supposition que son MCD transcrit sa BDD.

    En ce qui me concerne, mon MCD ne risque pas d’imiter ma BDD puisque je m’en passe, enfin je ne le matérialise pas. Il me suffit de le voir mentalement. Mais c’est sur ma planète « bottom-up », pas sur la planète « top-down ». On dit que l’univers est en expension, les deux planètes ne devraient donc jamais se rencontrer.

    À l'usage, on se fait en très peu de temps à des noms sur 8 caractères, rien de plus. Et c'est à la fois pratique et mnémotechnique car pensé avec intelligence.
    Je suis intervenu dans ces discussions initiées par martinbrait car elles pouvaient laisser penser que sa vision dogmatique est la norme.

    Faute de conceptualiser, il faut revenir en arrière, casser pour reconstruire ce qu'une conception soignée en amont aurait évité (performances désastreuses, intégrité des données non vérifiées, règles de gestion hasardeuses).
    C’est certainement vrai sur la planète « top-down », je ne conteste pas. Par contre, sur ma planète « bottom-up », il n’y a pas de modèles, on conceptualise en même temps que l’on construit. Mais je conçois que cette démarche puisse heurter les esprits cartésiens éduqués à bien faire tout comme il faut.

    À propos de mes planètes, j’ai cherché deux métaphores pour mieux appréhender les deux démarches. Je les propose mais je m’éloigne du sujet de cette discussion. Cela m’a amené à adopté enfin un avatar auquel je peux m’identifier, car tant qu’à opter pour un avatar, autant qu’il transmette un message.

    Métaphore de la démarche top-down
    Pièce jointe 437097
    Je vois la démarche top-down comme un coloriage. Vierge, c’est un ensemble de lignes formant des espaces à colorer assimilable au MCD. Chaque espace numéroté par un code couleur transforme le MCD en MLD. Le développeur n’a plus qu’à colorer chaque espace en respectant son code couleur et en faisant bien attention de ne pas dépasser.

    Métaphore de la démarche bottom-up
    Pièce jointe 437099
    Une partie d’échecs symbolise assez bien cette démarche. Le développeur a les blancs et l’utilisateur, les noirs.

    Il arrive que les pièces du jeu ne soient pas encore disposées sur le plateau. Lorsque le jeu est prêt, le développeur avance sa première pièce. Ensuite, tout se joue dans l’instant de part et d’autre avec une anticipation de deux ou trois coups.

    La partie n’a pas de limite de temps, elle peut durer deux, quatre, quinze ans ou plus. Cela nécessite d’adopter une stratégie, de s’appuyer sur le chemin déjà parcouru et d’élaborer à partir de la situation en cours un plan à court, moyen et long terme. Sans limite de temps, il faut s’organiser, avoir une vision globale de la partie. Il n’y a pas d’autre alternative que de toujours avancer tout en consolidant ses arrières, en protégeant son roi. Reculer, c’est jouer un coup pour rien, c’est perdre du temps.

    Bien sûr, le joueur-développeur n’a pas le droit à l’erreur mais sa marge de manœuvre est très étroite et tous les indicateurs convergent la plupart du temps vers une seule et unique décision possible.

    Il arrive que le joueur-développeur aille à dame et qu’il soit amené à jouer en simultané, une voire deux autres parties.
    Dernière modification par Invité ; 28/12/2018 à 10h04.

  14. #14
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 133
    Points : 38 555
    Points
    38 555
    Billets dans le blog
    9
    Par défaut
    Pour rester dans la métaphore du jeu d'échecs, considérez que le MCD, c'est à la fois l'échiquier et les règles de déplacement des différentes pièces.

    S'il l'échiquier n'est pas conforme ou que les joueurs ne sont pas d'accord sur la façon de déplacer les pièces, la partie d'échecs sera compliquée, bancale voire... impossible !

    Citation Envoyé par IFA2377 Voir le message
    Je ne dis pas que l’objectif du MCD est d’imiter le SGBD, je dis au contraire que le MCD est une chose et que le développement en est une autre. En scrutant la forme de nommage proposée par martinbrait, je constate seulement qu’il synchronise son nommage MCD avec son nommage développement. D’où ma supposition que son MCD transcrit sa BDD.
    Oui et non : s'il est vrai que la nomenclature utilisée dans le MCD est structurante pour la suite, certains logiciels de modélisation proposent des règles paramétrables qui permettent de nommer l'objet physique autrement que ce qui apparait dans le MCD (Power AMC en tout cas le propose).

  15. #15
    Membre habitué
    Avatar de martinbrait
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    74
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 74
    Points : 131
    Points
    131
    Par défaut
    Merci IFA2377 pour ton point de vue.
    En lisant tes arguments, je les mets en lien avec un lointain mauvais souvenir personnel. J'ai survécu à la récupération d'un projet non modélisé, transmis sans spécifications. A l'époque, j'avais reçu en cadeau, un fatras de 4000 colonnes souvent dupliquées dans 30 bases de données. C'était un bordel transmis sans MCD, sans spécifications écrites, oubliées dans la tête de mon prédécesseur. Je commençais à gaspiller mes journées entières, à deviner à force d'enquêtes auprès des utilisateurs, comment maintenir leurs bases à jour.
    Je dépensais chaque jour l'essentiel de mon énergie à tenter de comprendre les résultats attendus par l'outil, afin d'en déduire les cas d'utilisation, et pérénisait son fonctionnement, plutôt que de consacrer mon temps au métier que cet outil était supposé gérer. Je réussissais, petit à petit, à me sortir de mes heures de pénitent.


    Citation Envoyé par CinePhil
    ... vous avez des tables indépendantes pour des concepts voisins… Autrement dit ... adepte de la redondance des données avec tous les risques que ça suppose en termes de cohérence de données...
    Citation Envoyé par IFA2377
    Cela sert tout simplement à ne permettre l’accès via un écran ou un SQL qu’à une partie de cette table. Les gestionnaires ne saisissent aucun code. Ils ignorent même les codes de leurs concours. Ils « rentrent » dans un concours par un item de leur menu ; à partir de là, tous les traitements fonctionnent sans aucune saisie de code.
    C'est quoi, ce faux problème délirant, avec la saisie des codes de concours ?
    Penses-tu respecter les 3 premières formes normales incontournables, IFA2377 ? valeurs atomiques, non redondantes, rarement nulles.
    Avec la précision de ton récit, je comprends enfin le mode d'emploi, pour transformer une base relationnelle normalisée de 500 colonnes, en un gruyère de 4000 colonnes infestées de nulls, non atomiques et répétitives, à mettre constamment à jour !



    Citation Envoyé par CinePhil
    L'intérêt des vues est justement de pouvoir interroger plusieurs tables en ayant l'impression d'en interroger qu'une seule.
    Effectivement, des 4000 colonnes redondantes initiales, j'en concevais et restituais finalement les 500 colonnes uniques strictement nécessaires, que j'interrogeais depuis des vues en passant par mes jointures, sans crise de panique.

    Je m'empressais de tenir mon MCD bien à jour, spécifications, détails écrits des cas d'utilisations, règles de maintenance applicative.
    Mes demi-journées hebdomadaires de mises à jour, s'étaient miraculeusement réduites à 30 minutes de mise à jour mensuelle.

    Merci de ne pas m'en vouloir si mes commentaires, postés ci-dessous, te semblent un peu féroces.

    Citation Envoyé par IFA2377
    En scrutant la forme de nommage proposée par martinbrait, je constate seulement qu’il synchronise son nommage MCD avec son nommage développement.
    C'est parfaitement exact. Mon code vba fait ce boulot de conversion sous access.

    Citation Envoyé par IFA2377
    Je vois la démarche top-down comme un coloriage. Vierge, c’est un ensemble de lignes formant des espaces à colorer assimilable au MCD.
    Fais-tu partie des casse-cou, qui ne comptent jamais sur leur MCD strictement écrit, avant de mettre en œuvre les nouvelles règles de gestion sur MLD ? Modifies-tu, bille en tête ton MPD, sans te confronter à ton MCD-coloriage, de plus en plus confusément mentalisé ? ?

    Citation Envoyé par IFA2377
    En ce qui me concerne, mon MCD ne risque pas d’imiter ma BDD puisque je m’en passe, enfin je ne le matérialise pas. Il me suffit de le voir mentalement.
    Quelle source catastrophique de charge mentale !
    Quand tu perds de vue tes bases, pendant un mois consécutif,à quel endroit mentalises-tu les moindres règles de gestion du MCD, et les cas d'utilisation de tes moindres développements ?
    Es-tu coutumier de toujours oublier de laisser des spécifications écrites derrière toi ?
    Es tu coutumier de toujours oublier de laisser des instructions écrites de maintenance applicative derrière toi ?
    Te crois-tu apte à transmettre qualitativement tes projets à un successeur ?
    Sais-tu travailler en équipe ?

    Quelle horreur !

    Citation Envoyé par IFA2377
    Métaphore de la démarche bottom-up : Une partie d’échecs ... elle peut durer deux, quatre, quinze ans ou plus ... s’appuyer sur le chemin déjà parcouru ... Reculer, c’est jouer un coup pour rien, c’est perdre du temps.
    Ce qui ce conçevrait mieux s'énoncerait clairement, et les mots pour le dire arriveraient aisément ! (sans temps perdu)



    Citation Envoyé par escartefigue
    certains logiciels de modélisation proposent des règles paramétrables qui permettent de nommer l'objet physique autrement que ce qui apparait dans le MCD (Power AMC en tout cas le propose).
    win'design propose aussi ce double nommage :
    nommage conceptuel pour MCD, et nommage logique pour MLR.
    Cette possibilité merveilleuse diminue considérablement ma charge mentale !

  16. #16
    Invité
    Invité(e)
    Par défaut Ça emmerde les gens quand on ne vit pas comme eux
    Citation Envoyé par martinbrait Voir le message
    Merci de ne pas m'en vouloir si mes commentaires, postés ci-dessous, te semblent un peu féroces.
    Impressionnant ! Vos réactions virulentes font peur. Ce refus d’imaginer autre chose que ce que vous connaissez frise l’embrigadement. Le moindre de mes propos est déformé et amalgamé à votre vécu.

    « Pour celui qui a toujours voulu comprendre avant de croire quoi que ce soit, il est impossible d'accepter un dogme ou une doctrine ; impossible de prendre comme vérité immuable une affirmation officielle décrétée par une instance religieuse ou philosophique sous prétexte qu'elle est la garante de la juste façon de croire. (Bertrand Piccard, Changer d'altitude - 2014) »

    Vous ne savez pas jouez aux échecs et vous vous permettez de supposer des absurdités sur ce qu’est une démarche bottom-up. J’y ai joué pendant 37 ans, je sais donc de quoi je parle. Pourquoi juger sans savoir plutôt que chercher à comprendre et s’instruire de la diversité, d’un autre point de vue ?

    À méditer et à mettre en pratique : Le serment de non-allégeance de M. Cockburn :

    « Je promets de n’exclure aucune idée sur la base de sa source mais de donner toute la considération nécessaire aux idées de toutes les écoles ou lignes de pensées afin de trouver celle qui est la mieux adaptée à une situation donnée. »

    Quand des informaticiens ne savent pas écouter sans préjugés un autre informaticien, comment croire que ces mêmes informaticiens soient capables d’écouter une problématique métier à informatiser autrement qu’à travers le prisme de leur formatage.

    « Comprendre le métier de l'utilisateur pour lui créer les outils appropriés, ça n'est pas la même chose que le lui réinventer. », disait Guilip.

    Quand on ne comprend pas un point de vue et que l’on ne cherche pas à le comprendre, il est plus facile de le rejeter en lui inventant mille défauts et en votant contre. Cela ne change en rien la réalité qui dérange. C’est juste nul, parce que ce manque d’ouverture d’esprit, ni n’honore, ni ne valorise.

    Quelque soient les modèles et formes normales, la réalité, c’est qu’une BDD est constituée de tables et chaque table de colonnes. À partir de là, si le développement d’une fonctionnalité nécessite la création d’une table, et bien on la crée. Selon la table à créer, ça peut prendre moins d’une minute à quelques minutes.

    C’est puce_84 qui disait : « Il faut arrêter les méthodes, les process, les structures et mettre un peu de chaos dans ce monde trop bien rangé... Cherche informaticien avec un minimum de connaissances techniques et prêt à toutes les sacrifiées sur l'autel de sa créativité. Ceci n'est que l'avis d'un pauvre philosophe perdu... »

    Je lui avais répondu : « Pour arriver à cela, il faut oublier tous les censeurs qui, pour faciliter la gestion du troupeau, veulent que chacun se comporte de façon similaire. »

    Et Pierre Vassiliu chantait : « Ça emmerde les gens quand on ne vit pas comme eux »

    - Qu’est-ce qu’il fait, qu’est-ce qu’il a, qui c’est celui-là,
    - Complètement toqué ce mec là, complètement gaga,
    - il a une drôle de tête ce type là,
    - Ça ne se passera pas comme ça,
    - On ne va pas se laisser faire les gars…

    J’ai recensé vos supputations négatives, ridicules et stériles, basées uniquement sur le fait que je me passe d’un MCD et qu’il me suffit de visualiser mentalement les tables concernant la fonctionnalité que je développe.

    • À quoi sert de faire une vue sur une seule table alors qu'on peut interroger directement la table ?

      OK, ça peut être une question de droit d'utilisation (GRANT PRIVILEGE) mais à part ça, le seul intérêt éventuel que je vois et qui n'est pas le cas le plus fréquent, c'est de programmer des colonnes calculées (pourcentages, âge ou ancienneté...).

    • À moins qu'on doivent comprendre de votre discours sur le développement rapide sans modélisation que vous avez des tables indépendantes pour des concepts voisins et qu'ainsi, par exemple, une personne physique avec son nom et son prénom usuels et d'autres données la caractérisant soit présente dans la table des employés, des chefs de service, des membres du comité d'entreprise et que sais-je encore... Autrement dit que vous soyez un adepte de la redondance des données avec tous les risques que ça suppose en termes de cohérence de données…

    • Tant que votre système fonctionne et que c'est vous qui le maîtrisez, tout va bien. Mais je ne voudrais pas avoir à intervenir sur votre BDD ! Rien que de voir que vous avez 205 tables pour un système de formation continue me laisse songeur…

    • Faute de conceptualiser, c'est exactement le contraire qui se produit : à l'épreuve des faits (performances désastreuses, intégrité des données non vérifiées, règles de gestion hasardeuses), il faut revenir en arrière, casser pour reconstruire, ce qu'une conception soignée en amont aurait évité.

      Je le constate malheureusement chez de très nombreux clients, dans différents corps de métier.

    • En lisant tes arguments, je les mets en lien avec un lointain mauvais souvenir de projet horrible auquel je me suis confronté…

    • Quelle source de charge mentale !

    • Pour rester dans la métaphore du jeu d'échecs, considérez que le MCD, c'est à la fois l'échiquier et les règles de déplacement des différentes pièces.

      S'il l'échiquier n'est pas conforme ou que les joueurs ne sont pas d'accord sur la façon de déplacer les pièces, la partie d'échecs sera compliquée, bancale voire... impossible !

    • C'est quoi, ce faux problème délirant, avec la saisie des codes de concours ?

    • Penses-tu respecter les 3 premières formes normales incontournables, IFA2377 ? Valeurs atomiques, non redondantes, rarement nulles.

    • Avec la précision de ton récit, je comprends enfin le mode d'emploi, pour transformer une base relationnelle normalisée de 500 colonnes, en un gruyère de 4000 colonnes infestées de nulls, non atomiques et répétitives, à mettre constamment à jour !

    • Fais-tu partie des casse-cou, qui ne comptent jamais sur leur MCD strictement écrit, avant de mettre en œuvre les nouvelles règles de gestion sur MLD ?

    • Modifies-tu, bille en tête ton MPD, sans te confronter à ton MCD-coloriage, de plus en plus confusément mentalisé ?

    • Quelle source catastrophique de charge mentale !

    • Quand tu ne travailles pas sur tes bases pendant un mois consécutif, as-tu encore en tête les moindres règles de gestion du MCD, et les cas d'utilisation de tes moindres développements ?

    • Quand tu perds de vue tes bases, pendant un mois consécutif, à quel endroit mentalises-tu les moindres règles de gestion du MCD ?

    • Es-tu coutumier de toujours oublier de laisser des spécifications derrière toi ?

    • Es tu coutumier de toujours oublier de laisser des instructions de maintenance applicative derrière toi ?

    • Te crois-tu capable de transmettre sereinement, qualitativement tes projets à un successeur ?

    • Sais-tu travailler en équipe ?

    • Quelle horreur !

    • Ce qui ce concevrait mieux s'énoncerait clairement, et les mots pour le dire arriveraient aisément !
    Citation Envoyé par martinbrait Voir le message
    Mon code vba fait ce boulot de conversion sous access.
    Je me doutais d’un tel scénario. Donc, tu développes dans un contexte spécifique et il aura fallu plus de deux mois pour l’apprendre. Tes discussions auraient dû être postées dans le sous-forum SGBD « ACCESS » au lieu de polluer le forum « ALM » en y généralisant des spécificités.

    Concernant certaines de tes interrogations, je me suis déjà exprimé dans d’autres discussions. Recommencer ici, serait redondant et hors-sujet.

    Mais j’avais anticipé ces réactions en prévenant que ma démarche risquait de heurter les esprits cartésiens éduqués à bien faire tout comme il faut.

    Citation Envoyé par martinbrait Voir le message
    Quand tu perds de vue tes bases, pendant un mois consécutif, à quel endroit mentalises-tu les moindres règles de gestion du MCD, et les cas d'utilisation de tes moindres développements ?
    Un mois ? Cela fait plus de onze ans que je suis à la retraite, donc que je ne manipule plus de SGBD, et que je ne me suis pas replongé dans mes développements. Je n’ai pas besoins de règles de gestion de MCD puisque je ne gère pas de MCD. Je gère ma BDD en live. Dans le monde réel, si une BDD est constituée de 200 tables on ne les manipule jamais toutes en même temps. Une trentaine c’est déjà conséquent et tout-à-fait maitrisable car la majorité sont des tables de références.

    Exemple extrait d’un écran de M-à-J des interventions formateurs :

    Désolé de vous imposer de l’Informix et du mode caractère. Cet écran-commentaire montre que le programme (2.422 lignes) ne compte que 5 tables-entités pour un total de 26 tables. Visualiser 5 tables n’a rien d’un exploit et ne constitue pas une charge mentale insurmontable.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    screen
    
    {
     ┌───────────────────────┐                                              ┌─────┐
    ┌┤Enchainement des écrans├──────────────────────────────────────────────┤ 1/7 ├┐
    │└───────────────────────┘                                              └─────┘│
    │                                                                              │
    │   ┌─────────────┐Table       ┌─────────────┐  pf = Personnes Formation       │
    │   │     pf      ├───────────>│     omp     │                                 │
    │   └───.─────┬───┘            └──────┬──────┘ omp = Ordre de mission permanent│
    │ Master│     │Detail           Detail│                                        │
    │   ┌───┴─────*───┐                   │                                        │
    │   │     ff      *───────────────────┘         ff = Fiche Formateur           │
    │   └───.─────┬───┘                                                            │
    │ Master│     │Detail                                                          │
    │   ┌───┴─────*───┐                                                            │
    │   │     if      │                             if = Interventions Formateur   │
    │   └───.─────┬───┘                                                            │
    │ Master│     │Detail                                                          │
    │   ┌───┴─────*───┐                                                            │
    │   │     sf      │                             sf = Stage de Formation        │
    │   └─────────────┘                                                            │
    └──────────────────────────────────────────────────────────────────────────────┘
    }
    
    tables       pf
                 pf_numen
                omp_0
                 ff
                 df
                 cp
                 gr
                 gf_e
                 gf_a
                 dm
                 sa
                dmr
                dmp
    
                 et
                 et_bis
                 et_ter
                 am
                 cm
                 cm_bis
                 cl
                 cl_bis
                 ne
                 ne_bis
    
                 if_0
    
             PAF_af_0
             PAF_sf_0
    Comme on peut le constater avec les extraits de mes développements qui illustrent mes arguments, je reste toujours en mesure d’intervenir sur mes BDD et de comprendre mes développements.

    Gérer les SQL de création de mes BDD me suffit. En ce qui me concerne, ne pas gérer de MCD ne m’entrave d’aucune charge mentale, bien au contraire, je suis libre, mon cerveau reste totalement disponible. Développant en état d’amnésie immédiate (antérograde), j’ai dû m’organiser, m’inventer une codification, une normalisation, une charte graphique.

    Citation Envoyé par martinbrait Voir le message
    Ce qui ce concevrait mieux s'énoncerait clairement, et les mots pour le dire arriveraient aisément !
    Tu te réfères à quoi de concret pour exprimer cette citation de Boileau au conditionnel ? À rien. C’est un commentaire désobligeant, gratuit et inadapté qui te rassure sans doute dans tes convictions, dans tes certitudes. Pour développer « bottom-up », il faut précisément être au clair dans sa tête, concevoir irréprochablement et programmer aisément, efficacement.

    Par contre, cette citation à la forme déclarative convient parfaitement à mon approche « bottom-up » du développement. Quand on démarre, il n’y a rien, juste un serveur, un développeur, des gestionnaires dans les starting-blocks qui attendent de pouvoir utiliser leur application et des milliers de personnes qui s’attendent à être convoquées incessamment. Cela demande d’être capable d’appréhender clairement la problématique métier, de savoir se projeter dans le futur proche, lointain, très lointain et de connaitre son métier, tout simplement. Ha, si !... Cela exige également de s’investir, d’avoir confiance en soi, de savoir prendre des risques. Mais tout le monde ne sait pas forcément jouer aux échecs. C’est pour ça que l’on a inventé les coloriages.

    Les formes normales, je m’y suis intéressé dans les années 70 et les MCD, dans les années 80. Vous étiez nés ? J’ai traversé toutes les mutations technologiques de l’informatique depuis la carte perforée jusqu’à l’internet d’aujourd’hui. Ma méthode de travail s’alimente d’autonomie, de liberté, de créativité, d’audace, d’initiatives, d’aventure, d’expérimentation, de défi, de prise de risques, d’adrénaline, de responsabilités, de professionnalisme, de nouveauté, d’incertitude, de surprise, de passion, de plaisir, d’empathie... Ça vous parle ? Ou votre acrophobie ne se soigne-t-elle qu'à l'aide de modèles, de formes normales et de procrastination ?

    Citation Envoyé par martinbrait Voir le message
    Es-tu coutumier de toujours oublier de laisser des instructions de maintenance applicative derrière toi ?
    Es-tu coutumier de toujours oublier de laisser des spécifications derrière toi ?
    Aucun dossier, tout est dans l’application. L’application se suffit à elle-même, pour les gestionnaires aussi bien que pour les informaticiens. Les consignes DBA, de gestion et de maintenance font l’objet de sous-menus uniquement accessibles par le développeur. Je vous propose du vieux et du mode caractère, mais c’est juste pour montrer que ne pas gérer de MCD ne justifie en aucun cas ces supputations désobligeantes.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    ┌──────────────────────────────────────────────────────────────────────────────┐
    │                             GESTION PAF 2001-2002                            │
    │                                                                              │
    │   1. ┌──────────────────────────┤[ ]├┐  15. ┌──────────────────────────┤/\/├┐│
    │   2. │MANUEL                         │  16. │MANUEL                         ││
    │   3. │INSTALLER L'APPLICATIF         │  17. │INSTALLER L'APPLICATIF         ││
    │   4. │A PROPOS DE L'APPLICATIF       │  18. │A PROPOS DE L'APPLICATIF       ││
    │   5. │LA FORMATION CONTINUE          │  19. │LA FORMATION CONTINUE          ││
    │   6. │ARBORESCENCE                   │  20. │ARBORESCENCE                   ││
    │   7. │LISTE DES TABLES               │  21. │LISTE DES TABLES               ││
    │   8. │LISTE DES SHELL, ACE, SQL      │  22. │LISTE DES SHELL, ACE, SQL      ││
    │   9. │DICTIONNAIRE DES DONNEES       │  23. │DICTIONNAIRE DES DONNEES       ││
    │  10. │MEMORENDUM DES DEVELOPPEMENTS  │  24. │MEMORENDUM DES DEVELOPPEMENTS  ││
    │  11. │LES NEWS                       │  25. │LES NEWS                       ││
    │  12. │                               │  26. │                               ││
    │  13. │                               │  27. │                               ││
    │  14. └───────────────────────────────┘  28. └──────────────────────────┤[?]├┘│
    │                                                                              │
    │                                                                              │
    │Use space bar, arrow keys, or type number to make selection.                  │
    │Enter 'e' to return to previous menu or exit.                                 │
    │Enter carriage return to execute selection:  3                                │
    │                                                                              │
    │ [ ] -> écrans                                                                │
    │ /\/ -> états                                                                 │
    │ [?] -> informations                                                          │
    └──────────────────────────────────────────────────────────────────────────────┘
    ┌──────────────────────────────────────────────────────────────────────────────┐
    │                         RENTREE PAF 2001-2002                                │
    │                                                                              │
    │   1. ┌──────────────────────────────────────────────────────────┐            │
    │   2. │RENAME DES TABLES HISTORISEES                             │            │
    │   3. │INDEX  DES TABLES HISTORISEES                             │            │
    │   4. │ACTUALISATION DES VUES PAF                                │            │
    │   5. │              DES VUES PNF                                │            │
    │   6. │              DES VUES ca  (modifier le sql)              │            │
    │   7. │              DES SYNONYMES                               │            │
    │   8. ├──────────────────────────────────────────────────────────┤            │
    │   9. │SAUVEGARDE DE L'APPLICATION                               │            │
    │  10. │SHUTDOWN                                                  │            │
    │  11. ├──────────────────────────────────────────────────────────┤            │
    │  12. │NOUVELLE IMPRIMANTE DE DESTINATION                        │            │
    │  13. └──────────────────────────────────────────────────────────┘            │
    │                                                                              │
    │                                                                              │
    │                                                                              │
    │Use space bar, arrow keys, or type number to make selection.                  │
    │Enter 'e' to return to previous menu or exit.                                 │
    │Enter carriage return to execute selection:  1                                │
    │                                                                              │
    │                                                                              │
    │                                                                              │
    │                                                                              │
    └──────────────────────────────────────────────────────────────────────────────┘
    
    ┌──────────────────────────────────────────────────────────────────────────────┐
    │                             │ O │ S │ M │ O │ S │ E │                        │
    │                                                                              │
    │   1. ┌───────────────────────────────┐  15. ┌───────────────────────────────┐│
    │   2. │ETABLISSEMENTS, COMMUNES, ...  │  16. │ETABLISSEMENTS : CHRONOLOGIQUE ││
    │   3. │GRADES, CORPS, DISCIPLINES, ...│  17. │ETABLISSEMENTS : LIEU DISTRIBUE││
    │   4. │CANDIDATS/FORMATEURS           │  18. │FOURNISSEURS   : NOM           ││
    │   5. │                               │  19. │NATURES ETABLISSEMENTS         ││
    │   6. │                               │  20. │GRADES : CHRONOLOGIQUE         ││
    │   7. │                               │  21. │GRADES : ALPHABETIQUE          ││
    │   8. │MàJ PARAMETRES DE L'APPLICATION│  22. │                               ││
    │   9. │MàJ NOMENCLATURE BUDGETAIRE    │  23. │                               ││
    │  10. └───────────────────────────────┘  24. └───────────────────────────────┘│
    │  11. ┌───────────────────────────────┐  25. ┌───────────────────────────────┐│
    │  12. │AJOUT NOMENCLATURE BUDGETAIRE  │  26. │MàJ DES PERSONNES DUPLIQUEES   ││
    │  13. │REINITIALISATION DES FLAGS     │  27. │FUSION DE DEUX ETABLISSEMENTS  ││
    │  14. └───────────────────────────────┘  28. └──────────────────────────┤[?]├┘│
    │                                                                              │
    │                                                                              │
    │Use space bar, arrow keys, or type number to make selection.                  │
    │Enter 'e' to return to previous menu or exit.                                 │
    │Enter carriage return to execute selection:  1                                │
    │                                                                              │
    │                                                                              │
    │                                                                              │
    │                                                                              │
    └──────────────────────────────────────────────────────────────────────────────┘
    Cela m’ennuie de poster un exemple de programme spécifique à Informix dans cette discussion qui s’avère finalement concerner le SGBD Access. De même que l’application est un tout, le programme est un tout (le vrai est le tout, Hegel), il se suffit lui aussi à lui-même pour en comprendre la fonctionnalité. « Le vrai est le tout » signifie que l'on ne comprend une chose qu'en refusant de l'isoler et de la considérer hors du processus dans lequel elle s'insère. Dans aucun de mes programmes, il n’y a d’oubli, il ne manque pas un seul caractère et il n’y en a pas un seul de trop.

    Il n’y a pas de manuel utilisateur papier, les gestionnaires peuvent éventuellement solliciter n’importe-où dans leur application les informations qui peuvent leur être nécessaires mais en pratique, ils ne le font jamais, car ce sont eux, en fait, qui ont conçu leur propre outil. Ils disposent toutefois de fonctionnalités dans leur application pour créer s’ils le souhaitent leur propre documentation. L’objectif est de rendre les utilisateurs-gestionnaires totalement autonomes, d’œuvrer pour qu’ils s’approprient leur outil.

    Dans ma démarche, le développeur n’est qu’un traducteur des besoins exprimés par les utilisateurs-gestionnaires. Par ailleurs, l’application est en même temps un outil pédagogique pour les gestionnaires novices. Ils n’apprennent pas à utiliser leur logiciel, c’est le logiciel qui leur apprend leur métier.
    ________________________________________

    Mais on s’éloigne du sujet initial de la discussion, notamment de la question du nommage des tables et de leurs colonnes, question à laquelle je me suis initialement intéressé.
    ________________________________________

    Tiens ! Encore un vote négatif… Décidément, vous ne méritez pas que je vous consacre du temps. Aucun échange constructif, continuez donc à tourner en rond dans votre bulle confort. Salut !
    Dernière modification par Invité ; 05/01/2019 à 17h49. Motif: Ma réponse au vote négatif

  17. #17
    Membre habitué
    Avatar de martinbrait
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    74
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 74
    Points : 131
    Points
    131
    Par défaut
    Bonsoir IFA2377,

    Merci pour tes explications très détaillées, et pardonne mon style trop tranchant.
    • Je comprends, entre les lignes, que tu assumes la construction d'une base de données,
      comme un travail nécessairement solitaire, sans cadre, éventuellement normalisé, éventuellement documenté.
    • Pour toi, l'analyste mentalise jour après jour, les règles de gestion du métier.(idéalement, mieux que les gestionnaires ?) ...
      le départ du développeur, signe l'arrêt de mort du fonctionnement optimal de son application, puisqu'il part avec les règles de gestion dans son esprit.
    • Pour toi, l'analyste implémente dans ses bases, chaque nouvelle règle de gestion, sans rechigner.
    • Pour toi, l'analyste se plie, sans calendrier, aux évolutions permanentes des règles de gestion, exprimées par les gestionnaires.
    • Pour toi, l'analyste contourne éventuellement l'usage approprié de ses tables, afin de ne pas trop refondre son MCD (inexistant, raison pour laquelle il ne s'y réfère jamais).
    • Pour toi, une fois détournées, les tables, probablement patchées, ou assistées de traitements par code, peuvent "faire encore le boulot" (grosso merdo ?).
    • Pour toi, un modèle conceptuel de données est une surcharge mentale.
    • Pour toi, schématiser durablement et collectivement, données, et organisation des données, stockées par l'entreprise, n'est pas un objectif.
    • Pour toi, l'utilisateur ou le développeur, si il souhaite s'informer sur l'objectif et le fonctionnement de son application, doit préalablement l'ouvrir,
      en comptant sur son intuition et sur la chance, pour trouver le chemin vers l'aide qu'il recherche.



    Une application de gestion, développée de cette manière, est-elle dès le départ, pérenne ?
    Est-elle transmissible à une filiale de l'entreprise, sans son développeur attitré,
    individu original singulièrement créatif, parmi les individus originaux singulièrement créatifs ?

    Dans l'entreprise qui m'emploie, le turn-over des utilisateurs des bases de données est élevé.
    Les prédécesseurs de mes utilisateurs de bases, ont eux-mêmes défini le cahier des charges,
    sans tenir à jour de guide utilisateur !
    Mon prédécesseur développeur des bases, a fait le choix :
    • de ne pas rédiger les règles de gestion,
    • de ne pas implémenter dans les bases les relations entre les tables,
    • de ne pas normaliser les noms des colonnes de ses tables de données.
    • de ne laisser aucun schéma des étapes de gestion, des cas d'utilisation, des traitements.
    • de programmer incomplètement les contraintes entre les tables
    • de laisser travailler des utilisateurs avec des outils qu'ils connaissent mal, mais dont ils se sont rendus dépendants,
    • de laisser travailler son successeur développeur, avec des outils dénormalisés qu'il ne connaît pas, et dont il doit deviner le fonctionnement,
      technique et fonctionnel, notamment, lorsqu'il faut venir à bout d'une panne.
    • de laisser à son successeur, un emploi du temps qui alterne de nombreuses mises à jour, et des vérifications multiples de cohérence des données.
    • de ne faire aucun développement, simplement destiné à maintenir les applications.
    • de laisser moisir des fonctionnalités devenues obsolètes, dans ses applications.




    Les utilisateurs sont-ils (uniques) référents fiables pour garantir que tout se passe bien avec leurs outils ?
    Compte-t-on sur eux pour que, d'initiative, ils se forment les uns les autres ?


    Dans la pratique, j'interviens (à l'insu de mon plein gré) sur des pannes que mes utilisateurs créent,
    lorsqu'ils saisissent des données dans la base.
    Leur saisie ne respecte pas toujours le cahier des charges (volatilisé?), défini par leurs prédécesseurs(?).

    J'ai la désagréable impression de "tomber du placard", lorsqu'il me demandent
    • un mode d'emploi pour connaître les fonctionnalités de leur base
    • une solution pour résoudre avec eux une nouvelle panne.



    • J'ai la désagréable impression de "planer", faisant la maintenance d'outils, sans jamais prendre connaissance des règles de gestion du métier, géré par les outils.
    • J'ai la désagréable impression d'avoir des dettes de travail, pour maintenir des outils plus complexes que le métier qu'ils gèrent.
    • J'ai la désagréable impression de perdre mon temps, à m'adapter en permanence, dans des missions de dépannage.
    • Je suis loin du travail d'analyste-développeur, qui traduit chaque jour, de plus en plus finement,
      les règles de gestion du métier complexes, mais méticuleusement classées et schématisées dans un MCD,
    • J'ai la désagréable impression, jour après jour, de devoir compter sur ma charge mentale,
      au lieu de rédiger des modes d'emploi de mes applications, en temps et en heure,
      avec des schémas, des règles de gestion, et des liasses documentaires
      au bénéfice de la communauté des utilisateurs et de la communauté des développeurs.


    La solution ?
    • Idéalement, une fois mon projet terminé, je reprends ma liberté.
    • Idéalement, je transmets mon projet normalisé, dans un langage universel UML.
    • J'organise dès mon arrivée sur le poste, ma succession, pourquoi pas, au profit d'un nouveau développeur.
    • J'accepte que mon système d'information, normalisé, avec MCD, MOD, se travaille en équipe.



    Citation Envoyé par IFA2377
    Quand des informaticiens ne savent pas écouter sans préjugés un autre informaticien, comment croire que ces mêmes informaticiens soient capables d’écouter une problématique métier à informatiser autrement qu’à travers le prisme de leur formatage.
    Pour mieux appréhender les problématiques métier, Merise1/2 est-il sorti du formatage singulièrement créatif d'un seul informaticien,
    ou est-il le compromis écrit, d'un retour d'expérience collégial de plusieurs générations d'informaticiens ?

    Pragmatiquement, quel gâchis, d'alunir sur le projet de quelqu'un d'autre, qui s'est adonné à,
    s'échapper des normes, s'échapper des cadres techniques , et s'échapper de la responsabilité de transmettre des spécifications !

    Quel dommage de se résoudre à réinventer, presque entièrement le travail de son prédécesseur !

    Les instructions données dans le cours MERISE, proposent de prendre conscience de formes régulières de conception :
    clef primaire, clef alternative, clef candidate, clef secondaire, clef étrangère, dépendance fonctionnelle,
    couverture, disjonction, héritage (exclusion, inclusion, totalité, partition), égalité, unicité, identification relative,
    CIM, CIF + association, double CIF, association réflexive, historisation...
    Ces jargons sont-il intentionnellement doctrinaux et insidieux ?



    Citation Envoyé par IFA2377
    « Je promets de n’exclure aucune idée sur la base de sa source mais de donner toute la considération nécessaire aux idées de toutes les écoles ou lignes de pensées afin de trouver celle qui est la mieux adaptée à une situation donnée. »
    Bravo à tous nos pionniers, qui ont payé le prix fort, en temps passé, à ouvrir la voie !
    Je préfère prendre paresseusement les sentiers battus de conception et d'organisation,
    quand ils se présentent, formes régulières MERISE, collectivement identifiées,
    plutôt que de cheminer seul, sur ma route, content de moi, juge et arbitre.


    Citation Envoyé par IFA2377
    Les formes normales, je m’y suis intéressé dans les années 70 et les MCD, dans les années 80. Vous étiez nés ? J’ai traversé toutes les mutations technologiques de l’informatique depuis la carte perforée jusqu’à l’internet d’aujourd’hui. Ma méthode de travail s’alimente d’autonomie, de liberté, de créativité, d’audace, d’initiatives, d’aventure, d’expérimentation, de défi, de prise de risques, d’adrénaline, de responsabilités, de professionnalisme, de nouveauté, d’incertitude, de surprise, de passion, de plaisir, d’empathie... Ça vous parle ? Ou votre acrophobie ne se soigne-t-elle qu'à l'aide de modèles, de formes normales et de procrastination ?
    Acrophobe ? Pas vraiment. Les pieds un peu trop sur terre.
    Inlassablement taraudé par la question : "Comment faire pour travailler moins ?"
    En fait, je suis terrorisé à l'idée d'assumer les conséquences de mes bourdes de conception.
    Payer seul, le prix fort, au point de passer des nuits blanches de travail à réparer mes propres conneries, me dépite.

    Il y aurait alors le monde paisible des utilisateurs à faible charge, qui se reposeraient en fin de service, contents de leur modeste devoir accompli.
    Il y aurait alors le monde impitoyable du développeur insomniaque, explosé de fatigue, mécontent de réparer continuellement ses avalanches de bourdes.

    Des utilisateurs de plus en plus reposés et de plus en plus satisfaits des services rendus,
    aurait un mot gentil pour leur développeur, de plus en plus fourbu de fatigue (mais fier... de quoi ???).
    Non merci !


    D'accord, les concepts de gestion des données ont probablement profondément muté, en 30 ans.
    Peut-être aurais-tu la générosité de témoigner sur les bons et mauvais aspects, concernant cette évolution?
    Cela nous ouvrira l'esprit.

    Cordialement

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Liste des tables d'une vue
    Par wazoo333 dans le forum Oracle
    Réponses: 6
    Dernier message: 24/02/2012, 09h54
  2. [SQL2000] Générer des tables à partir de vues
    Par cedric_g dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 10/03/2008, 18h10
  3. Réponses: 3
    Dernier message: 23/01/2007, 08h14
  4. libellé des tables via les vues systèmes
    Par petit arbre dans le forum DB2
    Réponses: 2
    Dernier message: 17/10/2006, 18h28
  5. comment récupérer le liste des tables et des champs
    Par sekaijin dans le forum PostgreSQL
    Réponses: 9
    Dernier message: 26/07/2006, 16h26

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