You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Une base de données est un ensemble structuré de données, avec un accès facile et rapide pour des applications logicielles et des utilisateurs autorisés. Elle peut être considérée comme un grand conteneur **organisé** pour stocker des informations de manière **structurée**.
70
70
71
-
Parmi les différents types de bases de données, nous allons nous intéresser aux bases de données relationnelles. Une base de données **relationnelle** est une collection de tables liées entre elles par des relations. Les bases de données relationnelles sont très répandues et utilisées dans de nombreux domaines, notamment dans la gestion des entreprises, les services financiers, l'administration publique et la recherche scientifique. Elles sont conçues pour gérer des quantités massives de données de manière fiable et cohérente. Ce tutoriel vous permettra de:
71
+
Parmi les différents types de bases de données, nous allons nous intéresser aux bases de données relationnelles. Une base de données **relationnelle** est une collection de tables liées entre elles par des relations. Les bases de données relationnelles sont très répandues et utilisées dans de nombreux domaines, notamment dans la gestion des entreprises, les services financiers, l'administration publique et la recherche scientifique. Elles sont conçues pour gérer des quantités massives de données de manière fiable et cohérente. Ce tutoriel vous permettra de:
72
72
73
73
- créer une base de données relationnelle
74
74
- normaliser les données dans votre base
@@ -77,9 +77,9 @@ Parmi les différents types de bases de données, nous allons nous intéresser a
77
77
78
78
## Base de données et normalisation
79
79
80
-
Ajouter des tables dans une base de données n'est pas une étape complexe. Si l'on ne s'intéresse pas à la **normalisation** des données, les avantages d'une base de données restent très limité. La normalisation des données dans une base vise à optimiser la structure de ces données en **évitant la redondance** et en définissant des liens entre les tables. La normalisation va permettre de diminuer la taille d'une base de données, de simplifier les requêtes, et d'optimiser le traitement des requêtes.
80
+
Ajouter des tables dans une base de données n'est pas une étape complexe. Si l'on ne s'intéresse pas à la **normalisation** des données, les avantages d'une base de données restent très limités. La normalisation vise à optimiser la structure de ces données en **évitant la redondance** en définissant des liens entre les tables. La normalisation va permettre de diminuer la taille d'une base de données, de simplifier les requêtes, et d'optimiser le traitement des requêtes.
81
81
82
-
Le tableau de données présenté est inspiré des travaux de fin d'étude de Benzerkallah [Effet des facteurs pédologiques sur les communautés d'abeilles sauvages dans les potagers de la commune de Mons](http://www.atlashymenoptera.net/biblio/02000/BENREZKALLAH_2022_potager_Mons.pdf) dont voici la citation.
82
+
Le tableau de données présenté est inspiré des travaux de fin d'études de Benrezkallah[Effet des facteurs pédologiques sur les communautés d'abeilles sauvages dans les potagers de la commune de Mons](http://www.atlashymenoptera.net/biblio/02000/BENREZKALLAH_2022_potager_Mons.pdf) dont voici la citation.
83
83
84
84
> Benrezkallah J. 2022. Effet des facteurs pédologiques sur les communautés d'abeilles sauvages dans les potagers de la commune de Mons. Mémoire de Master 2 en Sciences biologiques, Université de Mons, Mons, 127 pp.
85
85
@@ -89,32 +89,32 @@ Cette étude a nécessité la collecte de nombreuses données que le chercheur s
89
89
head(bees, 10)
90
90
```
91
91
92
-
Les colonnes de ce tableau sont les suivantes:
92
+
Les colonnes de ce tableau sont les suivantes:
93
93
94
-
- **id:** l'identifiant de l'insecte collecté
95
-
- **species:** le nom latin (genre et espèce) de l'insecte capturé
96
-
- **author:** la personne qui a collecté et identifié l'insecte
97
-
- **country:** le pays de la collecte
98
-
- **city:** la ville de la collecte
99
-
- **station:** le lieu précis de la collecte
100
-
- **localisation:** les coordonnées de la station (WGS84)
94
+
-**id:** l'identifiant de l'insecte collecté
95
+
-**species:** le nom latin (genre et espèce) de l'insecte capturé
96
+
-**author:** la personne qui a collecté et identifié l'insecte
97
+
-**country:** le pays de la collecte
98
+
-**city:** la ville de la collecte
99
+
-**station:** le lieu précis de la collecte
100
+
-**localisation:** les coordonnées de la station (dans le système WGS84)
101
101
102
-
Utilisez la zone de code R ci-dessous pour explorez le jeu de données `bees` comme bon vous semble afin de répondre aux questions plus bas (utilisez le bouton **Run Code** uniquement).
102
+
Utilisez la zone de code R ci-dessous pour explorer le jeu de données `bees` comme bon vous semble afin de répondre aux questions plus bas (utilisez le bouton **Run Code** uniquement).
103
103
104
104
```{r explo_noscore, exercise=TRUE}
105
105
106
106
```
107
107
108
108
```{r qu_db}
109
109
quiz(
110
-
question("Est-ce que la tableau présenté ci-dessus peut être ajouté comme une table dans une base de données relationnelle ?",
110
+
question("Est-ce que le tableau présenté ci-dessus peut être ajouté comme une table dans une base de données relationnelle ?",
111
111
answer("Oui", correct = TRUE),
112
112
answer("Non"),
113
113
allow_retry = TRUE,
114
114
random_answer_order = TRUE,
115
115
correct = "Ce tableau correspond bien à un format cas par variable. Il est donc possible de l'utiliser dans une base de données. Il n'est cependant pas normalisé."
116
116
),
117
-
question("Sélectionnez parmi les variables suivantes celles présentant de la redondance optimisable par une normalisation niveau 3 (déependance transitive).",
117
+
question("Sélectionnez parmi les variables suivantes celles présentant de la redondance optimisable par une normalisation niveau 3 (dépendance transitive).",
118
118
answer("country", correct = TRUE, , message = "Il n'est pas utile de répliquer le nom de pays d'une station pour chaque collecte."),
119
119
answer("localisation", correct = TRUE, message = "Il n'est pas utile de répliquer les coordonnées d'une station pour chaque collecte."),
120
120
answer("id", message = "La variable 'id' est un identifiant unique pour chaque individu collecté. Cette variable n'est pas redondante."),
@@ -125,7 +125,7 @@ quiz(
125
125
126
126
## Base de données et schéma
127
127
128
-
Suite à votre exploration du tableau `bees`, vous avez pu observer que son schéma peut être optimisé. Deux tables sont réalisées pour assurer une normalisation au niveau 3 de la base. Vous pouvez observer qu'une colonne 'id_station' a été ajoutée.
128
+
Suite à votre exploration du tableau `bees`, vous avez pu observer que son schéma peut être optimisé. Deux tables sont réalisées pour assurer une normalisation au niveau 3 de la base. Vous pouvez observer qu'une colonne `id_station` a été ajoutée.
129
129
130
130
```{r, echo=TRUE}
131
131
head(stations)
@@ -179,7 +179,7 @@ grade_code("Vous venez de créer une base de données en mémoire avec deux tabl
179
179
180
180
Il est à présent temps de définir des clés pour ces deux tables. Vous allez pour ce faire employer le package {dm}.
181
181
182
-
Créez un objet **dm** associé à votre base de données (`bees_db`) et nommez-le `bees_dm`. Indiquez ensuite que vous voulez utiliser la couleur rouge pour la table `stations` et la couleur orange pour la table `captures`. Terminez par visualiser le schéma de la base en l'état.
182
+
Créez un objet **dm** associé à votre base de données (`bees_db`) et nommez-le `bees_dm`. Indiquez ensuite que vous voulez utiliser la couleur rouge pour la table `stations` et la couleur orange pour la table `captures`. Enfin, visualisez le schéma de la base en l'état.
grade_code("Vous avez un objet dm. La visualition de l'objet vous permet d'observer vos deux tables. Actuellement, les clés primaires et les clés étrangères n'ont pas encore été définie.")
206
+
grade_code("Vous avez un objet dm. La visualisation de l'objet vous permet d'observer vos deux tables. Actuellement, les clés primaires et les clés étrangères n'ont pas encore été définies.")
207
207
```
208
208
209
209
Afin de compléter le schéma de votre base de données (finaliser le niveau 1 de normalisation), définissez une clé primaire pour chaque table.
@@ -254,7 +254,7 @@ grade_code("Votre objet bees_dm1 comprend à présent deux clés primaires, une
254
254
Définissez maintenant une clé étrangère qui fait le lien entre vos deux tables (`captures` et `stations`) selon une relation un à plusieurs en partant de l'objet `bees_dm1` et placez le résultat dans `bees_dm2`. Enfin, visualisez le schéma de la base depuis `bees_dm2`.
@@ -278,7 +278,7 @@ grade_code("Votre objet bees_dm2 comprend à présent deux clés primaires et un
278
278
279
279
## Requête sur la base de données
280
280
281
-
Répondez à la question suivante à l'aide d'un tableau résumé: *Combien d'individus par espèce ont été collectés dans la station "Abbaye Saint Denis" par l'auteur "Benrezkallah"?*
281
+
Répondez à la question suivante à l'aide d'un tableau résumé: *Combien d'individus par espèce ont été collectés dans la station "Abbaye Saint Denis" par l'auteur "Benrezkallah"?*
282
282
283
283
Le schéma de la base de données est repris ci-dessous afin de vous aider à répondre à cette question.
dm_filter(., stations, station == "Abbaye Saint Denis") %>.% # filtre sur `stations`
310
-
dm_filter(., ___, ___) %>.% # filtre sur `captures`
309
+
dm_filter(., stations = station == "Abbaye Saint Denis", # filtre sur `stations`
310
+
___ = ___) %>.% # filtre sur `captures`
311
311
dm_flatten_to_tbl(., captures) -> # combinaison des tables
312
312
bees_request
313
313
# Résumé des données par espèce
@@ -326,8 +326,8 @@ bees_request %>.%
326
326
## Solution ##
327
327
# Filtre
328
328
bees_dm2 %>.%
329
-
dm_filter(., stations, station == "Abbaye Saint Denis") %>.% # filtre sur `stations`
330
-
dm_filter(., captures, author == "Benrezkallah") %>.% # filtre sur `captures`
329
+
dm_filter(., stations = station == "Abbaye Saint Denis", # filtre sur `stations`
330
+
captures = author == "Benrezkallah") %>.% # filtre sur `captures`
331
331
dm_flatten_to_tbl(., captures) -> # combinaison des tables
332
332
bees_request
333
333
@@ -342,12 +342,12 @@ bees_request %>.%
342
342
```
343
343
344
344
```{r request_h2-check}
345
-
grade_code("L'espèce la plus présente est *Bombus pascorum*. La mise en place d'un schéma avec {dm} a permis de réaliser une requête sur deux tables et de les combiner facilement. Vous avez ensuite résumé ces observations. Vous avez réalisé tout cela directement dans votre base de données et sans vous préoccuper de l'écriture de la requête. En effet, {dbplyr} que vous avez utilisé ici vous permet d'écrire du code Tidyverse classique et il vous le traduit en requête SQL lorsque vous collectez le résultat avec `collect_dtx()`.")
345
+
grade_code("L'espèce la plus présente est *Bombus pascorum*. La mise en place d'un schéma avec {dm} a permit de réaliser une requête sur deux tables et de les combiner facilement. Vous avez ensuite résumé ces observations. Vous avez réalisé tout cela directement dans votre base de données et sans vous préoccuper de l'écriture de la requête. En effet {dbplyr} que vous avez utilisé ici vous permet d'écrire du code Tidyverse classique et il vous le traduit en requête SQL lorsque vous collectez le résultat avec `collect_dtx()`.")
346
346
```
347
347
348
348
## Conclusion
349
349
350
-
Félicitation! Vous avez créé une base de données relationnelle avec DuckDB. Ensuite, vous l'avez retravaillée en deux tables et défini les clés primaires et secondaires pour arriver à une normalisation des données au niveau 3 en limitant la redondance. Vous avez ensuite défini un schéma clair de la base avec le package {dm}. Enfin, vous avez réalisé une requête multitable avec les fonctions du package {dm} et de {dbplyr}.
350
+
Félicitation! Vous avez créé une base de données relationnelle avec DuckDB. Ensuite, vous l'avez retravaillée en deux tables et défini les clés primaires et secondaires pour arriver à une normalisation des données au niveau 3 en limitant la redondance. Vous avez ensuite défini un schéma clair de la base avec le package {dm}. Enfin, vous avez réalisé une requête multitable avec les fonctions du package {dm} et de {dbplyr}.
351
351
352
352
Maintenant que vous avez compris les grands principes des bases de données relationnelles et que vous êtes capable d'écrire le code permettant de réaliser une requête, vous pouvez appliquer cette technique par vous-même.
0 commit comments