106 views
--- tags : TNSI, BDD --- # Le modèle relationnel L'objectif est d'organiser des données pour pouvoir les traiter efficacement. Nous allons étudier une manière de les traiter appelée **modèle relationnel**. ## Relation, attribut, enregistrement, domaine :::info Une **relation** regroupe des données qui ont les mêmes **attributs**. Toute relation possède un nom unique. Chaque donnée individuelle est appelée un **enregistrement**, dont les valeurs constituent un **tuple** ou **uplet**. ::: Par exemple, on pourrait établir une base de données des monuments historiques de France. Un monument historique possède plusieurs attributs, qui sont son nom, la commune où il se trouve, ses coordonnées (latitude, longitude)... et bien d'autres. On représente très souvent les données sous forme de table. Voici un extrait d'une relation "Monuments Historiques". > Table Monuments | Nom | Commune | Latitude | Longitude | Département | | -------------- | ---------- | -------- | --------- | ----- | | Pont du Diable | Céret | 42.4953 | 2.74411 | Pyrénées-Orientales | | Pont du Diable | Montoulieu | 42.9060 | 1.6405 | Ariège | | ... | ... | ... | ... | :::info Les relations sont représentées si souvent par des tables que, par abus de langage : - une relation est appelée **table** ; - un attribut est appelé **colonne** ; - un enregistrement est appelé **ligne**. ::: Les données ne peuvent pas prendre n'importe quelle valeur : le nom d'un monument est un texte, la latitude un nombre (on pourrait même préciser ; un nombre compris entre -180 et 180)... :::info Le **domaine** d'un attribut est l'ensemble des valeurs qu'elle peut prendre. ::: ## Repérer un élément : clé primaire :::info Une **clé primaire** est la donnée d’un ou plusieurs attributs qui permettent d’identifier un enregistrement. ::: Comme on le voit dans l'exemple, le nom ne peut pas être une clé primaire, car il y a souvent des homonymes. Un nom ou tout autre attribut peut aussi être modifié. Souvent les tables contiennent un attribut "identifiant" qui est un nombre entier, différent pour chaque enregistrement. Exemple : tous les élèves de France possèdent un INE (identifiant national élève) unique à conserver. L'élève peut changer de nom, d'adresse, d'établissement... mais conserve son INE. ## Clé étrangère Notre table en exemple présente plusieurs problèmes : - redondance : ce n'est pas la peine de préciser le département, si on connait la commune ; - non unicité : il existe plusieurs communes de même nom, comment faire pour les différencier ; - problème de mise à jour : si une seule commune change de nom, il faudra mettre à jour toutes les lignes de ses monuments historiques. Pour résoudre ce problème, on crée une autre table, appelée "Communes". L'INSEE attribue un code à chaque commune et département. Savez-vous qu'il existe une commune appelée Montoulieu dans l'Hérault ? Et pourquoi pas ajouter le nom du ou de la maire si on veut lui écrire ? > Communes | Code_commune | Nom_commune | Code_département | Nom_maire | | ------------ | ---------- | ---------------- | ----- | | 66049 | Céret | 66 | Coste | | 09210 | Montoulieu | 09 | Fernandez | | 34171 | Montoulieu | 34 | Chafiol | L'attribut "Code_commune" est une clé primaire de la table "Communes". Modifions la table "Monuments" en conséquence : > Monuments | Nom | Commune | Latitude | Longitude | | -------------- | ---------- | -------- | --------- | | Pont du Diable | 66049 | 42.4953 | 2.74411 | Pyrénées-Orientales | | Pont du Diable | 09210 | 42.9060 | 1.6405 | Ariège | Dans la table "Monument", l'attribut "Commune" doit être égal à une valeur de l'attribut "Code_commune" de la table "Communes". :::info Dans une certaine table, une **clé étrangère** est une clé primaire d’une autre table. Elle permet de lier deux tables. ::: Dans notre exemple, il suffit d'interroger la table "Communes" pour connaître le nom de la commune et du maire. Lors de l'élection du nouveau maire d'une commune qui possède 130 monuments, on n'a pas besoin de modifier 130 valeurs, mais une seule. - "Commune" est une clé étrangère de la table "Monuments" qui fait référence à l'attribut "Code_commune" de la table "Communes" ; - Code_département est une clé étrangère de la table "Communes". On peut imagine qu'elle fait référence à la clé primaire (dont on ne connait pas le nom) d'une table "Départements". ## Schéma relationnel :::info Le **schéma** d’une base de données relationnelle est la liste des tables, des noms et des domaines des attributs de ces tables, ainsi que la liste des clés primaires et étrangères. ::: Le schéma ne donne pas les données mais seulement la façon dont elles sont organisées. Il existe différentes conventions : souvent, on ++souligne++ les clés primaires et on précède les clés étrangères d'un #. Dans notre exemple, le schéma relationnel serait : > **Monuments**( >> Nom: Chaîne de caractères, >> ++ID++: Nombre entier naturel, >> #Commune: Nombre entier naturel clé étrangère vers la table **Communes**, >> Latitude: Nombre réel, >> Longitude: Nombre réel) > **Communes**( >> Nom_commune: Chaîne de caractères, >> ++Code_commune++: Nombre entier naturel, >> Nom_maire: Chaîne de caractères, >> #Code_département: Nombre entier naturel, clé étrangère vers la table **Départements**)