Académique Documents
Professionnel Documents
Culture Documents
données
Tout programme informatique, qu'il soit une appli mobile, web, ou un logiciel de
bureau, utilise des bases de données.
23/11/2022
1 Le concept de base de données
Vous découvrirez tout d’abord le concept de base de données, à quoi ça sert et comment on
l’utilise
2 Type de données
Vous apprendrez à reconnaître celles qui sont très structurées, et celles qui le sont moins
Sommaire
3 Modélisation d’une base de données
Vous modéliserez une base de données en dessinant votre premier diagramme de classes UML
2
Mise
En contexte
Mise en contexte
Tout au long du cours, vous suivrez ce scénario : vous faites partie d’une
équipe de développeurs et développeuses d’une application de Smartphone.
L’une des fonctionnalités originales de cette application est qu’elle
permettra de vous rendre sur les lieux de tournage de vos films ou séries
préférés. Dans votre équipe, vous êtes chargé de réaliser la structure de la
base de données. Vos collègues, quant à eux, se chargeront de programmer
la partie applicative de l’appli.
OBJECTIFS PÉDAGOGIQUES
Comme son nom l’indique, une base de données (BDD), ça sert à stocker des données !
En général, ce ne sont pas des humains qui interagissent avec la base de données, mais plutôt des
programmes informatiques (applis mobiles, logiciels, sites web, etc. ).
- Le site web Wikipédia vous permet d’accéder à des données de type encyclopédique.
- L’application Smartphone Instagram stocke des données photos.
- Votre logiciel de messagerie interagit quant à lui avec vos e-mails : ce sont des données également !
La base de données et le programme informatique (appli, site web, etc.) sont complémentaires : l’un ne
va pas sans l’autre. Si vous arrêtez un programme informatique qui n'est pas lié à une base de données,
le programme ne se souviendra plus de rien.
C'est pour ça qu'il doit interagir avec la base de données : elle est en quelque sorte sa mémoire.
Le concept de base de données
Découvrez le système de gestion de base de données (SGBD)
Le SGBD est spécialisé dans le stockage, l’accès et l’écriture de données. Eh oui, bien gérer les données,
c’est tout un métier ! De cette manière, les programmes ou applications qui interagiront avec un SGBD
n’auront plus à se soucier :
Nous l’utiliserons plus tard dans ce cours. Il est assez simple d’utilisation : il est donc parfait pour débuter.
Si vous avez déjà fouillé dans les dossiers de votre ordinateur, vous avez probablement déjà rencontré des
fichiers dont l’extension est .db, .db3, .sqlite ou .sqlite3.
Tous ces fichiers sont créés et lus par SQLite. Quand vous en voyez un, vous savez qu’il s’agit d’une base de
données, et qu’il y a des données dedans !
Le concept de base de données
Découvrez le système de gestion de base de données (SGBD)
RÉSUMÉ
- Une base de données sert à stocker des données pour qu’elles soient accessibles par un ou plusieurs
programmes/applications.
- Un SGBD est un programme qui fait l’intermédiaire entre le programme/application et les données, à
l’aide d’un langage prédéfini, comme le SQL, par exemple.
- Le SGBD est spécialisé dans le stockage de données, et optimise les accès en lecture et en écriture.
Maintenant que vous savez ce que sont une BDD et un SGBD, il faut entrer un peu plus dans le détail des différentes
formes que peut prendre une donnée. Cela nous permettra de bien choisir la forme de la BDD qui accueillera nos données
des lieux de tournage de films.
Modélisez vos bases de données
Choisissez entre une BDD relationnelle ou NoSQL
Le concept de base de données
Choisir entre une BDD relationnelle ou NoSQL
Vous avez déjà utilisé un tableur comme Excel, Google Sheet, ou LibreOffice Calc ? Alors bravo ! Vous savez
manipuler des données dites structurées.
Sur un tableur, il y a des lignes et des colonnes.
En général, on y indique sur chaque ligne chacune des entités que l’on enregistre, et en colonne les
caractéristiques de chacune de ces entités.
10
Le concept de base de données
Choisir entre une BDD relationnelle ou NoSQL
STRUCTURE
11
Le concept de base de données
Découvrez le système de gestion de base de données (SGBD)
Il s’agit d’un phénomène très actuel où une importante quantité de données est produite au quotidien.
En effet, on utilise de plus en plus d’appareils électroniques tels que nos Smartphones, tablettes, etc. Face à ce
volume important de données, il a fallu s’adapter et trouver de nouvelles technologies pour stocker ces
données, mais aussi pour savoir les représenter, les organiser, et surtout les analyser !
- Volume
- Vélocité
- Variété
Arrêtons-nous sur ce troisième point : la variété. Les formes de données générées par le Web sont de plus en
plus diverses : images, vidéos, textes, opinions sur les réseaux sociaux, e-mails, etc. Ces données sont
difficiles à représenter sous forme de tableau : on dit donc qu’elles sont peu structurées.
Les données de nos lieux de tournage sont au contraire structurées, car elles se représentent facilement
dans un tableau.
12
Le concept de base de données
Découvrez le système de gestion de base de données (SGBD)
Imaginons que vous souhaitiez enregistrer des informations sur des personnes (dans le strict respect du
RGPD, bien entendu), de manière structurée. Vous allez donc faire un tableau avec une ligne par personne
et une colonne par caractéristique.
En effet, on peut caractériser une personne par son état civil (nom, prénom, date de naissance, etc.), mais
aussi par ses comportements sur Internet (quelles pages va-t-elle visiter?), par ses comportements d’achat
(quels produits achète-t-elle?), par les personnes avec qui elle interagit (son cercle amical, professionnel,
associatif), et il y a encore beaucoup d’autres possibilités !
De plus, vous obtiendrez rarement toutes les caractéristiques d’une personnes d’un coup, loin de là !
13
Le concept de base de données
Découvrez le système de gestion de base de données (SGBD)
Cela veut dire que pour une ligne donnée, seule une toute petite proportion des colonnes seront remplies ;
Et pour la ligne suivante, d’autres colonnes seront remplies, mais pas forcément les mêmes !
Vous aurez donc un tableau très peu rempli, avec énormément de colonnes. Avouez que sur Excel, ce n’est
pas pratique d’avoir une feuille énorme avec très peu de données éparpillées un peu partout !
14
Le concept de base de données
Découvrez le système de gestion de base de données (SGBD)
Si on reprend l’exemple des données relatives à une personne, on peut le faire sous une représentation de type
Clé-Valeur.
C’est-à-dire que chaque clé est l’intitulé d’une caractéristique (« nom », « prénom », etc) et à chaque clé
est associée sa valeur (« Diard », « Margeritte », etc.).
L’une des représentations qui utilise le principe Clé-Valeur est le format de fichiers JSON (« JavaScript
Object Notation »).
Le concept de base de données
Découvrez le système de gestion de base de données (SGBD)
Le plus souvent, on utilise le format CSV (« Comma-separated values »), conçu pour représenter un tableau.
La première ligne du fichier donne le nom des colonnes, et les suivantes présentent toutes les données,
séparées par des virgules, des point-virgules ou des tabulations :
Le plus souvent, on utilise le format CSV (« Comma-separated values »), conçu pour représenter un tableau.
La première ligne du fichier donne le nom des colonnes, et les suivantes présentent toutes les données,
séparées par des virgules, des point-virgules ou des tabulations. Comme vous le voyez ci-dessus, le
séparateur utilisé n'est pas une virgule, mais un point virgule.
16
Le concept de base de données
Découvrez le système de gestion de base de données (SGBD)
PROBLÈMES COURANTS
Sachez que cela est généralement dû à un problème d'encoding. L'encoding, c'est la norme utilisée pour transformer les différents
caractères que nous utilisons dans une version "informatique".
C'est un sujet assez complexe que nous n'aborderons pas ici en détail, mais sachez que les 3 grandes normes d'encoding sont :
- ASCII : l'enconding le plus basique qui ne permet pas d'écrie des accents
- Latin-1 : un encoding très utilisé, notamment via Windows et Excel
- UTF-8 : un enconding très large et très permissif, très utilisé dans le web et en data
Si vous avez des caractères étranges au chargement d'un fichier CSV, essayer de recharger votre fichier en spécifiant un encoding 17
différent: latin-1 ou UTF-8 par exemple.
Le concept de base de données
Découvrez le système de gestion de base de données (SGBD)
Connaître la structure de vos données vous permet de bien choisir votre SGBD. Si votre SGBD est mal adapté
à vos données, alors il sera plus complexe de lui formuler des requêtes pour accéder aux données, et le temps
de réponse sera probablement plus long.
Le plus pratique pour stocker des données structurées, c’est d’utiliser une base de données relationnelle.
Ce terme vient du « modèle relationnel », qui est un moyen de représenter les relations dans un ensemble
d’informations.
Les SGBD qui gèrent les bases de données relationnelles sont appelés SGBDR. Pour éviter d’avoir un
langage différent pour chacun de ces SGBDR, on a créé le langage SQL. Il est commun à la quasi-totalité
des SGBDR, et il permet d’insérer, de lire, d’actualiser ou de supprimer des données dans une base
relationnelle
18
Le concept de base de données
Découvrez le système de gestion de base de données (SGBD)
C’est plus complexe, car les données non structurées ont des formes extrêmement variées. Tout dépend de
ce que vous voulez y stocker. Les SGBD qui s’écartent du modèle relationnel sont appelés « NoSQL »
(c’est-à-dire « Not Only SQL », soit en français « pas uniquement SQL »).
Pour nos données (celles des lieux de tournage), quel SGBD utiliser ?
19
Le concept de base de données
Décomposez la modélisation de votre BDD en trois étapes clés
Bon… résumons un peu ce que nous avons appris jusqu’à maintenant. Une base de données, c’est
comme un entrepôt. Elle est destinée à alimenter un programme informatique, de la même
manière qu’un entrepôt de matières premières alimente une usine textile. Entre les deux, il y a le
SGBD, qui est comme l’entreprise qui gère l’entrepôt.
Comme nous l’avons vu, il existe des données très structurées et d’autres moins structurées.
L’objet de ce cours, c’est d’apprendre à modéliser une base de données pour des données
structurées (les données des lieux de tournage), ce qui implique que nous utilisions une base de
données relationnelle.
Bon… résumons un peu ce que nous avons appris jusqu’à maintenant. Une base de données, c’est
comme un entrepôt. Elle est destinée à alimenter un programme informatique, de la même
manière qu’un entrepôt de matières premières alimente une usine textile. Entre les deux, il y a le
SGBD, qui est comme l’entreprise qui gère l’entrepôt.
Comme nous l’avons vu, il existe des données très structurées et d’autres moins structurées.
L’objet de ce cours, c’est d’apprendre à modéliser une base de données pour des données
structurées (les données des lieux de tournage), ce qui implique que nous utilisions une base de
données relationnelle.
20
Le concept de base de données
Décomposez la modélisation de votre BDD en trois étapes clés
La première étape, c’est le modèle conceptuel des données (MCD). Elle se décompose elle-même en
trois sous-étapes :
Pas besoin de les comprendre pour le moment, mais retenez juste que les multiplicités permettent de
spécifier par exemple :
Si un film est produit par une ou plusieurs boîtes de production ;
Si un réalisateur peut réaliser un ou plusieurs films, etc.
21
Le concept de base de données
Décomposez la modélisation de votre BDD en trois étapes clés
Pour dessiner le modèle conceptuel, il y a plusieurs possibilités. Les deux plus répandues sont :
Dans leurs principes, ces deux méthodes de modélisation sont très similaires, même si elles utilisent
des conventions graphiques un peu différentes.
22
Le concept de base de données
Décomposez la modélisation de votre BDD en trois étapes clés
MODÈLE E-A
23
Le concept de base de données
Décomposez la modélisation de votre BDD en trois étapes clés
Le modèle conceptuel est un ensemble de concepts. Mais maintenant, il va falloir donner une structure à ces concepts.
Vous vous souvenez ? On a dit que des données structurées peuvent se représenter sous forme de tableaux. Eh bien c’est notre prochaine étape : formater tous
nos concepts en des tableaux !
Vous allez construire le modèle logique des données (MLD). Ici, vous n’avez plus vraiment le choix entre plusieurs modes de représentation comme c’était le
cas pour le MCD. Vous utiliserez la modélisation relationnelle.
La principale transformation pour passer de l’UML au modèle relationnel sera de transformer les multiplicités des associations en clés étrangères. Le concept
des clés étrangères vous est étranger ? Ne vous inquiétez pas, vous y viendrons !
Ici, vous vous rapprochez de la solution technique, car vous commencez à façonner vos données pour qu’elles puissent rentrer dans un SGBDR.
Le concept de base de données
Décomposez la modélisation de votre BDD en trois étapes clés
Au bout d’un moment, il va bien falloir dialoguer avec la machine qui accueillera votre BDD.
Et comme vous le savez, pour parler avec un ordinateur, on utilise du code !
La dernière étape est donc de traduire le modèle relationnel en code SQL compréhensible par le SGBDR que vous aurez choisi (PostgreSQL, MySQL,
Oracle, SQLite, etc.).
Même si ces SGBDR comprennent tous le langage SQL, il existe parfois des différences. C’est-à-dire que chaque SGBDR a ses propres variantes du
langage SQL.
Le SQL peut se décomposer en quatre langages :
- Le langage de définition de données (LDD ou DDL en anglais) : pour créer la structure de la BDD
- Le langage de manipulation de données (LMD ou DML) : pour insérer, actualiser, supprimer ou récupérer des données
- Le langage de contrôle des données (LCD ou DCL) : pour gérer les droits d’accès aux données
- Le langage de contrôle des transactions (LCT ou TCL) : pour la validation ou l’annulation de modifications de données.
Dans ce cours, nous ne verrons que les deux premiers niveaux : le MCD et le MLD. Quant au MPD, il nécessite d’utiliser le langage SQL et de choisir un
SGBDR, puis de l’installer. Nous avons fait le choix de ne pas aller jusque-là pour conserver un cours court.
Le concept de base de données
Décomposez la modélisation de votre BDD en trois étapes clés
À VOUS DE JOUER !
Voici un modèle conceptuel d’une base de données, sous forme de diagramme de classes UML.
RÉPONSE
Il s’agit d’une BDD utilisée par un logiciel de gestion de commandes et de facturation (utilisé dans un magasin, par exemple).
Le logiciel permet d’enregistrer tous les articles en vente, où chaque article fait partie d’une catégorie. Il permet aussi d’enregistrer des commandes,
lesquelles sont relatives à un ou plusieurs clients. Chaque commande a une adresse de livraison.
Lorsqu’une commande est expédiée, l’expédition est enregistrée automatiquement dans le logiciel, et une facture est associée à chaque expédition.
Le concept de base de données
Décomposez la modélisation de votre BDD en trois étapes clés
RÉSUMÉ
Niveau conceptuel MCD Graphique compréhensible par un être humain Modèle E-A (MERISE)
ou
Diagramme de classes (UML)
Niveau logique MLD Traduction du MCD pour le structurer selon les principes du modèle relationnel, commun Modèle relationnel
à tous les SGBD-R
Niveau physique MPD Très spécifique au SGBD-R choisi, souvent écrit en SQL SQL – LDD (Langage de Définition des
Données)
Le concept de base de données
Tenez compte de la redondance dans votre modélisation
LES INCOHÉRENCES
Commençons par une devinette. Une incohérence est présente dans notre fichier, entre les identifiants 2018-650 et 2018-672 :
Le concept de base de données
Tenez compte de la redondance dans votre modélisation
LES INCOHÉRENCES
La voici : la réalisatrice de la série Vernon Subutex est orthographiée de deux manières différentes : « Cathy Verne » et « Cathy Verney ».
Le souci, c’est que l’information selon laquelle la productrice de Vernon Subutex est Cathy Verney est présente à plusieurs endroits dans notre fichier : aux
identifiants 2018-658, 2018-659, 2018-660, etc.
- Premièrement cela peut provoquer des incohérences dans les données : c’est ce que nous venons de voir.
- Ensuite, imaginez que Cathy Verney change de nom. Il faudra actualiser l’information à plusieurs endroits dans le fichier, et on aura vite fait d’oublier une
ou deux lignes : cela créera encore des incohérences !
- Imaginez enfin que nous décidions de supprimer Vernon Subutex de notre BDD. Cela supprimera également les informations relatives à Cathy Verney. Or
selon les cas d’utilisation, on peut très bien souhaiter qu’un réalisateur puisse exister dans notre base, même si elle ou il n’est associé à aucun lieu de
tournage. De même, on ne peut actuellement pas ajouter de réalisateur s'il n’a pas tourné au moins une scène, car notre fichier décrit des lieux de tournage
et non pas des réalisateurs/réalisatrices.
Le concept de base de données
Tenez compte de la redondance dans votre modélisation
C’EST A VOUS !
Dans cette seconde partie du cours, vous verrez la première des trois étapes de la modélisation d’une base relationnelle. Cette première étape, c’est le modèle
conceptuel des données (MCD).
Comme son nom l’indique, vous allez représenter les concepts présents dans vos données, et vous allez aussi chercher les associations qu’il existe entre ces
concepts.
A vous de jouer !
À partir des données des lieux de tournage, il faut que vous dégagiez les concepts principaux, ainsi que leurs caractéristiques.
Je vous propose de faire des petits rectangles divisés en trois parties. Dans la partie haute, vous mettrez le nom du concept, dans la partie centrale la liste des
caractéristiques. Et pour la partie basse, un peu de patience, je vous en parle un peu plus loin dans le chapitre.
RÉPONSES
Il n’y a pas de bonne ou de mauvaise réponse à cet exercice : si votre réponse diffère un peu de la mienne, ce n’est pas très grave. Certes, deux modélisations ne
se valent pas toujours, mais c’est avec l’expérience que vous acquerrez les automatismes de modélisation.
UML
Sur ce diagramme, chaque classe est représentée par un rectangle, dont le nom figure sur la partie haute.
Une classe, c’est un peu comme un moule : elle donne la forme générale des instances qui seront créées à partir d’elle.
À partir d’un moule à gaufre, vous pouvez fabriquer autant de gaufres que vous souhaitez.
Le moule, c’est la classe, et vos gaufres, ce sont les instances.
De même, la classe « Film » définit la forme générale des instances issues de cette classe.
Le concept de base de données
Caractérisez vos classes avec les attributs et les méthodes
UML
Dans la partie centrale de notre rectangle, nous indiquons les attributs. Un attribut, c’est une caractéristique de la classe.
Un attribut doit être typé, c’est-à-dire que l’on sait à l’avance quels types de valeurs il peut contenir :
- Valeurs numériques (un nombre entier, un nombre décimal, etc.)
- Du texte
- Une date
- Etc.
L’ensemble des valeurs que peut prendre un attribut est appelé son domaine.
Pour définir un domaine, vous pouvez le faire soit en énumérant toutes les valeurs possibles (définition en extension), soit en donnant les caractéristiques des
valeurs, comme par exemple « ce doit être un nombre entier » (définition en intention).
Par exemple :
- Définition en extension :
- domaine de l’attribut « typeDeTournage »:
- ["Long métrage", "Téléfilm", "Série TV", "Série web"]
- Définition en intention :
- domaine de « dateDeDebut »: date
- domaine de « codePostal »: nombre entier compris entre 1 000 et 99 999.
Le concept de base de données
Caractérisez vos classes avec les attributs et les méthodes
UML
On peut définir des attributs composites : ils sont composés de plusieurs valeurs (dont le nombre est fixe) qui ne sont pas forcément du même type. Par
exemple, un attribut « adresse » est souvent composé de :
- Un numéro de voie (nombre entier supérieur à 0)
- Un libellé de voie (du texte)
- Un code postal (nombre entier)
- Un nom de ville (texte)
- Etc.
On peut définir aussi des attributs multivalués : cela signifie que l’attribut peut prendre zéro, une ou plusieurs valeurs du même type (ou même domaine), sans
que l’on sache à l’avance combien il y en aura.
Ce serait par exemple le cas d’un attribut numéro(s) de téléphone d’une classe « Personne », car une personne peut avoir zéro, un, ou de multiples numéros de
téléphone.
Enfin, on dit qu’un attribut est dérivé, lorsqu’il peut être déterminé à partir d’autres attributs.
Dans votre cas, « anneeDuTournage » peut être déterminé à partir « dedateDeDebut ».
Le concept de base de données
Caractérisez vos classes avec les attributs et les méthodes
LES MÉTHODES
Les méthodes se programment soit dans le code de l’application qui va utiliser le SGBD, soit dans le SGBD lui-même lorsque celui-ci le permet. Mais dans les
deux cas, vous ne verrez pas cela dans ce cours. En effet, la programmation de méthodes dans un SGBD est trop spécifique au SGBD en question pour être
abordé ici.
En fait, les méthodes définissent le « comportement » de votre classe, c’est-à-dire les actions qu’elle est capable de réaliser.
En général, on préfère représenter les attributs dérivés par des méthodes, car un attribut dérivé est le résultat d’un calcul sur les attributs non dérivés.
Dans votre cas, vous pouvez donc créer une méthode qui s’appelle determinerAnneeDeTournage(), qui déterminera l’année de tournage à partir de
dateDeDebut.
Le concept de base de données
Dialoguez avec les développeurs logiciel grâce à l’UML
Dans un langage de programmation orientée objet, le développeur définit des objets. Un objet, c’est un concept, une idée ou une chose du monde réel. Chaque
objet possède des attributs (ce sont ses caractéristiques) ainsi qu’un ensemble de comportements possibles.
Oui mais ici, on ne fait pas de programmation logicielle, on modélise une base de données !
Oui, mais avouez que la description que je viens de vous donner est quand même très proche de ce que vous venons de voir : des classes caractérisées par des
attributs et dont les méthodes définissent un comportement.
En fait, le diagramme de classes UML est aussi utilisé par les développeurs qui codent avec des programmes orientés objet : Python, PHP, C++, Java, etc. Et
c’est bien plus pratique comme ça !
L'utilisation du diagramme de classes UML pour la modélisation de la base de données s'est généralisée avec la croissance de la programmation objet. Étant
donné qu'une base de données fonctionne quasiment toujours en dialogue avec un programme informatique, il y a des échanges d'informations entre les deux.
Si des deux côtés, les concepts manipulés sont les mêmes, alors c'est bien plus simple pour communiquer entre ceux qui s'occupent de la BDD et ceux qui
codent le programme.
On comprend donc pourquoi le diagramme de classes UML est utilisé des deux côtés de la barrière (côté base de données et côté applicatif).
Certains langages orientés objet proposent même des fonctionnalités qui permettent de créer automatiquement la structure de la base de données relationnelle à
partir du code informatique écrit en ce langage. On appelle cela des ORM pour Object-Relational Mapping.
Le concept de base de données
Dialoguez avec les développeurs logiciel grâce à l’UML
Le diagramme de classes que vous avez dessiné est bien adapté à votre problème, car il décrit la structure de votre future BDD. Cette structure est statique, elle
ne varie pas dans le temps. En effet, la structure d’une base de données ne change uniquement que lorsque le logiciel qui l’utilise est mis à jour sous une
nouvelle version.
Conclusion, pour une BDD, le diagramme de classe UML est suffisant. Il est aussi très utile pour les développeurs qui vont représenter les classes de leur
programme. Même si pour eux, quelque chose de statique reste insuffisant. Le langage UML prévoit alors aussi d’autres types de diagrammes permettant par
exemple de représenter le comportement du programme dans le temps.
Le concept de base de données
Dialoguez avec les développeurs logiciel grâce à l’UML
RÉSUMÉ
Alors. Où en êtes-vous ?
Vous avez identifié toutes les classes ainsi que leurs attributs.
À ce stade, toutes les colonnes du fichier CSV ont trouvé une place dans votre modélisation.
Vous savez par exemple que les informations sur la réalisatrice Cathy Verney seront stockées dans la classe Realisateur_ice, et que la série « Vernon Subutex »
sera enregistrée dans la « classeSerieTV ».
Mais ces deux informations sont séparées dans deux classes distinctes.
Or, il faut que vous puissiez indiquer le lien qui lie « Vernon Subutex » à sa réalisatrice : et à présent, ce lien n’est pas encore modélisé.
Vous l’aurez compris, dans ce chapitre, vous allez créer du lien entre les classes.
Le concept de base de données
Associez vos classes pour garder du lien dans vos données
Pour créer vos associations, je vous propose de tracer des traits qui relient vos classes, et de leur donner un nom, de préférence un verbe tel que « réalise », «
produit », etc.
C’est à vous !
Le concept de base de données
Associez vos classes pour garder du lien dans vos données
Il y a un concept très important quand on définit une association : c’est la notion de multiplicité.
Elle permet de dire si un film peut être réalisé par UN SEUL ou par PLUSIEURS réalisateurs, et inversement : si un réalisateur peut produire UN SEUL ou
PLUSIEURS films.
Il ne faut pas négliger les multiplicités, car ceci aura des implications dans le SGBDR.
Par exemple, si vous considérez à tort qu’un réalisateur ne peut réaliser qu’un seul film, alors la structure de votre BDD ne sera pas faite pour accueillir plus
d’un film par réalisateur : et pour modifier cette structure, ce sera un peu plus complexe qu’on ne le pense.
Le concept de base de données
Associez vos classes pour garder du lien dans vos données
Ensuite, vous pouvez aller plus loin dans la précision des multiplicités.
Par exemple, quand vous dites « au plus 1 », vous pouvez préciser s’il s’agit de « strictement 1 », ou bien « 0 ou 1 ». Aussi, quand vous dites « plusieurs »,
vous pouvez entendre « 0, 1 ou plus », ou bien « strictement plus que 1 », etc.
Le concept de base de données
Associez vos classes pour garder du lien dans vos données
1..1 1 Exactement 1
Plusieurs :
0..* * 0, 1 ou plus
- Un film est réalisé par exactement 1 société de production ( 1 ), et une société peut produire 0, 1 ou plusieurs films ( * ) :
Le concept de base de données
Associez vos classes pour garder du lien dans vos données
Un cinéma a exactement 1 adresse ( 1 ), et une adresse donnée ne peut accueillir que 0 ou 1 seul cinéma ( 0..1 ) :
Le concept de base de données
Associez vos classes pour garder du lien dans vos données
... au lieu de dessiner trois classes : Film, Tournage et Lieu, comme nous l’avons fait précédemment. Et vous auriez eu raison ! Mais dans ce cas, vous n’auriez
pas réussi à placer les colonnes Date de début et Date de fin. En fait, ces deux dates sont des caractéristiques de l’association qui unit un lieu à un film. Eh
bien, sachez qu’il est possible de donner des caractéristiques à un lien, grâce à une classe d’association. Ici, comme l’association s’appelle « est tourné », vous
pouvez appeler votre classe « Tournage » :
Le concept de base de données
Associez vos classes pour garder du lien dans vos données
Il existe un type d’association particulier, appelé l’association de composition. Celle-ci s’utilise quand une classe est un composant d’une autre classe. Prenez
l’exemple d’un circuit électronique : il est composé de composants électroniques : diodes, condensateurs, microprocesseurs, etc. Ainsi, on peut avoir une
association de composition entre une classe CircuitElectronique et une classe CompostantElectronique.
Imaginez que votre circuit soit défaillant et que vous deviez donc le jeter. Dans ce cas, vous jetez automatiquement tous ses composants. C’est là la particularité
de la composition : le composant (une diode, par exemple) ne peut exister que via son composite (circuit électronique). Pour votre appli, vous pourriez
considérer qu’un tournage est un composant du film. En effet, rien ne sert d’enregistrer dans votre BDD un tournage si vous ne savez pas à quel film il est
associé. On peut aussi avoir une composition entre FilmetSocieteDeProduction.
En effet, un film ne peut exister si une société ne l'a pas produit. De plus, il existe parfois des films différents ayant le même nom (exemple : au moins quatre
films portent le titre Home). Ainsi, pour identifier un film de manière certaine, on a besoin de son titre mais aussi du nom de sa société de production, ce qui
prouve le lien de dépendance entre ces deux classes.
Voici comment cette composition aurait été représentée : avec un losange noir (plein) du côté du composite :
Le concept de base de données
Associez vos classes pour garder du lien dans vos données
La composition s’emploie quand ces trois caractéristiques sont réunies : Le composite est « composé » de composants. L’association de composition est de type
un-à-plusieurs, car le composite peut avoir plusieurs composants (0..1, 1, *ou1..*), et le composant appartient à un et un seul composite (la multiplicité est donc
forcément1, rien d’autre) : on dit que le composite n’est pas partageable. Il y a un lien entre le cycle de vie du composite et du composant : un composant
disparaît dès que l'objet composite auquel il appartient est supprimé. La composition est un cas particulier d’association un-à-plusieurs. Tadaaaaaaam ! Je vous
présente donc, en exclusivité, la dernière version de votre modélisation UML !
Le concept de base de données
Associez vos classes pour garder du lien dans vos données
Par exemple, vous pouvez être tenté de dire qu’un réalisateur travaille pour une société de production lorsqu’il réalise un film. On aurait donc ceci :
Cependant, on peut déduire l’association travaille pour grâce aux deux autres associations. En effet, si on sait que Le Temps des égarés est réalisé par Virginie
Sauveur et produit par Delante Productions, alors on déduit que Virginie Sauveur a travaillé pour Delante Productions.
Le concept de base de données
Associez vos classes pour garder du lien dans vos données
À VOUS DE JOUER
Voici un diagramme de classes représentant des concerts donnés par des groupes de musique. Déterminez les multiplicités possibles des associations :
Le concept de base de données
Associez vos classes pour garder du lien dans vos données
RÉPONSE
RÉSUMÉ
- Graphiquement, on modélise les associations entre les classes par des traits qui les relient.
- Une association peut être de trois types :
- plusieurs-à-plusieurs
- un-à-plusieurs
- un-à-un.
- On précise ces trois types grâce aux multiplicités :0..1, 1, 1..*, etc.
- Une association peut avoir des caractéristiques, que l’on indique dans une classe d’association.
- Pour indiquer qu’une association est de type « composant », on utilise une composition.
Voilà, vous avez posé les bases de votre diagramme UML. Maintenant, il ne reste plus qu’à le perfectionner grâce aux possibilités du langage UML.
Modélisez vos bases de données
Améliorez votre diagramme de classes
Le concept de base de données
Améliorez votre diagramme de classes
À présent, vous connaissez les bases de la modélisation UML : comment représenter des classes et les associer.
Je vous propose maintenant de perfectionner votre modélisation.
Le concept de base de données
Améliorez votre diagramme de classes
Jusqu’à maintenant, le type de l'œuvre est enregistré dans l’attribut typeDeTournage . J’ai vu dans le fichier CSV que dans le cas des séries, on connaît parfois
le numéro de saison.
Peut-on ajouter un attribut saison dans la classe Œuvre ?
Cependant, cet attribut ne sera utilisé que si l'œuvre est une série.
Il restera vide si l'œuvre est un téléfilm ou un long-métrage. Cette solution n’est donc pas optimale. L’idéal serait de placer cet attribut dans une classe Serie.
Le concept de base de données
Améliorez votre diagramme de classes
Heureusement, c’est possible ! On fait cela via la notion d’héritage, comme ceci :
Le concept de base de données
Améliorez votre diagramme de classes
Soyons fous : on peut aussi enchaîner les relations d’héritage, en créant les classes SerieTV et SerieWeb !
Voici le résultat :
Le concept de base de données
Améliorez votre diagramme de classes
Lorsque l’on utilise l’héritage, il est parfois utile de spécifier qu’une classe est abstraite, c’est-à-dire qu’elle ne peut pas être instanciée.
C’est votre cas : dans la BDD, vous voulez qu’une œuvre soit obligatoirement un téléfilm, une série TV, une série web ou un long-métrage. La notion d'œuvre
est trop générale pour que vous l’acceptiez. En effet, considérer un téléfilm simplement comme une oeuvre, c’est perdre les informations spécifiques au
téléfilm.
Par exemple, En Thérapie est une instance de SerieTV, mais pas de Oeuvre . De même, 120 Battements par minute est une instance de Long Metrage. Bref, on
veut qu’aucune œuvre soit enregistrée dans la BDD sans préciser si c’est un téléfilm, une série ou un long métrage. Pour indiquer une classe abstraite, il suffit
de mettre son titre en italique. Voici donc ce que cela donne si vous définissez Œuvre et Serie comme abstraites :
Une classe abstraite est toujours héritée. Elle peut d’ailleurs être héritée par d'autres c
classes abstraites, mais en fin de chaîne, il doit y avoir une classe non abstraite.
Le concept de base de données
Améliorez votre diagramme de classes
Je vous donne ici quelques autres possibilités qui concernent les associations entre les classes. Dans le cadre de ce cours, il n’est pas nécessaire de les détailler,
mais sachez juste que ces possibilités existent. Je vous donnerai quelques liens utiles si vous souhaitez creuser le sujet.
L’agrégation
L’agrégation s’utilise lorsqu’une classe est un ensemble ou un regroupement d'objets. Elle est très similaire à une association classique, et que vous l'utilisiez ou
non, cela n’aura aucune implication lors de la traduction du MCD vers le MLD.
Contrairement à la composition, il n’y a pas de contrainte sur les multiplicités, ni sur le cycle de vie des objets agrégés (ils peuvent exister même lorsque l’objet
agrégeant disparaît).
L’association ternaire
Il est possible de créer des associations entre plus que 2 classes. Ce sont les associations N-aires. Voici un exemple d’association ternaire :
En pratique, on n’utilise jamais d’association de degré supérieur à trois. De plus, les associations ternaires peuvent
toujours être transformées en trois associations binaires, en transformant l’association en une nouvelle classe,
comme ceci.
Il est conseillé de ne pas abuser des associations ternaires, car elles sont souvent moins intelligibles.
Le concept de base de données
Améliorez votre diagramme de classes
LES NOTES
Il est possible d’ajouter des notes au diagramme de classes. Elles servent à apporter tout type de précisions. Notamment les contraintes sur certains attributs.
Sur votre diagramme, vous auriez pu poser la contrainte que l’attribut « dateDeDebut » doit être une date antérieure à « dateDeFin ». Eh oui, cela paraît
logique, mais il faudra le spécifier à votre SGBDR car il ne le fera pas automatiquement !
Les notes servent aussi à préciser les domaines des attributs quand ceux-ci sont plus complexes que « Entier », « Date », « Texte », etc.
Deux classes peuvent être liées entre elles via deux (ou plus) associations.
Ce serait le cas lorsqu’une personne écrit un livre, et lorsqu’une autre personne traduit ce livre dans une autre langue :
Dans ce cas, il est nécessaire de donner un nom aux associations pour les différencier.
Le concept de base de données
Améliorez votre diagramme de classes
Plutôt que de donner un nom aux associations, vous pouvez aussi caractériser une association par le rôle que tient chacune des deux classes. C’est le cas dans
cet exemple, où on peut remplacer le nom de l’association « conduit » par « conducteur » et « moyen de locomotion » :
C’est à vous de choisir si vous trouvez cette manière plus simple à comprendre. Si vous indiquez les rôles, pas besoin d’utiliser de verbes.
Le concept de base de données
Améliorez votre diagramme de classes
L’ASSOCIATION RÉFLEXIVE
Par exemple, une classe « Categorie » peut avoir des sous-catégories et des catégories parentes :
Le concept de base de données
Améliorez votre diagramme de classes
RÉSUMÉ
- Un lien de généralisation se modélise par l'héritage, qui permet de généraliser ou spécialiser un concept.
- L’héritage s’utilise parfois avec des classes abstraites, qui sont des classes non instanciables.
- Il existe d’autres types d’associations, comme l’agrégation et l’association ternaire.
- On précise tout type de commentaire ou de contrainte grâce aux notes.
- Deux classes peuvent être liées par plusieurs associations ayant toutes un nom ou un rôle différent. Une classe peut aussi être liée à elle-même par une
association réflexive.
Modélisez vos bases de données
Utilisez les outils de modélisation favorisant la collaboration
Le concept de base de données
Utilisez les outils de modélisation favorisant la collaboration
- Les outils graphiques, qui ne sont pas réservés à l’UML, mais qui permettent de créer facilement tous types de diagrammes.
- Les ateliers de génie logiciel (AGL) : ce sont des environnements de conception, souvent très puissants. Contrairement aux outils graphiques (qui ne font
que produire un dessin), les AGL « comprennent » la modélisation UML et ils sont capables d’interpréter votre modélisation afin de vous faciliter la tâche :
vérification du modèle, génération du code informatique découlant du diagramme de classes, etc). Ils sont cependant plus difficiles à prendre en main.
Parmi les outils graphiques les plus connus, on trouve LibreOffice Draw, diagrams.net (anciennement draw.io), LucidChart, etc.
En ce qui concerne les AGL, l’un des plus connus s’appelle ArgoUML. Vous pouvez tester également Papyrus, qui est un environnement de modélisation
performant fonctionnant sous Windows, MacOS et Linux. Il est gratuit, open source et développé par la fondation Eclipse.
Le concept de base de données
Utilisez les outils de modélisation favorisant la collaboration
À VOUS DE JOUER
Ici, le but n’est pas de générer du code informatique à partir du diagramme UML : nous souhaitons juste nous limiter à la partie graphique. Pas besoin non plus
d’options sophistiquées, comme celles qui permettent de vérifier si notre diagramme respecte bien les standards UML. Je vous conseille de réserver cela pour
des gros projets de développement informatique (si vous devez développer un programme dans un langage orienté objet).
Il est gratuit, et ne nécessite pas d’installation : c’est une application web, qui s’utilise depuis votre navigateur (Firefox, Chrome, Safari, Edge, etc.), et ne
nécessite même pas la création d’un compte !
De plus, il est très intuitif, très connu, et souvent utilisé pour créer tous types de diagrammes (pas seulement UML). Il permet également la collaboration grâce
à l’enregistrement des diagrammes dans un cloud (type Google Drive, par exemple).
Le concept de base de données
Utilisez les outils de modélisation favorisant la collaboration
À VOUS DE JOUER
Pour rappel, voici la dernière version de notre diagramme UML, que je vous invite à reproduire :
Le concept de base de données
Utilisez les outils de modélisation favorisant la collaboration
À VOUS DE JOUER
Pour créer le diagramme que vous avez élaboré tout au long de cette partie, suivez les instructions de ces vidéos.
Dans cette première vidéo, je vais vous présenter l’outil Diagrams et nous allons créer les différentes classes.
https://player.vimeo.com/video/635154998
Le concept de base de données
Utilisez les outils de modélisation favorisant la collaboration
À VOUS DE JOUER
Nos classes ajoutées, voyons dans cette vidéo comment ajouter les relations entre les classes.
https://player.vimeo.com/video/635154705
Le concept de base de données
Utilisez les outils de modélisation favorisant la collaboration
EN RÉSUMÉ
- À distinguer deux types d'outil de modélisation : les outils graphiques et les atelier de génie logiciel (AGL)
- À utiliser l'outil graphique Diagrams
Modélisez vos bases de données
Identifiez les éléments clés du modèle relationnel
Le concept de base de données
Identifiez les éléments clés du modèle relationnel
L’étape 1 modélise des concepts par un humain, alors que les étapes 2 et 3 s’approchent de plus en plus de l’implémentation concrète de la BDD dans
l’ordinateur.
Dans cette nouvelle partie, nous allons voir la seconde étape, le modèle logique. Pour les bases de données relationnelles, le niveau logique utilise la
modélisation relationnelle. Votre modèle relationnel découlera de votre diagramme UML, et quand vous l’aurez défini, il sera ensuite très simple de créer votre
base de données finale !
Le concept de base de données
Identifiez les éléments clés du modèle relationnel
Dans une BDD relationnelle, les informations sont stockées sous forme de tableaux. Dans le jargon des BDD, un tableau s’appelle une Table.
Comme le modèle relationnel se veut proche de l’implémentation, il permet de modéliser ces tables. Officiellement, l’objet de modèle relationnel qui
correspond à une table s’appelle la Relation.
Le mot « relation » peut prêter à confusion. En effet, ce mot fait penser au concept d’« association » que nous avons vu lors des chapitres précédents. En plus,
dire qu’un tableau est une « relation », ce n’est pas très intuitif. Pour ne pas vous emmêler les pinceaux, nous n’emploierons pas le mot Relation, mais plutôt
Table.
Tout au long des chapitres de cette troisième partie, vous allez traduire votre diagramme UML en un modèle relationnel.
La première étape de cette traduction est aussi la plus simple : nous allons créer une table pour chaque classe du diagramme UML. Nous laissons pour le
moment de côté les classes héritées ( serie_tv, telefilm, etc), que vous verrez plus tard.
Le concept de base de données
Identifiez les éléments clés du modèle relationnel
- œuvre
- lieu
- tournage
- societe_de_production
- realisateur_ice.
Bonne nouvelle ! Le concept d’attribut existe également dans le modèle relationnel, et il a la même signification qu’en UML. Retenez juste que attribut est
synonyme de colonne.
Ainsi, nos cinq tables possèdent les même attributs que leurs classes correspondantes en UML :
Il existe différentes façons de représenter un modèle relationnel : l’une sous forme de texte, et l’autre sous forme graphique.
LA REPRÉSENTATION TEXTUELLE
Notre table lieu, qui possède quatre attributs, s’écrit de cette manière :
LA REPRÉSENTATION GRAPHIQUE
Elle est très similaire à l’UML car elle représente les tables par des rectangles divisés en trois parties, mais ces trois parties sont remplies différemment qu’en
UML. Attention donc à ne pas les confondre !
Par défaut, les attributs sont notés dans la troisième partie (au lieu de la deuxième en UML). Vous aurez plus de détails prochainement.
Le concept de base de données
Identifiez les éléments clés du modèle relationnel
LA REPRÉSENTATION GRAPHIQUE
Contrairement au diagramme UML dont la représentation est définie de manière stricte, la représentation graphique du modèle relationnel peut différer d’un
logiciel à l’autre. Les illustrations de ce cours sont réalisées avec le logiciel SQLPowerArchitect.
À ces deux représentations, nous ajouterons une troisième, que nous appellerons représentation en tableaux. Elle n’est pas officielle et servira juste à illustrer
les exemples de ce cours.
Habituez-vous dès maintenant à différencier les deux représentations graphiques pour ne pas vous emmêler les pinceaux en parcourant le cours.
LA REPRÉSENTATION GRAPHIQUE
Sur cette illustration, on voit que la table lieu contient quatre colonnes et plusieurs lignes. L’une de ces lignes représente la rue Corvisart et contient les valeurs
("rue corvisart", 75013, 2.3472, 48.8322).
("rue corvisart", 75013, 2.3472, 48.8322) est aussi appelé un tuple, un enregistrement, plus rarement un vecteur ou même un n-uplet ! Si nous étions encore à la
phase de modélisation UML, on pourrait aussi dire que ("rue corvisart", 75013, 2.3472, 48.8322) est une instance de la classelieu.
Dans une table, l'ordre des lignes et des colonnes n'a pas d'importance et pas de signification. Deux tables contenant les mêmes colonnes (mais dans un ordre
différent) et les mêmes lignes (dans un ordre différent) sont considérées comme identiques.
Le concept de base de données
Identifiez les éléments clés du modèle relationnel
LA REPRÉSENTATION GRAPHIQUE
- Le MLD est la deuxième étape de la modélisation d’une BDD relationnelle, et il se représente grâce au modèle relationnel.
- L’objet principal du modèle relationnel est la table, qui contient des lignes et des colonnes.
Rappel du vocabulaire :
Terme Synonymes
Table Relation
Ligne Tuple, enregistrement, vecteur, n-uplet,
(instance)
Colonne Attribut
Modélisez vos bases de données
Déterminez vos clés primaires
Le concept de base de données
Déterminez vos clés primaires
Jusqu’à maintenant, vous avez vu que les classes UML se traduisent en tables. Ici, nous allons plonger plus en détail au cœur des tables pour analyser ce qui les
compose : les lignes et les colonnes.
Pour commencer, vous verrez comment le modèle relationnel permet d’identifier une ligne d’une table.
Prenons quelques secondes pour raisonner. Est-ce que vous vous souvenez que pour éviter la redondance, il faut que chaque information ne soit présente
qu’une seule fois dans la BDD ?
Si chaque information ne doit être présente qu’une seule fois, cela implique que dans une table donnée, par exempl eoeuvre, il ne doit pas y avoir deux lignes
décrivant une même œuvre.
Ainsi, œuvre contiendra exactement autant de lignes qu’il y a d'œuvres dont les lieux de tournage ont été enregistrés dans notre fichier CSV.
Le concept de base de données
Déterminez vos clés primaires
Mais cela pose une question fondamentale : comment nous assurer que deux lignes deoeuvre font bien référence à 2 œuvres différentes ?
Cette question fondamentale, c’est celle de l’identité. Dans le monde, chaque personne est unique. Ce qui garantit votre unicité, c’est votre identité. En effet,
deux personnes ne peuvent pas avoir la même identité, et une personne ne peut avoir deux identités différentes (à part dans le monde des espions et espionnes,
mais ça c’est une autre histoire).
D’ailleurs, la plupart des SGBDR n’acceptent pas que deux lignes d’une table soient identiques (c’est-à-dire que chacun de leurs attributs aient les mêmes
valeurs).
Si on est sûr que n'importe quelle ligne peut être retrouvée en connaissant la valeur de quelques-uns de ses attributs, c'est que ces quelques attributs forment une
clé primaire !
Le concept de base de données
Déterminez vos clés primaires
Illustrons cela par un exemple plus concret : cette notion d’identification est essentielle pour les facteurs qui doivent identifier de manière certaine les
logements pour lesquels ils distribuent le courrier. Imaginez une table qui répertorie des logements, possédant ces colonnes :
La clé primaire de cette table, ce sera le groupe de colonnes minimum que l’on peut donner au facteur pour qu’il soit sûr de pouvoir distribuer un courrier au
bon logement.
Le concept de base de données
Déterminez vos clés primaires
Si on lui donne uniquement les attributs intitulé de la voie, code postal et commune (par exemple « rue de la République, 93124 Passillac-les-Flots »), il lui
sera difficile de donner le courrier, car la rue de la République de Passillac contient plusieurs logements.
Si au contraire, on lui donne tous les attributs, le courrier pourra à coup sûr être distribué. Cependant, le groupe d’attributs 1 à 9 n’est pas considéré comme
minimal : la superficie n’a pas besoin d’être connue pour distribuer un courrier. Superficie ne doit donc pas figurer dans la clé primaire.
Une bonne clé primaire pour cette table sera donc le groupe des attributs 3 à 9. Même si pour une maison, l’attribut n° de logement n’a pas besoin d’être connu,
il est quand même important de le placer dans la clé primaire de la table, afin de pouvoir identifier les différents appartements d’un même immeuble.
En choisissant les colonnes 3 à 9 comme clé primaire de la table Logement, on définit implicitement que deux lignes de cette table ne peuvent pas avoir des
valeurs identiques pour ces attributs. Le SGBDR vous l’interdira. On dit que l’on définit une contrainte d’unicité sur le groupe de colonnes 3 à 9.
Autrement dit, le groupe (code_postal, commune)ne peut pas être une clé primaire car les lignes « 3 rue de la Charrue avant les bœufs, 93124 Passillac-les-
Flots » et « 5 rue du Pangolin superstitieux, 93124 Passillac-les-Flots » ont toutes les deux les mêmes valeurs pour (code_postal, commune), soit 93124 et
Passillac-les-Flots. Ce groupe d’attributs violerait donc la contrainte d’unicité.
Formellement, on dira que la clé primaire d’une table est un groupe d’attributs minimum permettant d’identifier de manière unique une ligne.
Le concept de base de données
Déterminez vos clés primaires
C’EST À VOUS !
Ça y est, vous êtes prêt à déterminer les clés primaires de votre modèle. Je vous remets ici l’état actuel du modèle :
Pour les tables « societe_de_production » et « realisateur_ice », il n’y a pas beaucoup de choix : nous prendrons l’attribut nom pour chacune de ces deux tables.
Bien sûr, cela suppose qu’il n’y ait pas deux sociétés de production ayant le même nom, ni deux réalisateurs/réalisatrices ayant le même nom. C’est très peu
probable, donc on peut considérer que nom est une bonne clé primaire pour ces 2 tables.
Le concept de base de données
Déterminez vos clés primaires
C’EST À VOUS !
Table « lieu »
Pour la table « lieu », c’est moins évident. Il pourrait y avoir deux clé primaires possibles :
Pour la première solution, il faut supposer que « localisation_de_la_scene » contienne bien au moins le nom de la rue (de la voie) ainsi que la commune. Dans
ce cas, la contrainte d’unicité est respectée car il n’existe pas deux noms de voie identiques pour une même commune. Et même s’il existe en France plusieurs
communes ayant le même nom, le code postal permet de lever cette ambiguïté. Avec cette clé primaire, on peut donc identifier dans quelle rue est tournée une
œuvre donnée.
Mais cette première solution a des inconvénients. Tout d’abord, l’attribut « localisation_de_la_scene » est de mauvaise qualité : l’utilisateur qui entre une
adresse n’est pas contraint d'indiquer cette adresse de manière normalisée : rien ne l'oblige à indiquer le nom de la commune. Il pourrait même indiquer le code
postal, alors que celui-ci est censé être déjà présent dans l’attribut « code_postal »: bonjour la redondance ! De plus, l’utilisateur peut écrire une même adresse
de deux manières différentes, par exemple « 2, boulevard Joffre» et « 2 Bd Joffre » : cela rend difficile la détection de doublons !
Regardez dans le fichier aux lignes 2016-980et 2019-608 vous avez une adresse avec le code postal redondant, et l’autre n’indique pas la ville : elles sont de
plus écrites différemment (l’une en majuscules, l’autre avec un accent) ! C’est le bazar.
Le concept de base de données
Déterminez vos clés primaires
C’EST À VOUS !
Il aurait été plus judicieux de demander à l’utilisateur de saisir les adresses dans des champs séparés : numéro de voie, nom de voie, complément d’adresse,
commune, code postal, etc.
Quant à la solution 2, elle pose un autre problème : celui de la précision. Faut-il considérer le couple latitude-longitude (48.87512, 2.348979) comme étant
différent du couple (48.87506, 2.348963), alors que ces deux endroits sont séparés de 3 mètres, se trouvent dans la même rue et désignent donc le même lieu de
tournage ?
Comme vous l’avez vu, certains types d’attributs sont moins propices à appartenir à une clé primaire. Ainsi, on préférera les nombres entiers aux nombres
décimaux (pour une question de précision), et les chaînes de caractères courtes et sans confusion possible (différentes orthographes, etc.).
Il peut exister plusieurs solutions pour la clé primaire : c’est le cas pour « lieu ». Plus formellement, on dit que les différentes options sont des clés candidates,
et que l’option finalement retenue est la clé primaire. Pour la table « lieu », nous choisirons arbitrairement le groupe (localisation_de_la_scene, code_postal)
comme clé primaire.
Le concept de base de données
Tables œuvre et tournage
Pour les tables « œuvre » et « tournage », il est impossible, pour le moment, de trouver une clé primaire.
En effet, dans le chapitre où nous parlions de la composition en UML, nous avions dit cela : « Il existe parfois des films différents ayant le même nom
(exemple : au moins quatre films portent le titre Home). Ainsi, pour identifier un film de manière certaine, on a besoin de son titre mais aussi du nom de sa
société de production, ce qui prouve le lien de dépendance entre ces deux classes. »
Problème : la table « œuvre » ne contient pas, pour l’instant, d’attribut donnant le nom de la société de production. Sans cet attribut, on ne peut pas avoir de clé
primaire.
Pour la table « tournage », nous n’avons que deux attributs : la date de début et la date de fin.
Problème : deux tournages (de deux films différents, sur deux lieux différents) peuvent avoir débuté et s’être terminés exactement aux mêmes dates. Pour vous
en convaincre, vous pouvez vérifier aux lignes 2016-87 et 2016-189 ;) . Il n’y a donc pas d’unicité possible.
Nous laissons donc ces 2 tables en suspens, nous trouverons leurs clés primaires plus tard.
Le concept de base de données
Un point sur les notations et représentations graphiques
Graphiquement, il est courant de représenter les attributs qui constituent la clé primaire dans la partie centrale du rectangle qui représente la table, et tous les
autres attributs sont inscrits dans la partie basse. Mais il peut arriver que vous rencontriez d’autres représentations, ailleurs que dans ce cours. Par exemple
avec la clé primaire en gras ou soulignée.
Aussi, on peut indiquer les attributs de la clé primaire par l’abréviation « PK », mise pour « Primary Key ».
Le concept de base de données
Créez des clés primaires artificielles
Parmi les attributs d’une table, il est parfois impossible de trouver une clé primaire. Dans d’autres cas, la clé primaire est trop complexe (trop d’attributs, par
exemple). Dans ce cas, il est possible de créer une clé artificielle.
Une clé artificielle est un attribut que l'on ajoute à la table. Cet attribut n'a pas de réelle signification dans le domaine que l'on modélise, mais sa seule fonction
est d'identifier de manière unique les lignes de la relation. C’est donc un identifiant.
Exemple : le numéro de Sécurité sociale ou le numéro de carte d’identité sont des clés artificielles permettant d'identifier les personnes de nationalité française.
Quand vous dessinez votre MLD, vous pouvez être tenté de créer un identifiant pour chaque table ; cependant il est préférable de ne faire cela que pour les cas
particuliers.
Le concept de base de données
Créez des clés primaires artificielles
Si vous le transformez pour le faire coller à votre modèle relationnel (donc avec deux tables œuvre et societe_de_production, avec une clé étrangère
societe_prod) en y ajoutant des clés artificielles, vous pourriez être tenté de simplement découper le fichier en deux :
Le concept de base de données
Créez des clés primaires artificielles
Or ici, il y a 2 lignes de « societe_de_production » qui font référence à la même société de production, et c’est une erreur !
Voilà pourquoi, même en choisissant une clé artificielle, il faut garder en tête la contrainte d’unicité de la clé primaire (nom) de « societe_de_production » et
vérifier que (nom) ne contient pas de doublons. Si vous faites cela, vous arriverez à cette solution correcte :
Le concept de base de données
Créez des clés primaires artificielles
Par contre, quand on passe au MPD (la troisième étape de la modélisation), il est fréquent d’utiliser des clés artificielles systématiquement, car :
- Il y a toujours un risque qu’une clé primaire non artificielle perde la propriété d’unicité (exemple : si une même société de production produit deux films
ayant le même nom).
- Si la valeur d’une clé non artificielle est modifiée (si par exemple une société de production change de nom), il faut modifier toutes les clés étrangères qui la
référencent.
Le concept de base de données
Créez des clés primaires artificielles
EN RÉSUMÉ
- La clé primaire d’une table est un groupe de colonnes minimum permettant d'identifier une ligne d'une table.
- Une clé primaire a donc forcément une contrainte d'unicité.
- Dans certains cas, il est impossible de trouver une clé primaire parmi les colonnes présentes. Dans d’autres cas, la clé primaire est trop complexe. On crée
alors une clé primaire artificielle.
- Dans le MLD, l'usage de clé primaire artificielle est à réserver pour les cas particuliers, et il faut prendre certaines précautions.
Modélisez vos bases de données
Créez du lien entre vos tables avec les clés étrangères
Le concept de base de données
Créez du lien entre vos tables avec les clés étrangères
- Dans ce chapitre, vous verrez comment modéliser les associations que vous avez déterminées dans le diagramme UML. C’est-à-dire comment associer une
ligne d’une table (ex. :oeuvre) à une ligne d’une autre table (ex. :societe_de_production).
- Lorsque vous avez dessiné votre diagramme UML, vous aviez défini les associations entre classes. Par exemple : une œuvre est produite par une (et une
seule) société de production.
- C’est un bon début. Mais maintenant, il faut être plus précis : il faut savoir quel film est produit par quelle société. Autrement dit, il faut relier chaque ligne
de la table œuvre avec les lignes de societe_de_production.
Le concept de base de données
Découvrez l’utilité des clés étrangères
Les valeurs présentes dans la colonne « auteur_ice » doivent obligatoirement avoir une correspondance dans la colonne « id », sinon les données sont
incohérentes. La plupart des SGBDR n’accepteront pas que vous introduisiez un livre dont l’auteur indiqué dans la colonne « auteur_ice » n’existe pas dans la
table « personne ». Cette contrainte est à garder à l’esprit lorsqu'une personne sera supprimée de la base de données.
Les attributs qui constituent une clé étrangère sont désignés par le signe « FK », pour « Foreign Key ». Graphiquement, on représente une clé étrangère par un
trait en pointillés entre les deux tables, comme ceci :
Le concept de base de données
Découvrez l’utilité des clés étrangères
Ici, la clé étrangère n’est composée que d’un attribut (auteur_ice) car la clé primaire de personne ne contient qu’un attribut (id). Mais si la clé primaire
contient deux attributs, comme pour votre table « lieu », alors il faudrait une clé étrangère à deux attributs, que l’on pourrait appeler par exemple « loc_scene »
et « code_postal » :
Le concept de base de données
Cardinalités minimales et valeurs nulles
Le modèle relationnel met à disposition une valeur bien pratique : la valeur nulle, notée « null ». Cette valeur est équivalente à une case vide dans un tableau,
lorsqu'une information est manquante ou inexistante.
Par exemple, si une table « Personne » contient les attributs « date_naissance » et « date_deces », alors on pourrait contraindre l’attribut « date_naissance » à
n’être jamais « null » si on veut que la date de naissance soit obligatoirement renseignée pour chaque personne. C’est la contrainte de non-nullité. Par contre,
la date de décès sera nulle pour les individus étant encore en vie.
La valeur « null » est différente de la valeur 0, ou de la chaîne de caractères vide "". Contrairement à 0 ou à "", null indique l’absence d’information : soit parce
que l’information n’a pas pu être récoltée, soit parce que l’information n’existe tout simplement pas.
Les attributs qui composent une clé primaire ne peuvent jamais être nuls, car ils servent à identifier les lignes de la table. Une ligne sans identité (ou avec une
identité incomplète), c’est interdit !
Le concept de base de données
Cardinalités minimales et valeurs nulles
COMPRENEZ L’UTILITÉ DES VALEURS NULLES DANS LES CLÉS ÉTRANGÈRES EN FONCTION DE LA CARDINALITÉ MINIMALE
Quand on transforme des associations UML en clés étrangères, la contrainte de non-nullité est utile lorsque la cardinalité minimale est 1 (et non pas 0).
Prenez l’exemple de la composition entre Œuvre et SocieteDeProduction. Elle est de type un-à-plusieurs, car du côté de SocieteDeProduction, la multiplicité
est 1. Cela signifie qu’une œuvre a forcément une et une seule société de production.
Le concept de base de données
Cardinalités minimales et valeurs nulles
COMPRENEZ L’UTILITÉ DES VALEURS NULLES DANS LES CLÉS ÉTRANGÈRES EN FONCTION DE LA CARDINALITÉ MINIMALE
Cette association se traduit par une clé étrangère dans « œuvre ». Cette clé étrangère contient une seule colonne : « societe_prod », et elle référence la clé
primaire « nom » de « societe_de_production »:
Le concept de base de données
Cardinalités minimales et valeurs nulles
COMPRENEZ L’UTILITÉ DES VALEURS NULLES DANS LES CLÉS ÉTRANGÈRES EN FONCTION DE LA CARDINALITÉ MINIMALE
Si la cardinalité minimale était de 0, on aurait pu avoir une œuvre sans société de production. Cela se serait traduit par une valeur nulle dans la colonne
« societe_prod »:
Le concept de base de données
Cardinalités minimales et valeurs nulles
COMPRENEZ L’UTILITÉ DES VALEURS NULLES DANS LES CLÉS ÉTRANGÈRES EN FONCTION DE LA CARDINALITÉ MINIMALE
Or ici, la cardinalité minimale est de 1, ce qui signifie qu’il faut absolument quesociete_prod soit remplie pour toutes les lignes, et qu’il ne peut donc pas y
avoir de valeurs nulles.
On devra donc spécifier au SGBDR une contrainte de non-nullité sur « societe_prod ».
Le concept de base de données
Cardinalités minimales et valeurs nulles
EN RÉSUMÉ
- Une clé étrangère est un groupe de colonnes d’une table qui fait référence à la clé primaire d’une autre table, afin de modéliser le lien entre les lignes de ces
deux tables.
- Une clé étrangère peut être composée d'une ou plusieurs colonnes.
- Dans une table, une absence de valeur est modélisée par une valeur nulle.
- Les valeurs nulles peuvent être utilisées dans une clé étrangère pour spécifier qu'une ligne d'une table A n'est liée à aucune ligne d'une table B.
Modélisez vos bases de données
Transformez les associations de votre diagramme de classes UML
Le concept de base de données
Transformez les associations de votre diagramme de classes UML
- Bonne nouvelle ! Maintenant que vous maîtrisez les clés primaires et étrangères, vous avez toutes les clés en main pour à présent traduire votre diagramme
UML en un modèle relationnel.
- Vous verrez, la traduction est automatique : il n’y a qu’à appliquer quelques règles, et le tour est joué !
- Dans ce chapitre, ne cherchez pas à tout retenir par cœur : cherchez d’abord à comprendre la logique des traductions UML-relationnel. Voyez-le plutôt
comme un « dictionnaire de traduction » dans lequel vous viendrez piocher les cas qui vous seront utiles au moment où vous en aurez besoin.
Le concept de base de données
Transformez les associations de votre diagramme de classes UML
L’ASSOCIATION UN-À-PLUSIEURS
Elle est de type un-à-plusieurs. Certes, c’est aussi une composition. Mais une composition est un cas particulier de un-à-plusieurs. Si vous le voulez bien,
oublions donc l’aspect composition pour le moment, pour nous concentrer sur l’aspect un-à-plusieurs :
L’ASSOCIATION UN-À-PLUSIEURS
Comme une société de production produit PLUSIEURS oeuvres, il faut ajouter une clé étrangère dans œuvre qui référence la clé primaire de
societe_de_production:
Une association un-à-plusieurs se traduit en ajoutant une clé étrangère dans la table qui est du côté « plusieurs ». Cette clé étrangère référence la clé primaire de
la table qui est du côté « un ».
Comme l’association oeuvre - societe_de_production est une composition, elle respecte la règle citée ci-dessus, mais elle a une particularité en plus que je vous
explique un peu plus bas.
Le concept de base de données
Transformez les associations de votre diagramme de classes UML
L’ASSOCIATION UN-À-UN
Pour une association un-à-un entre une table A et une table B, on utilise aussi une clé étrangère. La clé étrangère est placée dans A et elle référence la clé
primaire de B.
Oui, mais il y a un petit détail en plus. Selon le graphique ci-dessus, un cinéma ne peut avoir qu’une adresse, mais deux cinémas peuvent avoir la même adresse
: ce n’est pas ce que l’on veut.
Pour spécifier qu’une adresse ne peut accueillir qu’un seul cinéma, il faut ajouter une contrainte d’unicité sur l’attribut adresse . Ainsi, la colonne adresse ne
pourra pas contenir deux fois la même valeur. Ce qui signifie que adresse ne pourra pas contenir deux fois la même référence vers une adresse donnée.
Autrement dit, une adresse ne pourra pas accueillir plus d’un cinéma.
Il faut donc également spécifier au SGBDR une contrainte d’unicité sur la clé étrangère.
Le concept de base de données
Transformez les associations de votre diagramme de classes UML
EN RÉSUMÉ
Une association un-à-plusieurs se traduit en ajoutant une clé étrangère dans la table qui est du côté « plusieurs ». Cette clé étrangère référence la clé primaire de
la table qui est du côté « un ».
Une association plusieurs-à-plusieurs se traduit en ajoutant une nouvelle table. La clé primaire de cette nouvelle table sera composée des deux clés étrangères
référençant les deux tables à associer.
Pour une association un-à-un entre une table A et une table B, on utilise aussi une clé étrangère. La clé étrangère est placée dans A et elle référence la clé
primaire de B.
Modélisez vos bases de données
Transformez vos compositions et vos classes d'associations
Le concept de base de données
Transformez vos compositions et vos classes d'associations
Une composition, c’est un cas particulier d’association un-à-plusieurs. Comme nous l’avons vu précédemment, il faut donc ajouter une clé étrangère dans la
table qui est du côté « plusieurs », cette clé étrangère référence la clé primaire de la table qui est du côté « un ».
Mais vous le savez désormais, ce qui différencie une composition d’une simple association un-à-plusieurs, c’est que le composant ne peut exister sans son
composite. Ainsi, on identifie un composant à partir de son composite. C’est-à-dire que la clé primaire du composant inclut/comprend obligatoirement le
composite.
C’est le cas entre une œuvre et sa société de production. Car comme vous l’avez vu précédemment, une œuvre se définit par son titre ET par la société qui l’a
produite (car il arrive que deux œuvres aient le même titre).
Maintenant que nous avons ajouté une clé étrangère societe_prod dans oeuvre , qui référence societe_de_production, il est donc possible d’identifier chaque
œuvre par son titre et sa société.
Vous avez donc trouvé la dernière des clés primaires de votre modèle relationnel : celle de la table oeuvre . 😎 La voici : (titre, societe_prod).
Ici, societe_prod est à la fois une clé étrangère ET une partie de la clé primaire de oeuvre.
Une composition est traduite de la même manière qu’une association un-à-plusieurs ; mais en plus, on ajoute à la clé primaire de la table composant la clé
étrangère vers la table composite.
Le concept de base de données
Transformez vos compositions et vos classes d'associations
Maintenant que vous avez la clé primaire de oeuvre, il faut actualiser la table assoc_oeuvre_real avec cette nouvelle clé. Voici le résultat :
Le concept de base de données
Transformez vos compositions et vos classes d'associations
Vous l’avez vu dans ce cours, une classe d’association sert à donner des caractéristiques à une association entre deux classes. C’est le cas par exemple pour la
classe d’association tournage, qui caractérise le lien entre une œuvre et un lieu grâce à une date de début et de fin de tournage :
Vous savez déjà comment traduire une telle relation : en ajoutant une nouvelle table qui contient deux clés étrangères référençant les deux tables de part et
d’autre de l’association. Voici ce que cela donnerait :
Mais en plus, il faut ajouter les attributs qui caractérisent cette association. Il suffit d’ajouter ces attributs à notre nouvelle table !
Mais cette nouvelle table dont on parle, c’est notre table tournage, non ?
Une association plusieurs-à-plusieurs avec une classe d’association se traduit en une nouvelle table. Cette table contient tous les attributs de la classe
d’association, ainsi que deux clés étrangères référençant les deux tables de part et d’autre de l’association.
Le concept de base de données
Transformez vos compositions et vos classes d'associations
CLÉ PRIMAIRE
Effectivement, vous aviez vu au chapitre précédent que les deux dates, à elles seules, ne suffisaient pas à garantir la contrainte d’unicité (deux œuvres peuvent
être tournées sur une même période). Mais avec les clés étrangères que nous avons ajoutées, c’est maintenant faisable !
Vous avez vu que par défaut, la clé primaire d’une table issue d’une association plusieurs-à-plusieurs est composée des deux clés étrangères référençant les
deux tables de part et d’autre de l’association.
Ici, vous êtes donc sûr que le groupe (titreoeuvre, loc_scene, code_postal) fait partie de la clé primaire de tournage . Cependant, selon le cas, il faudra parfois
ajouter d’autres attributs à la clé. Dans notre cas, il est clairement possible qu’une œuvre soit tournée plusieurs fois au même endroit.
Voici donc une clé primaire possible : (titre_oeuvre, loc_scene, code_postal, date_de_debut). En effet, on ne peut pas avoir 2 lignes de tournage relatives au
même film, au même endroit, et commençant le même jour. Si c’est le cas, cela signifie que ces deux lignes correspondent en fait à une seule et unique session
de tournage.
La clé primaire de la table issue d’une classe d’association plusieurs-à-plusieurs est composée d’au moins les deux clés étrangères, et optionnellement de
certains des autres attributs (à déterminer sur le critère de l’unicité de la clé primaire).
Le concept de base de données
Transformez vos compositions et vos classes d'associations
Pour une classe d’association d’une relation un-à-plusieurs, les attributs de la classe d'association sont ajoutés à la table qui est du côté « plusieurs ».
Le concept de base de données
Transformez vos compositions et vos classes d'associations
Pour une classe d’association d’une relation un-à-un, les attributs de la classe d'association sont ajoutés à la table qui a été choisie pour recevoir la clé étrangère.
Le concept de base de données
Transformez vos compositions et vos classes d'associations
EN RÉSUMÉ
Une composition est traduite de la même manière qu’une association un-à-plusieurs ; mais en plus, on ajoute, à la clé primaire de la table composant, la clé
étrangère vers la table composite.
Une classe d’association sur une association plusieurs-à-plusieurs se traduit en une nouvelle table. Cette table contient tous les attributs de la classe
d’association, ainsi que deux clés étrangères référençant les deux tables de part et d’autre de l’association.
Modélisez vos bases de données
Transformez vos relations d’héritage
Le concept de base de données
Transformez vos relations d’héritage
Le modèle relationnel n’a pas été pensé pour représenter des relations d’héritage. Il est certes possible de les modéliser, mais cela nécessitera un peu de
réflexion de votre part.
Chacune de ces trois méthodes possède ses avantages et inconvénients, que nous allons détailler ici.
La méthode la plus fréquente est la transformation de l’héritage par référence, car elle est bien adaptée à la majeure partie des cas de figure.
Le concept de base de données
Transformez vos relations d’héritage
Avec cette méthode, il vous faut créer une table pour la classe mère, et une table par classe fille. Des clés étrangères dans les tables des classes filles
permettront de référencer la table de la classe mère.
La clé primaire de chaque table fille doit être la même clé primaire que la table mère. Chacune des clés primaires des tables filles est donc également une clé
étrangère qui référence la table mère.
C’est à-dire ?
Dans notre cas, la clé primaire d eoeuvre est(titre, societe_prod). Ces deux attributs devront donc être ajoutés aux tables filles (telefilm,
long_metrage,serie_web, serie_tvetserie), et ils seront à la fois clé étrangère vers oeuvre, et à la fois clé primaire de chaque table fille :
On pourrait aussi considérer aussi que saison fait partie de la clé primaire deserie ,
mais pour ne pas allonger le cours, je ne traiterai pas ce cas ici. ;)
Cette méthode est adaptée à la majeure partie des cas de figure. Utilisez-la donc par défaut.
Cependant, dans votre cas, cela implique six tables, et la majeure partie de ces tables n’a pas
d’autre attribut que la clé primaire. Elles ne contiennent donc quasiment pas d'information
intéressante. La création d’une table par classe fille est donc ici peu adaptée.
Le concept de base de données
Transformez vos relations d’héritage
C’est la solution la mieux adaptée à votre cas ; c’est donc celle que vous utiliserez pour la suite du cours.
Avec cette méthode, il n’y a qu’une seule table : celle qui correspond à la classe mère.
Elle nécessite donc de regrouper toutes les informations des classes filles dans cette unique table. Tous les attributs des classes filles seront donc réintégrés à la
classe mère. En plus, un attribut supplémentaire sera ajouté (appelé attribut de discrimination), qui indique pour chaque ligne à quelle classe fille cette ligne
correspond.
En reprenant votre UML, vous verrez que parmi toutes les classes filles de oeuvre , il n’y a qu’un seul attribut : saison . Vous allez donc l’ajouter à la table
oeuvre. Remarquez que cet attribut aura la valeur NULL lorsque l’œuvre en question ne sera pas une série.
Aussi, il vous faut ajouter l’attribut de discrimination qui permet de savoir si une œuvre est un téléfilm, un long-métrage, etc. Appelez cet attribut
type_de_tournage:
Cette méthode est particulièrement adaptée quand les classes filles ne contiennent que très peu d’attributs. Dans le cas contraire, la table contiendra beaucoup
de colonnes et beaucoup de valeurs NULL.
Le concept de base de données
Transformez vos relations d’héritage
Avec cette méthode, la classe mère ne donne pas lieu à une table. À l’inverse, chaque classe fille est traduite par une table, et chacune de ces tables doit alors
reprendre les attributs de la classe mère.
De plus, la clé primaire de chaque table fille doit être la clé primaire de la classe mère. Dans votre cas, chaque table fille aurait donc eu comme clé
primaire(titre, societe_prod):
Cette méthode est adaptée lorsque la classe mère est abstraite, car l’absence de table correspondant à la classe mère traduit bien de fait qu’il est interdit
d’instancier la classe mère.
Le concept de base de données
Transformez vos relations d’héritage
AUTRES ALTERNATIVES
Le modèle relationnel n’ayant pas été conçu pour gérer efficacement l’héritage, il a été créé une amélioration du modèle relationnel : le modèle objet-
relationnel. Il reprend les concepts du modèle relationnel, mais y ajoute quelques notions empruntées à l’orienté objet (qui se modélise par le diagramme de
classes UML), comme l’héritage.
À VOUS DE JOUER
Maintenant que vous avez sous la main toutes les règles de traduction de l’UML vers le relationnel, je vous laisse traduire entièrement votre diagramme UML
en modèle relationnel !
Le concept de base de données
Transformez vos relations d’héritage
RÉPONSE
Voici la réponse :
Le concept de base de données
Transformez vos relations d’héritage
EN RÉSUMÉ
- par référence
- par classe mère
- par classes filles.
Modélisez vos bases de données
Améliorez votre modélisation grâce aux formes normales
Le concept de base de données
Améliorez votre modélisation grâce aux formes normales
Il y a toujours plusieurs façons de modéliser des données : certaines sont meilleures que d’autres. L’un des principaux critères est la présence ou non de
redondance dans la modèle. Pour nous aider à différencier la qualité de deux modèles donnés, des critères ont été créés, appelés formes normales.
Jusqu’à maintenant, nous avons souvent parlé de redondance, mais sans réellement formaliser de règle. Les formes normales vont combler ce manque.
Le concept de base de données
Améliorez votre modélisation grâce aux formes normales
Réfléchissons un peu plus sur la question de la redondance, en nous basant sur votre fichier CSV :
Ici, vous avez par exemple une redondance sur le type d'œuvre. L’information selon laquelle Fleabag des studios Banijay est une série TV est présente plusieurs
fois. Pourquoi ? Parce que le type d'œuvre ne dépend que de l'œuvre. Or dans le fichier, il y a beaucoup de lignes qui concernent une même œuvre :
l’information est donc dupliquée.
J’ai employé ici le terme « ne dépend que de... ». Vous allez voir : tout est une question de dépendance d’attributs les uns envers les autres.
Quand vous dites « le type d’oeuvre ne dépend que de l’oeuvre », cela signifie que dans le fichier, si vous voyez « Fleabag des studios Banijay », alors le type
sera forcément « Série TV ».
Seulement, qu’est-ce qui permet d'identifier une œuvre dans votre fichier ? On en a déjà parlé : on identifie une œuvre par son titre et sa société de production,
soit (titre, societe_prod)
Le concept de base de données
Améliorez votre modélisation grâce aux formes normales
On dit donc que type_de_tournage dépend fonctionnellement du groupe d’attributs (titre, societe_prod) . Cela s’appelle une dépendance fonctionnelle. Elle se
note avec une flèche :
Seulement voilà : dans votre fichier, le groupe(titre, societe_prod) n’est pas unique : plusieurs lignes correspondent à une même œuvre. S’il y a plusieurs fois la
même œuvre, alors il y aura, à cause de la dépendance fonctionnelle, plusieurs lignes qui indiquent de quel type est une œuvre donnée. Et il y aura donc de la
redondance.
Conclusion : pour éviter la redondance, il faudrait que (titre, societe_prod) soit unique. Donc que ce groupe d’attributs soit une clé primaire (ou tout au moins
une clé candidate). Voici donc ce que vous pouvez en conclure :
Pour éviter (une bonne partie de) la redondance dans une table, il faut que chaque attribut (qui n’appartient pas à la clé primaire) ne dépende que de la clé
primaire de la table.
Le concept de base de données
Améliorez votre modélisation grâce aux formes normales
Petit complément : si un attribut dépend d’une partie de la clé primaire, il y a tout de même risque de redondance. Imaginons une table dont la clé primaire
serait(titre, societe_prod), et un attributadresse_societe_prod donnant l’adresse postale de la société de production.
adresse_societe_prod dépend uniquement desociété_prod . Comme societe_prod n’est pas unique (car ce n’est qu’une partie de la clé primaire), alors il y a
quand même risque de redondance :
Mais au fait, comment être sûr qu’un attribut A dépend d’un groupe d’attributs G ?
Imaginez que vous connaissiez parfaitement les données que vous modélisez. Posez-vous cette question : en ne connaissant que G, puis-je déterminer de
manière certaine A, sans ambiguïté, et sans avoir besoin d’autre information ?
Par exemple :
Pouvez-vous déterminer le type de tournage (Téléfilm, Série TV, etc.) d’une œuvre en ne connaissant que sa société de production ? La réponse est non, car une
société de production peut avoir produit plusieurs œuvres de types différents. Il y a donc une ambiguïté, et pour la résoudre il vous faut une information en
plus : le titre de l’œuvre. Avec le titre et la société de production, vous pouvez déterminer le type de tournage, si vous connaissez sur le bout des doigts vos
données. On peut donc dire que :
- type_de_tournage ne dépend pas uniquement de societe_prod
- type_de_tournage dépend de (titre, societe_prod)
Oui, mais si je connais le titre, la société de production et le lieu de tournage d’un tournage donné, je peux aussi déterminer type_de_tournage . Peut-on dire
que type_de_tournage dépend de (titre, societe_prod, localisation_de_la_scene) ?
Oui, mais ce n’est pas très intéressant, car (titre, societe_prod, localisation_de_la_scene) n’est pas minimal, c’est-à-dire que l’on peut enlever l’un des
attributs ( localisation_de_la_scene ) sans casser le lien de dépendance. On dira alors que :
Le raisonnement que vous venez de mener a été formalisé sous forme de trois règles, appelées formes normales. Il en existe plus que trois, mais on considère en
général qu’une modélisation qui respecte ces trois premières formes évite déjà une très grande partie de la redondance qui peut se cacher dans les données.
La 1NF
La première forme normale est un prérequis aux deux suivantes. Comme on parle de clés primaires, il faut que :
Chaque attribut ne contienne qu’une seule information à la fois (sinon c’est rapidement le bazar dès qu’il s’agit de contrôler la redondance d’information ou
l’unicité d’un attribut).
Autrement dit, chaque attribut doit être atomique, c’est-à-dire qu’il ne doit être ni multivalué ni composite
Un attribut composite peut être décomposé en plusieurs attributs atomiques. Voici un exemple avec un attribut adresse :
Un attribut multivalué peut être transformé en une nouvelle table liée à la table d’origine par une association un-à-plusieurs ou plusieurs-à-plusieurs selon le
cas.
Dans notre fichier, la colonne realisateur_ice est multivalué, car une seule cellule contient parfois deux noms de réalisateurs.
Intuitivement, vous avez bien pris en compte ceci dans votre modèle relationnel, car vous avez transformé cet attribut multivalué en une nouvelle table
realisateur_ice , contenant un attribut nom qui est atomique (et c’est bien !). Cette nouvelle table est liée avec la table oeuvrepar une association plusieurs-à-
plusieurs :
Une table est en 1NF si elle possède une clé primaire et si tous ses attributs
sont atomiques.
Le concept de base de données
Améliorez votre modélisation grâce aux formes normales
LA 2NF
La deuxième forme normale découle de la réflexion que vous avez menée plus haut :
Rappel : une clé candidate est un groupe d’attributs éligible à être une clé primaire. Une table peut avoir plusieurs clés candidates, mais une seule d’entre elles
doit être retenue comme clé primaire.
Le concept de base de données
Améliorez votre modélisation grâce aux formes normales
LA 3NF
Et si tout attribut (n'appartenant pas à une clé candidate) ne dépend pas d'un autre attribut n'appartenant pas à une clé candidate.
Le concept de base de données
Améliorez votre modélisation grâce aux formes normales
alors il faut créer une nouvelle table T2 qui contiendra les attributs A et G.
G deviendra la clé primaire de cette nouvelle table. Dans la table T1, on pourra supprimer A mais garder G, et G sera défini comme clé étrangère référençant
T2.
Il faut cependant s'assurer que G soit minimal (c'est-à-dire que l'on ne puisse pas enlever d'attribut au groupe G sans casser la dépendance entre A et G).
Aussi, si un autre attribut B dépend également uniquement de G, alors il faut aussi le déplacer dans la nouvelle table T2 !
Le concept de base de données
Améliorez votre modélisation grâce aux formes normales
Pour mieux saisir ce concept, je vous conseille vivement cette courte vidéo sur Openclassrooms, qui est bien plus explicite que ce qu’il n’est possible
d’exprimer avec du texte. ;)
Par exemple, dans votre fichier CSV, vous avez vu que type_de_tournage dépend de ( titre, societe_prod). De plus, ce groupe est minimal. On peut donc
appliquer la règle ci-dessus avec :
- T1 = votre fichier CSV
- A = type_de_tournage
- G = (titre, societe_prod)
En suivant cette règle,
- On crée T2 dont la clé primaire est(titre, societe_prod), et qui contient comme attribut type_de_tournage .
- On supprime la colonne type_de_tournage du gros fichier CSV.
- On indique que(titre, societe_prod) est une clé étrangère qui référence T2.
Et là… surprise ! Vous vous rendez compte que T2 correspond tout à fait à la table oeuvre que vous avez définie précédemment !
Ce que je vous propose, c’est de considérer que votre fichier CSV est une table, puis de la séparer en plusieurs tables en analysant les dépendances entre les
attributs. Il faudra utiliser la règle citée ci-dessus.
Mais avant de commencer, il faut déterminer la clé primaire de votre gros fichier.
Facile ! Chaque ligne est identifiée par la colonne identifiant_du_lieu, c’est donc la clé primaire !
Le concept de base de données
Améliorez votre modélisation grâce aux formes normales
C’est bon signe, cela signifie que, sans le savoir, vous étiez sur la bonne voie quand vous avez déterminé votre modèle relationnel !
La question est maintenant de savoir : aurions-nous abouti au même modèle relationnel si nous avions suivi cette procédure jusqu’au bout ? C’est-à-dire en
séparant successivement le gros fichier CSV en différentes tables ?
Eh bien… vous allez vous-même réfléchir à la réponse dans quelques secondes ! De plus, c’est cette procédure que vous allez appliquer au chapitre suivant,
quand vous allez séparer votre fichier CSV en différentes tables.
Quand vous êtes face à une table, demandez-vous TOUJOURS quelle peut en être la clé primaire, en testant la contrainte d’unicité.
En effet, c’est la clé primaire qui vous renseigne sur la nature de chacune des lignes de la table.
Instinctivement, vous auriez pu vous dire « Chaque ligne est identifiée par la colonne identifiant_du_lieu », chaque ligne est donc un lieu. Or c’est faux : il y a
parfois plusieurs lignes qui correspondent à un même lieu, par exemple les lignes 2016-1817et 2016-1622. Il y a donc moins de lieux que de lignes dans votre
fichier.
C’est dangereux, car si on vous avait demandé de compter à combien de lieux différents ont été tournées des œuvres, vous auriez été tenté de compter les lignes
de votre fichier (8 919 dans mon fichier), alors qu’il y a des adresses en double (il n’y a qu’environ 5 000 lieux différents dans mon fichier).
Le concept de base de données
Améliorez votre modélisation grâce aux formes normales
La colonne identifiant_du_lieu n’est donc pas un identifiant du lieu, mais plutôt un identifiant de sessions de tournage d’une œuvre donnée, sur un lieu donné,
sur une période donnée. Autrement dit, c’est l’identifiant d’une association entre :
Et une période de tournage (identifiée pardate_de_debut) d’une œuvre (identifiée par titre etsociete_prod).
Vous pouvez donc déduire que l’une des clés primaires possibles est (localisation_de_la_scene, code_postal, date_de_debut, titre, societe_prod) .
À partir de cette information, tout attribut qui ne dépendra pas de cette clé primaire, ou qui n’en dépendra que d’une partie, pourra être déplacé dans une
nouvelle table !
Le concept de base de données
Améliorez votre modélisation grâce aux formes normales
À VOUS DE JOUER !
Vous avez toutes les clés en main pour déduire un modèle relationnel à partir des colonnes de votre fichier !
Faites d’abord l’exercice et continuez votre lecture pour avoir la réponse. ;-)
( localisation_de_la_scene, code_postal) -> (latitude, longitude) . C’est certes discutable, mais nous considérerons ici qu’il n’y a qu’un seul couple lat/long
pour une adresse donnée.
Sur les points 1 à 3, tout correspondait à ce que vous aviez trouvé avant ce chapitre. Mais pour le point 4, c’est différent : en effet, on s’aperçoit que le
réalisateur d’une œuvre ne dépend pas que de l’oeuvre en question, mais aussi de la période de tournage.
Le concept de base de données
Améliorez votre modélisation grâce aux formes normales
À VOUS DE JOUER !
En effet, il arrive que des réalisateurs se succèdent au cours de la réalisation d’une œuvre. C’est souvent le cas pour les séries, dans lesquelles chaque épisode
est parfois réalisé par des personnes différentes.
Par exemple pour la série « Munch », réalisé par Thierry BINISTI en juillet 2019 et par Laurent TUEL en mai 2019 .
Si vous regardez le modèle relationnel que vous aviez jusqu’au chapitre précédent, vous n’aviez pas moyen de savoir quel réalisateur dirigeait le tournage
d’une période donnée. En d’autres termes, même si vous pouviez connaître les réalisateurs de « Munch », vous n’aviez plus moyen de savoir que les tournages
de mai 2019 ont été dirigés par Laurent TUEL.
Pour résoudre cela, il faut appliquer la règle donnée ci-dessus et créer une table dont la clé primaire est ( titre, societe_prod,date_de_debut , date_de_fin), et
qui contient un attribut realisateur_ice . Cette table donne des périodes de tournage d’une œuvre donnée (mais sans indication de lieu). On
l’appeleraperiode_de_tournage.
De plus, la colonne « Réalisateur/Réalisatrice » de votre fichier est multivalué, car certaines lignes contiennent des couples de réalisateurs (voir la ligne2019-
407). Comme nous l’avions dit plus haut dans ce chapitre, vous pouvez donc le décomposer en une nouvelle table appelée realisateur_ice, qui est liée
àperiode_de_tournage par une association plusieurs-à-plusieurs, comme ceci :
Le concept de base de données
Améliorez votre modélisation grâce aux formes normales
À VOUS DE JOUER !
À la fin, quand vous aurez séparé toutes les tables, il ne vous restera plus que :
- id_lieu
- Une clé étrangère vers lieu, composée de deux colonnes ;
- Une clé étrangère vers periode_de_tournage, composée de quatre colonnes.
Vous pouvez supprimer id_lieu: il ne sert plus à rien. Cette table a tout à fait la forme d’une table d’association entre lieu et periode_de_tournage: et ça tombe
bien, car une table d’association signifie une association plusieurs-à-plusieurs. Or :
- Un tournage peut se réaliser à la même période sur deux lieux différents (avec deux équipes différentes ou avec une équipe qui se déplace dans la même
journée) ;
- Un lieu peut accueillir différents tournages sur une même période !
À VOUS DE JOUER !
Youpi ! Vous avez maintenant votre modèle relationnel définitif, qui est en 3NF !
Le concept de base de données
Améliorez votre modélisation grâce aux formes normales
À VOUS DE JOUER !
Lorsque vous modifiez votre modèle relationnel pour le mettre en 3NF, il faut toujours actualiser l’UML en conséquence :
Le concept de base de données
Améliorez votre modélisation grâce aux formes normales
EN RÉSUMÉ