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

 MySQL Discussion :

structure de ma base


Sujet :

MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 13
    Par défaut structure de ma base
    Bonjour,

    désolé pour ce premier message qui risque de vous sembler un peu limite, mais il faut bien je commence par quelque chose.

    j'ai quelques connaissances en bdd mais ca remonte a loin....

    je dois faire quelques pages web ui permettent de manipuler une bdd faite sous mysql. avant d'aborder toute la partie php (ce que j'irais faire ailleur apres) j'aurais quelques questions sur la maniere dont j'ai faite ma base...


    j'ai donc créé une base et 3 tables

    1ere table : tbl_utilisateur
    contient:
    ID_util
    nom_util

    2eme table: tbl_examens

    contient
    ID_exam
    nom_exam

    3eme table: tbl_saisie
    contient
    ID_saisie
    ID_util
    ID_exam
    nom_saisie


    l'idée c'est vous l'aurez compris que les 2eme premières tables contiennent des enregistrements
    et que la 3eme est la table qui sera saisie plus tard...

    1ere question
    n'est ce pas que j'ai bien fait de mettre en clef primaire ID_util, exam et saisie ?

    2eme question
    quel moteur de stockage dois-je utiliser ? MyISAM ou InnoDB ?

    3eme question

    est ce que dans la 3eme table, ID_util et ID_exam doivent être mis en index ? (je ne crois pas)

    est ce que en procedant comme cela j'arrive bien au résultat escompté ?

    Merci de vos réponses !

    Cordialement

  2. #2
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    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 818
    Billets dans le blog
    14
    Par défaut
    Citation Envoyé par Taltosm Voir le message
    1ère question
    N'est ce pas que j'ai bien fait de mettre en clef primaire ID_util, exam et saisie ?
    Si tu parles de la table 'tbl_saisie', et si c'est une table de jointure, la colonne ID_saisie est inutile.
    La clé primaire d'une table associative est composée des clés primaires des tables qui entre en jeu dans l'association.
    Donc ici la clé primaire de 'tbl_saisie' devrait être composée des deux clés étrangères ID_util et ID_exam.

    Tout dépend quel est ton cahier des charges.
    Un utilisateur peut-il passer plusieurs fois le même examen ?
    Si oui, les informations de ses différentes tentatives sont-elles conservées ou écrasées par la plus récente ?
    A toi de préciser ton besoin.

    Si tu parles de chaque colonne citée dans chacune des trois tables, la réponse est oui, c'est la clé primaire idéale si ces ID_x sont de type entier auto-incrémenté.

    2ème question
    Quel moteur de stockage dois-je utiliser ? MyISAM ou InnoDB ?
    Si tu veux gérer proprement tes données, il est préférable d'utiliser les contraintes dans la base de données plutôt que de gérer ça avec le logiciel qui y accède. Donc si tu as le choix, préfère le moteur InnoDB. Par contre, c'est un peu plus galère pour les sauvegardes.

    3eme question
    Est ce que dans la 3eme table, ID_util et ID_exam doivent être mis en index ? (je ne crois pas)
    Si ces deux colonnes forment la clé primaire comme je l'ai suggéré plus haut, c'est inutile, ce sera automatique.
    Si par contre la clé primaire est ID_saisie et que ces deux colonnes ne sont que des clés étrangères alors oui il faut les indexer, ça améliorera la performance des requêtes avec jointures.

    Est ce que en procédant comme cela j'arrive bien au résultat escompté ?
    Pour répondre à ça, il faudrait que tu nous précises ton besoin !
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    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é
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 13
    Par défaut
    pfff quelle réponse, il va me falloir du temps pour decortiquer tout cela.

    je me permet donc (en attendant) de préciser mon cahier des charges

    j'ai 10 utilisateurs, une 50aines examens et des saisies.

    le tableau final (a imprimer par exemple) donne cela

    util1 exam1 blabla
    util2 exam2 blablala
    util3 exam1 blalblla
    util4 exam5 blalbla

    la table tbl_utilisateurs représente la liste des gens qui saisissent les lignes

    la table tbl_exam offre la liste des examens disponibles

    la table tbl_saisie permet de construire la liste des utilisateurs (choisi dans la liste de tbl_utilisateur) qui font passer un examen (choisi dans la liste tbl_examens)
    ensuite le champ nom_saisie permet de rentrer une texte relatif a l'examen (il y a d'autre champs mais je fais simple si je comprend là je comprendrais plus compliqué tout seul (enfin je crois)


    donc au fil du temps les utilisateurs font un tableau comme au dessus


    en relisant ta réponse, je m'aperçois qu'elle appelle d'autres questions de ma part.

    Question 4
    si tbl_saisie est une table de jointure comme tu l'appelle est ce que cela sous entend que je ne dois pas mettre le champ nom_saisie dans cette table ?

    pour les clefs primaires elles sont définies dans leurs tables respective tbl_utilisateur pour IDutil, tbl_examens pour IDexam et tbl_saisie pour IDsaisie

    les champs IDutil, IDexam de la table tbl_saisie ne sont que des champs portant les mêmes noms que ceux des tables individuelles

    dans les premiers tests que j'ai fait, a la suite de cela je choisi le moteur Inno DB et dans les relations dans la table tbl_saisie je lie les clefs primaire des 2 autres tables aux champs du meme nom (mis en index) avec le systeme de cascade...


    j'espère que cela éclaire un peu ta lanterne, et que mon pavé ne t'aura pas découragé de continuer a me conseiller

    Cordialement
    Images attachées Images attachées  

  4. #4
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    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 818
    Billets dans le blog
    14
    Par défaut
    Citation Envoyé par Taltosm Voir le message
    Question 4
    si tbl_saisie est une table de jointure comme tu l'appelle est ce que cela sous entend que je ne dois pas mettre le champ nom_saisie dans cette table ?
    D'après ce que je comprends maintenant, on peut dire la phrase suivante :
    - Un utilisateur saisit ou pas jusqu'à plusieurs examens

    Mais on peut se poser d'autres questions complémentaires qui aideront à définir la bonne structure pour les tables :
    - Un utilisateur peut-il saisir plusieurs fois le même examen (avec des infos différentes dans les colonnes que tu n'as pas citées) ?
    - Un examen peut-il être saisi par plusieurs utilisateurs (avec là encore des infos différentes...) ?
    - La saisie d'un examen est-elle liée à des informations provenant d'autres entités (des personnes à qui on fait passer les examens, des lieux où on fait passer l'examen...) ?

    Ne sachant pas s'il s'agit d'examen de type médical ou scolaire ou autre, je ne peux pas répondre à ces questions à ta place.

    Pour répondre à ta question 4, je poserai une autre question :
    - que comptes-tu mettre dans 'nom_saisie' ?

    [quote]pour les clefs primaires elles sont définies dans leurs tables respective tbl_utilisateur pour IDutil, tbl_examens pour IDexam et tbl_saisie pour IDsaisie[quote] OK pour le principe

    les champs IDutil, IDexam de la table tbl_saisie ne sont que des champs portant les mêmes noms que ceux des tables individuelles
    Ce sont donc des clés étrangères qui permettront de faire les jointures et les contrôles d'intégrité des données.

    dans les premiers tests que j'ai fait, a la suite de cela je choisi le moteur Inno DB et dans les relations dans la table tbl_saisie je lie les clefs primaire des 2 autres tables aux champs du meme nom (mis en index) avec le systeme de cascade...
    C'est la bonne méthode pour faire des clés étrangères et utiliser les capacités du SGBD à gérer lui-même les événements qui surviennent sur des données associées.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    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é
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 13
    Par défaut
    en premier lieu, encore merci de la qualité de tes réponses, j'ai conscience d'en demander beaucoup, et je n'aurais ete tres surpris de m'entendre répondre un RTFM bien senti




    Citation Envoyé par CinePhil Voir le message
    D'après ce que je comprends maintenant, on peut dire la phrase suivante :
    - Un utilisateur saisit ou pas jusqu'à plusieurs examens
    OUI
    Citation Envoyé par CinePhil Voir le message
    - Un utilisateur peut-il saisir plusieurs fois le même examen (avec des infos différentes dans les colonnes que tu n'as pas citées) ?

    OUI

    Citation Envoyé par CinePhil Voir le message
    - Un examen peut-il être saisi par plusieurs utilisateurs (avec là encore des infos différentes...) ?
    Objection votre honneur, la question est ambigüe (je crois que la réponse apparait plus bas)

    Citation Envoyé par CinePhil Voir le message
    - La saisie d'un examen est-elle liée à des informations provenant d'autres entités (des personnes à qui on fait passer les examens, des lieux où on fait passer l'examen...) ?
    NON

    Citation Envoyé par CinePhil Voir le message
    Pour répondre à ta question 4, je poserai une autre question :
    - que comptes-tu mettre dans 'nom_saisie' ?
    je pensais y mettre la date de l'examen, le nom du patient, et la zone de texte libre


    Bon OK tu l'aura voulu, je déballe toute la sauce.

    en fin d'année le tableau final aura la forme suivante

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    secretaire1, radio_poumon, cabinet_radio1, patient1, date_de_lexamen, service_du_patient,date_de_saisie, texte_libre
    secretaire2, radio_bras, cabinet_radio1, patient1, date_de_lexamen, service_du_patient,date_de_saisie, texte_libre
    secretaire2, radio_poumon, cabinet_radio2, patient2, date_de_lexamen, service_du_patient,date_de_saisie, texte_libre

    • les secrétaires traitent les dossiers sans ordre
    • un agent qui subit plusieurs examens apparait plusieurs fois.
    • j'ai une liste finie de secrétaire, d'examens, de cabinets médicaux et de services
    • le seul doublon "non voulu" que je pourrait avoir c'est une ligne strictement identique mais la l'organisation de la saisie ne le permet normalement pas

    le tout ne sert qu'a faire des stats (que je ferais sous excel par exemple)

    je veux donc pouvoir faire apparaitre a terme dans une page web une interface permettant a une secrétaire de
    choisir son nom, un examen, un cabinet, un service dans une liste, taper une date, le nom de l'agent
    ensuite de valider et que cette ligne s'inscrive dans la base.

    accessoirement une autre interface permet d'afficher le tableau sous la forme décrite au dessus

Discussions similaires

  1. recuperation de la structure d'une base
    Par pascalT dans le forum 4D
    Réponses: 7
    Dernier message: 07/06/2006, 15h32
  2. [tables systèmes] extraction de la structure d'une base
    Par laffreuxthomas dans le forum Autres SGBD
    Réponses: 6
    Dernier message: 23/03/2006, 13h24
  3. Importer la structure d'une base de donnée dans un combobox
    Par hanines dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 23/09/2005, 22h41
  4. lire la structure d'une base de données
    Par ilyassou dans le forum Décisions SGBD
    Réponses: 2
    Dernier message: 31/08/2005, 07h00
  5. exporter la structure d'une base Sybase en ascii
    Par Jean-Cyp dans le forum Sybase
    Réponses: 5
    Dernier message: 05/11/2002, 16h15

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