Catégorisation Hiérarchique des Substances Médicamenteuses

Exercice de conception de BDD N°1
Vidéo non disponible ! Réessayez plus tard
Cette vidéo fait partie de la formation
Apprendre MySQL 8.0 par la pratique
Revoir le teaser Je m'abonne
Transcription

Cette leçon fait partie de la formation
89,00€ Je commande

Formation incluse dans l'abonnement Elephorm Je m'abonne à Elephorm

DescriptionProgrammeAvis

Cette leçon fait partie de la formation
89,00€ Je commande

Formation incluse dans l'abonnement Elephorm Je m'abonne à Elephorm

Les objectifs de cette vidéo sont de :

  • Apprendre à créer et gérer une hiérarchie de tables pour des bases de données médicales.
  • Comprendre l'importance des contraintes de clé étrangère pour l'intégrité des données.
  • Savoir extraire des données spécifiques en utilisant des jointures complexes.

Apprenez à structurer une base de données afin de catégoriser les substances médicamenteuses par famille et sous-famille tout en respectant des règles métiers spécifiques.

Dans cette leçon, vous allez découvrir comment faire évoluer une base de données pour inclure la catégorisation des substances par famille et sous-famille. Nous examinerons plusieurs approches pour répondre à cette exigence en créant des structures de tables adéquates. Vous apprendrez à :

  • Créer une table pour associer les familles et sous-familles.
  • Implémenter des contraintes de clé étrangère pour garantir l'intégrité relationnelle.
  • Récupérer et insérer des données spécifiques.

À travers différents exemples, nous explorerons la meilleure stratégie pour implémenter ces modifications sans altérer les tables existantes, en respectant les contraintes métiers et en répondant à des cas d'utilisation spécifiques tels que l'extraction de médicaments contenant des bétalactamines.

Voir plus
Questions réponses
Pourquoi est-il crucial de ne pas altérer les tables existantes lors de l'évolution d'une base de données?
Ne pas altérer les tables existantes assure l'intégrité des données et la compatibilité ascendante avec les applications et systèmes qui utilisent déjà la base de données.
Quelle est l'importance des contraintes de clé étrangère dans la base de données?
Les contraintes de clé étrangère garantissent l'intégrité relationnelle en s'assurant que les données sont cohérentes et empêchent les incohérences au sein de la base de données.
Comment peut-on récupérer les médicaments contenant un certain type de substance?
On peut utiliser des jointures entre les tables de médicaments et les tables de substances en sélectionnant les enregistrements où les substances appartiennent à la catégorie recherchée.
Dans cette vidéo, on va mettre en application les connaissances acquises au cours des dernières vidéos et je vous demande de réfléchir à l'exercice suivant. Il est assez long, l'énoncé est le suivant. En fait, on se rend compte qu'on doit faire évoluer notre base de données parce que des nouveaux usages, nouveaux cas d'utilisation émergent avec le temps. Concrètement, on considère qu'on va avoir besoin de catégoriser les substances par famille et par sous-famille de principe actif. Par exemple, pour extraire la liste de tous les médicaments contenant un antibiotique de la famille des bétalactamines, pour ne prendre qu'un exemple concret. Il y a un certain nombre de règles métier que j'aimerais que vous implémentiez dans cet exercice. Premièrement, considérez qu'une substance doit appartenir à une seule sous-famille. C'est-à-dire que si c'est une bétalactamine, ce n'est pas un macrolide. La deuxième règle métier, c'est qu'une sous-famille peut rassembler 0, 1 ou plusieurs substances. C'est-à-dire que vous allez pouvoir avoir dans votre base de données une sous-famille et que cette sous-famille ne soit associée à aucune substance. Une sous-famille doit appartenir à une seule famille. C'est-à-dire qu'une bétalactamine, c'est un antibiotique, ce n'est pas un antiparasitaire. Une famille peut rassembler 0, 1 ou plusieurs sous-familles. C'est-à-dire qu'on peut avoir une famille dans notre base de données qui n'est associée temporairement qu'à aucune, une seule ou plusieurs sous-familles. Dans le cadre de cet exercice, on va faire les choses simplement. On va choisir de ne caractériser une famille ou une sous-famille que par leur nom. Je vous ai indiqué un certain nombre de consignes qui sont les suivantes. Mettez à jour la base de données pour catégoriser chaque substance selon un système hiérarchique de famille et de sous-famille. S'il le faut, créez autant de tables que nécessaire. Je vous demande de ne pas toucher aux tables existantes. N'altérez pas l'état de la base de données de départ. Ajoutez éventuellement des choses si nécessaire, mais ne modifiez pas les tables. Je vous fournis ici un tableau qui contient une correspondance famille-sous-famille pour un certain nombre de substances. Il va falloir utiliser cette donnée pour répondre à la question initiale qui est « Donnez-moi la liste des médicaments qui contiennent une substance appartenant à la famille des bétalactamines. » Je vous laisse mettre la vidéo en pause ou même l'arrêter parce que ça va prendre un certain temps pour répondre à cette question. Prenez votre temps. Vous pouvez éventuellement envisager plusieurs possibilités. Dans un instant, je vous montre comment j'ai procédé. Je vous montre comment j'ai apporté une solution à cet exercice, ou plutôt des solutions, parce que j'ai considéré trois manières d'apporter une réponse aux besoins formulés. La proposition A est la suivante. On va créer une table groupe. Cette table groupe va renseigner à elle-même la correspondance entre les familles et les sous-familles. C'est-à-dire qu'on va créer une colonne qui contiendra les familles et une colonne qui contiendra les sous-familles. On peut par exemple créer cette table. Ensuite, il va falloir qu'on insère un certain nombre de données dans notre table. Par exemple, j'insère ici deux enregistrements. Le premier contenant antibiotiques comme famille et bétalactamines comme sous-famille. Le deuxième, antibiotiques comme famille et macrolides, une autre sous-famille d'antibiotiques, comme sous-famille. Si j'insère les enregistrements et que je visualise un peu l'aspect de ma table groupe, elle se présente de la manière suivante. Il faut s'attendre dans ce cas à avoir des entrées dupliquées dans la colonne famille, puisqu'on peut avoir plusieurs sous-familles pour la même famille. J'attire votre attention sur quelques éléments dans la syntaxe de création de la table. On a indiqué que la sous-famille était note nulle. C'est important parce que dans nos règles métiers, on demande à ce qu'une sous-famille soit forcément associée à une famille. Donc si la colonne famille était nullable, on ne pourrait pas implémenter cette règle métier. Deuxièmement, on demande à ce que les sous-familles soient nulles. Pourquoi nulles ? Parce qu'on peut très bien avoir une famille qui n'est associée à aucune sous-famille, et unique. Ceci étant dit, on va pouvoir créer une table substance A, qui s'apparente à la table substance d'origine de notre base de données, à la différence qu'on a rajouté une colonne ici, groupeId. Ce groupeId va contenir une référence vers la clé primaire de la table groupe qu'on vient de créer. J'ai indiqué qu'elle était note nulle. C'est important puisque j'ai dit que chaque substance doit forcément être associée à une sous-famille. Donc si ici j'avais une colonne nullable, je pourrais très bien avoir des substances qui ne soient associées à aucune sous-famille. Donc c'est important de respecter ce détail. J'ai également omis le mot clé autoincrement dans la déclaration de ma clé primaire. Simplement parce que je vais réutiliser des id en provenance de la table substance. Donc je ne peux pas avoir un autoincrement. Donc créons cette table. Et ensuite je vais implémenter la continte de clé étrangère entre ma table substance A et ma table groupe, comme on l'a fait dans les vidéos précédentes. Ensuite je vais récupérer l'id de la sous-famille Betalactamine. Donc je procède comme ça. Et dans ce cas, ce que je vais faire ensuite, c'est que je vais pouvoir utiliser l'id que j'ai stocké dans cette variable lorsque je vais faire une insertion de données dans ma table substance A. Je récupère donc les noms des substances issues de la table substance ainsi que leur id respectif et j'associe à la volée l'id de la sous-famille Betalactamine. Donc quand j'insère ces enregistrements, tout se passe bien. Et ensuite je peux valoriser ces nouvelles tables et les données qu'elles contiennent en faisant des jointures pour récupérer le nom des médicaments qui contiennent au moins une Betalactamine. Donc je vais faire une jointure entre la table Medoc et la table Medoc Substance qui préexiste dans ma base de données. Et je vais ensuite venir greffer ma table substance A sur ma table Medoc Substance sur la base de l'égalité entre la colonne substance id de la table Medoc Substance et la colonne id de la table substance A. Ensuite je fais une jointure sur la table groupe sur la base de la correspondance d'id au niveau du groupe et je fais finalement une restriction. Lorsque j'exécute cette instruction, je me retrouve avec 192 noms de médicaments qui ont tous en commun de contenir des Betalactamines. C'était la première proposition, maintenant j'aimerais vous en montrer une autre. Donc on va commencer par supprimer l'étape que je viens de créer. Remarquez l'ordre dans lequel je les supprime. Remarquez également que je supprime plusieurs tables successivement avec la même instruction en séparant les noms des tables par des virgules. Donc là j'ai bien supprimé mes tables et je repars du point de départ. Cette deuxième possibilité se présente de la manière suivante. Cette fois-ci, je ne vais pas regrouper les familles et les sous-familles dans une même table, je vais créer des tables spécifiques pour chacune d'entre elles. Donc je vais créer une table famille. Dans cette table famille, je vais insérer un enregistrement antibiotique et ensuite je vais créer une table sous-famille. Cette table sous-famille comporte une colonne Family ID qui fait référence à l'ID de la famille dans la table famille. Donc j'implémente une clé étrangère ainsi que la contrainte qui lui est associée à la volée en créant la table. Ensuite je peux récupérer l'ID de la famille antibiotique ici et m'en servir pour insérer deux enregistrements dans ma table sous-famille. Donc le résultat est le suivant. Si je regarde le contenu de la table sous-famille, j'ai effectivement deux enregistrements, des bétalactamines, des macrolides, qui font tous référence à l'ID numéro 1 de la famille située dans la table famille. Cette fois-ci, je vais créer une table substance B qui va faire référence à la sous-famille. Encore une fois, je fais en sorte que cette colonne soit non nullable parce qu'une substance est forcément associée à une sous-famille et donc j'implémente ensuite une contrainte de clé étrangère sur la base de cette colonne qui lie la table substance B et la table sous-famille. Je peux donc exécuter cette instruction. Je récupère ensuite l'ID de la sous-famille bétalactamine et je me sers de la valeur stockée dans cette variable pour insérer depuis la table substances les substances dont les noms correspondent aux principes actifs qui sont fournis dans le tableau. J'exécute cette instruction et enfin je peux m'assurer que je peux extraire de ma base de données des médicaments qui contiennent des bétalactamines. Je procède de la même manière jusqu'ici et ensuite je valorise la relation entre la table substance B et la table sous-famille puis entre la table famille et la table sous-famille je termine par une restriction et quand j'exécute cette requête j'ai effectivement les mêmes enregistrements 192 lignes, les mêmes lignes. Je supprime les tables que je viens de créer pour vous montrer la dernière proposition que je peux faire. Ici je vais rassembler dans une même table les familles et les sous-familles un peu comme je l'ai fait dans la première proposition. La différence ici c'est que je mets en place une relation hiérarchique entre les familles et les sous-familles. Pour ce faire donc je crée une table avec trois colonnes une colonne qui contient un nom et alors cette fois-ci le nom peut très bien désigner une famille ou une sous-famille donc c'est en quelque sorte une colonne un peu hybride qui contient une information dont a priori on ne sait pas si c'est une famille ou une sous-famille ce qui permet de le savoir c'est la colonne parent ID qui va contenir l'ID du parent. Si cette colonne ne contient rien alors ça veut dire qu'il n'y a pas de parent et donc qu'il s'agit bien d'une famille. S'il y a quelque chose dedans et bien ça veut dire qu'on a affaire à une sous-famille et donc l'ID qui se trouve dans cette colonne c'est l'ID du parent de cette famille donc de la famille. Il y a bien sûr une relation clé primaire clé étrangère entre la colonne ID et la colonne parent ID et cette contrainte de clé étrangère est implémentée comme on l'a fait précédemment. La différence par rapport à la situation initiale, à la première proposition que j'ai faite c'est que cette fois-ci c'est une référence qui se fait sur la même table c'est-à-dire que je prends ici parent ID qui est la colonne de la table famille et je référence la table famille et en particulier sa colonne ID. Je peux donc créer cette table et ensuite il me reste à insérer des enregistrements. Comment est-ce que je vais le faire ? J'insère déjà un premier enregistrement qui contient antibiotiques et default pour la colonne parent ID. Donc il s'agit d'une famille dans ce cas. Default fait référence à quoi ? Ici au fait que cette colonne est nullable. Je n'ai pas précisé de valeur par défaut particulière donc lorsque MySQL a exécuté ce script il a considéré que la valeur par défaut de la colonne parent ID c'était nulle. En utilisant default ici c'est comme si j'avais écrit nulle à la place de default. Ensuite je vais récupérer l'ID de cette famille dont le nom est égal à antibiotiques et je vais m'en servir pour insérer deux autres enregistrements dans cette même table. Un enregistrement pour lequel le nom sera bétalactamine qui est associé à la famille que je viens de créer donc avec l'ID que j'ai récupéré et une autre sous famille macrolide qui seront également considérées comme des antibiotiques. Donc je peux exécuter ces trois instructions et m'assurer que j'ai bien le résultat attendu. Donc là je vois que j'ai mon premier enregistrement qui correspond à ma famille. Je sais que c'est une famille parce que je n'ai rien dans la colonne parent ID et ensuite j'ai les deux enregistrements qui suivent bétalactamine et macrolide qui sont toutes les deux des sous familles parce qu'on a un ID dans la colonne parent ID qui fait référence à l'ID 1 donc je sais qu'en fait les bétalactamines et les macrolides sont des antibiotiques. Ceci étant fait, je peux créer une table substance je vais l'appeler substance C de manière assez comparable à ce que j'ai fait dans le premier exercice finalement sauf qu'au lieu ici d'avoir un groupe ID, j'ai un famille ID qui référence les IDs qui se trouvent là. Donc en fait je peux référencer aussi bien une famille qu'une sous-famille. Cette colonne famille ID est non nullébole ça veut dire que je suis obligé de choisir une famille ou une sous-famille pour chaque substance. Donc je peux exécuter cette instruction j'ai créé une table substance C je peux ensuite récupérer l'ID de la sous-famille dont le nom est bétalactamine d'ailleurs a priori quand j'exécute cette instruction je ne sais pas s'il s'agit d'ailleurs d'une famille ou d'une sous-famille et peu importe on s'en fiche ce qui nous intéresse ici c'est d'avoir l'ID. Je récupère donc cet ID et je m'en sers comme précédemment pour ajouter des enregistrements dans ma table substance C en provenance de la table substance. Pour terminer je valorise l'étape que je viens de créer avec une succession de jointures internes jusqu'ici rien de différent par rapport à ce qui précède il y a donc une petite subtilité ici c'est que je vais faire une jointure entre la table substance C et la table famille en donnant un premier alias à la table famille ici SF pour sous-famille en considérant que l'ID associé à la colonne family ID de la table substance C c'est l'ID de la sous-famille puis je fais une jointure de la table famille sur elle-même en utilisant cette fois-ci un alias F qui désigne la famille de telle sorte que le parent de la sous-famille ce soit la famille je peux exécuter cette instruction et j'ai exactement les mêmes enregistrements donc voilà pour les trois possibilités que j'ai à vous proposer pour résoudre cet exercice maintenant vous vous doutez bien qu'elles ne sont pas toutes équivalentes et dans l'exercice suivant je vous demanderai de réfléchir à celle qui est la plus judicieuse

Programme détaillé

Nos dernières formations Code & Data
  • Nouveau
    Maîtriser FlutterFlow - De l'Idée à l'Application
    Découvrir
    Cette formation en FlutterFlow est l'outil idéal pour tout développeur souhaitant créer des applications mobiles robustes et interactives sans coder de manière complexe. Grâce à des modules complets et structurés, vous apprendrez à utiliser FlutterFlow et Firebase, à sécuriser vos données, à concevoir des interfaces utilisateur élégantes et à intégrer des API telles qu'OpenIA. Rejoignez-nous pour transformer vos idées en applications innovantes et performantes.
    4h08 57 leçons
  • Webflow - Créer la landing Page d'OpenAI
    Découvrir
    À l'issue de cette formation, les participants seront capables de créer de manière autonome une landing page sophistiquée, similaire à celle d'OpenAI, en utilisant les fonctionnalités avancées de Webflow pour le design responsive et les interactions.
    3h48 19 leçons
  • Apprendre Svelte 3 et SvelteKit 1.0
    Découvrir
    Créez des applications web modernes et ultra-rapides avec notre formation "Apprendre Svelte 3 et SvelteKit 1.0". Rejoignez-nous et devenez un expert du développement JavaScript ! 🚀 #Svelte #SvelteKit #DéveloppementWeb
    7h42 77 leçons
  • Apprendre Vue JS 3
    Découvrir
    Apprenez à créer des applications web modernes avec notre formation "Apprendre Vue JS 3". Rejoignez-nous et maîtrisez ce puissant framework JavaScript ! 🚀 #VueJS #FormationWeb #Développement
    11h47 91 leçons
  • Gratuit
    Apprendre ChatGPT
    Découvrir
    Ce cours vise à fournir une compréhension approfondie de l'intelligence artificielle, en se concentrant sur l'utilisation pratique de ChatGPT et DALL-E. Les participants découvriront comment l'IA peut transformer des domaines variés tels que le marketing, le développement web, et le design graphique. Le contenu couvre les bases de l'IA, l'art de créer des prompts efficaces, l'utilisation de plugins avancés, et le codage assisté par IA. Des projets pratiques permettront d'appliquer ces connaissances dans des scénarios réels. Destiné aux professionnels de la technologie, aux marketeurs, aux développeurs, et à toute personne intéressée par l'IA, ce cours est une opportunité d'acquérir des compétences innovantes et applicables dans divers contextes professionnels et créatifs. Les prérequis incluent une compréhension basique de l'informatique et un intérêt pour l'IA. Le cours promet une aventure d'apprentissage enrichissante, ouvrant de nouvelles perspectives dans l'utilisation de l'intelligence artificielle.
    3h12 30 leçons