Maintenant que votre projet est créé et que la bibliothèque Room a été importée dans celui-ci, il est possible de passer aux premières étapes de l’implémentation de la base de données. Mais avant de plonger tête baissée dans le code en écrivant les classes, une phase d’analyse est nécessaire.
Analysez votre besoin
Nous n’allons pas implémenter l’ensemble des fonctionnalités proposées par l’application PETiSoin. Nous allons nous concentrer sur une partie précise de celle-ci : la persistance des animaux et des notes associées.
Avant d’écrire du code, il est important de prendre le temps d’analyser toutes les données que l’application doit persister. Il est aussi essentiel de penser à la façon dont ces données seront stockées dans une base de données relationnelle. Pour nous aider dans cette analyse, nous allons procéder à la réalisation d’un modèle physique de données (MPD), à l’aide du logiciel MySQL Workbench, que nous pourrons ensuite traduire en code Java et Kotlin.
Identifiez les tables de la base de données
La première étape de notre analyse est d’identifier les tables qui composeront la base de données. Cela va nous permettre de répondre au besoin fonctionnel qui est de persister des animaux et des notes associées.
Nous allons donc avoir besoin de deux tables : une pour stocker les animaux et une pour stocker les notes.
Listez les attributs des tables de la base de données
Maintenant que les tables sont définies, il convient de se pencher sur les attributs qui les composent.
L’objectif étant pédagogique, il n’est pas nécessaire ici d’être exhaustif et de tenter de couvrir l’ensemble des attributs permettant de caractériser un animal. Aussi, nous allons rester simples et nous limiter aux caractéristiques suivantes.
Nom | Type | Commentaire |
Identifiant unique | Nombre entier | Il s’approche de la notion de tatouage de l’animal. Il s’agit de la clé primaire. |
Type | Chaînes de caractères | Il y a trois possibilités : chien, chat et lapin. |
Nom | Chaînes caractères | Il n’est pas obligatoirement renseigné si l’animal n’a pas encore de nom. |
Taille | Nombre entier | Elle se mesure en centimètres. |
Poids | Nombre entier | Il se mesure en grammes. |
Âge | Nombre entier | Il se mesure en années. |
Pays | Chaînes de caractères | C’est le lieu de résidence de l’animal. |
Ville | Chaînes de caractères | C’est le lieu de résidence de l’animal |
Numéro et nom de la rue | Chaînes de caractères | C’est le lieu de résidence de l’animal |
Réalisez le modèle physique de données de chaque table
À partir de ce tableau, il est alors possible de compléter le MDP.
Le même exercice est à réaliser pour une note.
Nom | Type | Commentaire |
Identifiant unique | Nombre entier | Il s’agit de la clé primaire. |
Titre | Chaîne de caractères |
|
Contenu | Chaîne de caractères |
|
Date de création | Nombre entier | Timestamp (c’est le nombre de millisecondes écoulées depuis le 1er janvier 1970). |
Il est alors possible de compléter le MPD.
Finalisez le MPD en identifiant les liens entre les tables
Pour terminer le MPD, il faut déterminer la relation qui existe entre ces deux tables. Dans le cas de notre fonctionnalité, plusieurs notes peuvent être associées à un animal mais une note ne peut être associée qu’à un unique animal. Il s’agit donc d’une relation 1:n.
Voici alors le MDP final.
Vous remarquerez que la modélisation du lien entre les deux tables se modélise par l’attribut Animal_id
. Il s’agit d’une clé étrangère qui référence la clé primaire de l’animal. C’est ce qu’on appelle une contrainte d’intégrité référentielle.
Écrivez vos premières classes
Maintenant que le MPD a été réalisé, vous allez pouvoir le traduire en code grâce à l’utilisation des classes. Dans un premier temps, transposez simplement le MPD en code en écrivant deux classes reprenant les attributs des deux tables de la base de données. Si vous ne savez pas où mettre ces classes dans votre projet, vous pouvez les placer dans un package “database.model”.
Si vous utilisez Java : | Si vous utilisez Kotlin : |
|
|
Cependant, en termes de programmation orientée objet, ce code présente un défaut. En effet, tous les éléments qui composent le lieu de résidence de l’animal sont directement portés par la classeAnimal
. Il serait plus approprié de créer une nouvelle classe appeléeAddress
pour gérer ces informations.
Si vous utilisez Java : | Si vous utilisez Kotlin : |
|
|
Voici une vidéo qui récapitule les principales étapes pour écrire les classes.
À vous de jouer !
Contexte
Vous devez poser les premières lignes de code pour implémenter la rubrique “Santé” de l’application PETiSoin. Vous allez commencer par écrire le modèle de données.
Dans le projet, disponible sur GitHub (Java ou Kotlin), une première classeAnimal
a déjà été créée mais ce n’est pas suffisant pour permettre le bon fonctionnement de la rubrique “Santé” de l’application.
Consignes
Dans lepackage com.openclassRooms.Room.data.entity
, ajoutez la classe Vaccine
qui permet d’associer un vaccin à un animal.
Livrables
Vous pouvez dupliquer le projet GitHub pour modifier le code source du projet et fournir un projet qui compile.
En résumé
Le logiciel MySQL Workbench permet de créer un modèle physique de données (MPD).
Chaque table de la base de données doit avoir une clé primaire.
Pour faire le lien entre deux tables de la base de données, une clé étrangère doit être utilisée.
Une contrainte d’intégrité référentielle stipule que chaque valeur de clé étrangère dans une table doit correspondre à une valeur existante de clé primaire dans une autre table référencée.
Vous avez structuré votre modèle de données en identifiant des classes. Vous allez maintenant aller un peu plus loin en transformant ces classes en entités grâce aux différentes annotations de Room.