Bonjour à toutes et à tous,
Le contexte
Je débute en matière de base de données puisque pour l'instant je n'en ai fait qu'une seule.
Je travaille en recherche clinique. On me demande de concevoir les bases des études que nous gérons.
Une étude c'est un cahier d'observation permettant de recueillir les données de la recherche et une base associée.
Un cahier d'observation est constitué de bordereau. Chaque bordereau se divise en paragraphe et chaque paragraphe en question. Les réponses aux questions peuvent être des textes, des nombres, des listes de choix à réponse unique ou des dates.
Tout ceci est donc très structuré.
Je me suis donc dit qu'il pourrait être tout à fait intéressant de concevoir une base de méta-données des études de manière à tenter d'automatiser la création du cahier d'observation et la création de la base associée.
Ce que j'ai fait (je n'oserai pas appeler ça un modèle...)
J'ai créé :
- une table d'études MD_ETUDE stockant le titre et le nom de l'étude ;
- une table des bordereaux MD_BORDEREAU avec titre, type de bordereau, numéro d'ordre, nombre de page souhaité. Le type de bordereau est un acronyme de 3 lettres ; le nombre de page est là pour divisé le futur formulaire en plusieurs pages, histoire de ne pas trop jouer avec la molette de la souris ;
- une table des paragraphes MD_PARAGRAPHE avec titre, numéro d'ordre et numéro de la page du bordereau sur laquelle le paragraphe devra apparaitre
- une table MD_QUESTION précisant le numéro d'ordre de la question, le libellé de la question, le branchement logique éventuel de la question (question du genre Sexe H/F Si c'est une femme, est-elle enceinte ?)
- une table réponse MD_REPONSE avec :
le nom de la table qui devra stocker la variable ci-dessous
le nom de la variable qui devra stocker la réponse à la question dans la base de l'étude
le type de la réponse
la description de la réponse
le message en cas d'erreur
si le null est interdit
si le champ est requis (vous aurez reconnu les champs d'Access)
si les contrôles sur la variable devront être poussés
un champ de liaison vers les propriétés de la réponse selon son type
Les différents types de réponses sont stockés dans une table MD_TYPE et les propriétés de la réponse dans des tables MD_CHOIX (listes de choix à réponse unique), MD_OUINON (variante très courante de la réponse MD_CHOIX), MD_DATE, MD_MEMO, MD_TEXTE, MD_NUM. Dans ces tables on retrouve les infos propres au type de réponse (format, masque, valeur par défaut, valide si, limites max et min absolues et relatives pour les dates et les nombres, nombre de ligne pour la réponse pour les textes et les mémos, etc...). Enfin une dernière table MD_CHOIX_CODAGE, liée à la table MD_CHOIX permet d'associer un codage aux éléments de la liste (exemple Sexe : Homme codé 1 et Femme codé 2).
Je vous joins le schéma relationnel.
Relation.pdf
Mes difficultés
Mes difficultés commencent aux tables MD_QUESTION et MD_REPONSE. Oui c'est à partir de là évidemment que la structure mérite d'être bien pensée, bien réfléchie, que ça se complexifie un peu...
J'avoue avoir du mal avec les relations de manière générale et notamment avec le type de relation dans Access. Entre MD_QUESTION et MD_REPONSE, formellement j'ai plutôt une relation 1 à 1 : pour une question je n'ai qu'une seule réponse et pour une réponse j'ai une seule question, notamment parce que dans la table réponse, j'ai le nom de la variable qui stockera la réponse à la question dans la base de l'étude. Mais dans Access, je n'ai pas vraiment compris comment faire. Et entre MD_REPONSE et mes tables de propriétés, formellement je peux avoir un enregistrement de la table MD_NUM pour plusieurs réponses (par exemple si on pose plusieurs fois la même question au cours du temps) mais dans les faits, je ne pense pas réutiliser le même enregistrement. Simplement parce que je ne sais pas comment le retrouver facilement. Du coup j'envisageais de définir un enregistrement de propriété pour chaque réponse. Du coup je bascule plutôt sur une relation 1 à 1, non ?
Je sais que mon modèle n'est pas bon pour l'instant. Il suppose que pour chaque réponse je doive peupler toutes les tables de propriétés selon le type de réponse MD_DATE, MD_NUM, MD_CHOIX, etc... En fait je me demande s'il ne vaudrait pas mieux faire le lien entre la clé primaire des enregistrement de la table MD_REPONSE et une clé étrangère dans les tables de propriétés selon le type de réponse... Quand je vous dis que j'ai du mal avec les relations, je ne vous mens pas !!!
Du coup, si vous avez des idées, des conseils (notamment de lecture) ou si vous avez repéré des "erreurs" de conception, bref, si vous avez le temps de me filer un coup de main, je suis définitivement preneur !!!
Merci de m'avoir lu jusqu'au bout et merci d'avance pour votre aide !
Bonne journée
Laurent
Partager