## Données, base de données et SGBD

- Modèle conceptuel

- Modèle logique

- Modèle physique

- Importation/exportation de données

- Requêtes

- Logiciel R et bases de données

- Utilisation du package RODBC

<figure><img src="image_1.png" /></figure>

cirad

AGRICULTURAL RESEARCH
FOR DEVELOPMENT

Biomass
Wood
Energy
Bioproducts

AIDA

agap

Sandrine Auzoux, UR AIDA

Sébastien Paradis, UR BIOWOOEB

Lauriane Rouan, UMR AGAP

## Conception de bases de données expérimentales à des fins de modélisation

## Interfaçage avec R

CC BY

<figure><img src="image_2.png" /></figure>
# Modèle hiérarchique des connaissances

**Donnée :**

résultat direct d'une mesure (faits, observations, éléments bruts)
40°C

**Information :**

donnée interprétée (qui, quoi, quand, où)

Température de l'air en degré Celsius à 14h
à Bobo-Dioulasso

**Connaissance :**

information comprise (comment, pourquoi)

Il fait chaud à 14h à Bobo-Dioulasso

<figure><img src="image_3.png" /></figure>

J'allume la climatisation.

<figure><img src="image_4.png" /></figure>

Chaîne linéaire du modèle hiérarchique des connaissances (Françoise Rossion, 2008)
# Les métadonnées

Les métadonnées sont des "données qui décrivent des données".

* Information structurée associée à une donnée (ou un objet, un document...)

* Documentation qui permet à l'utilisateur de comprendre la donnée décrite

Les métadonnées sont un maillon essentiel pour le partage des données et l'interopérabilité des bases de données lorsqu'elles sont structurées dans des dictionnaires de données.

<figure><img src="image_5.png" /><figcaption>Des objets discernés par tous</figcaption></figure>

Un objet sans étiquette n'est connu que de son auteur

<figure><img src="image_6.png" /><figcaption>Métadonnées</figcaption></figure>

<figure><img src="image_7.png" /></figure>

Il est conseillé de produire les métadonnées au moment de la collecte ou de la création des données plutôt qu'à posteriori.
# Base de données relationnelle

<figure><img src="image_8.png" /></figure>

Une base de données est une **ensemble de donnée**, stockées de façon :

* ✓ **Persistante** : de stockage permanent

* ✓ **De redondance minimale** : la même information n'est présente qu'une fois (unicité)

* ✓ **Exhaustive** : la base de données contient toutes les informations requises pour le service attendu

* ✓ **Structuré** : la structure est définie dans un **schéma** (« modèle »)

* ✓ Elle est gérée par un **système de gestion de bases de données**.

Une base de données peut-être stockée de manière :

* ✓ **Locale** → utilisable **par une personne** sur une machine

* ✓ **Distante** → les données sont stockées sur un ou plusieurs serveurs et sont accessibles simultanément **par plusieurs utilisateurs**
# Système de gestion de bases de données

Le Système de Gestion de Bases de Données (SGBD) est un logiciel qui permet de manipuler les informations stockées dans une base de donnée, en jouant le rôle d'interface entre les utilisateurs et la base de données.

Les fonctions principales d'un SGBD :

1. La description de la structure de la base de données

2. La manipulation des données :

* Outils qui permettent de faire communiquer une BD et l'utilisateur

* Opérations de recherche, insertion, modification et suppression

3. Le contrôle des données : intégrité (qualité, cohérence), fiabilité (perte), confidentialité (droits d'accès), partage et sécurité (accès concurrents)
# Quelques SGBD relationnels connus

SGBD propriétaire, client/serveur et multiplateformes :

* Oracle (Oracle Coporation)

* SQL Server (Microsoft)

* Sybase (SAP Company)

* DB2 (IBM)

* HyperFileSQL (PcSoft)

ORACLE®

<figure><img src="image_9.png" /></figure>

Microsoft®
SQL Server®

IBM

DB2

<figure><img src="image_10.png" /></figure>

PostgreSQL

<figure><img src="image_11.png" /></figure>

SYBASE®

SGBD libre et client/serveur :

MySQL (MySQL AB/Oracle) et PostgreSQL (Michael Stonebraker)

SGBD faisant partie d'une suite bureautique:

* Access (Microsoft)

* OOo Base (Fondation Apache)

<figure><img src="image_12.png" /></figure>

Microsoft®
Access

<figure><img src="image_13.png" /></figure>

MySQL®
Pourquoi une base de données ?

<table><thead><tr><th>A</th><th>B</th><th>C</th><th>D</th><th>E</th><th>F</th><th>I</th></tr></thead><tbody><tr><td>CTFT id</td><td>Family</td><td>Species</td><td>Specific gravity</td><td>Country</td><td>Sub-continent</td><td>Collector's name</td></tr><tr><td>1</td><td>LAURACEAE</td><td>Cinnamomum ilicioides A.Chev.</td><td>0.51</td><td>Vietnam</td><td>Asie continentale</td><td>Jard.Col.</td></tr><tr><td>2</td><td>MAGNOLIACEAE</td><td>Magnolia tsiampacca (L.) Figlar & Noot.</td><td>0.6</td><td>Chine</td><td>Asie continentale</td><td>SBC</td></tr><tr><td>3</td><td>MAGNOLIACEAE</td><td>Liriodendron chinense Sargent</td><td></td><td>Amerique Nord</td><td>Amerique du Nord</td><td>SBC</td></tr><tr><td>4</td><td>MAGNOLIACEAE</td><td>Liriodendron tulipifera L.</td><td></td><td>France</td><td>Europe</td><td>SBC</td></tr><tr><td>5</td><td>MAGNOLIACEAE</td><td>Magnolia obovata Thunb.</td><td>0.45</td><td>Japon</td><td>Asie continentale</td><td>SBC</td></tr><tr><td>6</td><td>MAGNOLIACEAE</td><td>Magnolia kobus DC.</td><td></td><td>Japon</td><td>Asie continentale</td><td>SBC</td></tr><tr><td>7</td><td>MAGNOLIACEAE</td><td>Magnolia sp</td><td></td><td>Vietnam</td><td>Asie continentale</td><td>Ag.Indoch.</td></tr><tr><td>8</td><td>MAGNOLIACEAE</td><td>Magnolia fordiana (Oliv.) Hu</td><td>0.45</td><td>Vietnam</td><td>Asie continentale</td><td>Bertin</td></tr><tr><td>9</td><td>MAGNOLIACEAE</td><td>Magnolia sp</td><td></td><td>Etats-Unis n.p.</td><td>Amerique du Nord</td><td>SBC</td></tr><tr><td>10</td><td>MAGNOLIACEAE</td><td>Magnolia blumei Prantl</td><td>0.46</td><td>Vietnam</td><td>Asie continentale</td><td>Bertin</td></tr><tr><td>11</td><td>MAGNOLIACEAE</td><td>Magnolia sp</td><td></td><td>Vietnam</td><td>Asie continentale</td><td>Ag.Indoch.</td></tr><tr><td>12</td><td>MAGNOLIACEAE</td><td>Magnolia champaca (L.) Baill. ex Pierre</td><td></td><td>Reunion</td><td>Ocean Indien</td><td>Ag.Col.</td></tr><tr><td>13</td><td>MAGNOLIACEAE</td><td>Magnolia hypolampra (Dandy) Figlar</td><td>0.59</td><td>Vietnam</td><td>Asie continentale</td><td>Bertin</td></tr><tr><td>14</td><td>MAGNOLIACEAE</td><td>Magnolia hypolampra (Dandy) Figlar</td><td></td><td>Vietnam</td><td>Asie continentale</td><td>SBC</td></tr><tr><td>15</td><td>MAGNOLIACEAE</td><td>Magnolia hypolampra (Dandy) Figlar</td><td></td><td>Vietnam</td><td>Asie continentale</td><td>SBC</td></tr><tr><td>16</td><td>MAGNOLIACEAE</td><td>Magnolia dodecapetala (Lam.) Govaerts</td><td>0.62</td><td>Antilles fransßaises</td><td>Amerique Centrale et Antilles</td><td>SBC</td></tr><tr><td>17</td><td>CANELLACEAE</td><td>Cinnamosma madagascariensis Danguy</td><td>0.99</td><td>Madagascar</td><td>Ocean Indien</td><td>SBC</td></tr><tr><td>18</td><td>CERCIDIPHYLLACEAE</td><td>Cercidiphyllum japonicum Siebold & Zucc.</td><td></td><td>Japon</td><td>Asie continentale</td><td>SBC</td></tr><tr><td>19</td><td>ANNONACEAE</td><td>Guatteria caribaea Urb.</td><td></td><td>Antilles fransßaises</td><td>Amerique Centrale et Antilles</td><td>SBC</td></tr><tr><td>20</td><td>ANNONACEAE</td><td>Annona reticulata L.</td><td>0.52</td><td>Antilles fransßaises</td><td>Amerique Centrale et Antilles</td><td>Ag.Col.</td></tr><tr><td>21</td><td>ANNONACEAE</td><td>Anonidium mannii Engl. & Diels</td><td>0.33</td><td>Cameroun</td><td>Afrique</td><td>Hedin</td></tr><tr><td>22</td><td>ANNONACEAE</td><td>Anonidium mannii Engl. & Diels</td><td>0.37</td><td>Cameroun</td><td>Afrique</td><td>Foury 2</td></tr><tr><td>23</td><td>ANNONACEAE</td><td>Fenerivia oligosperma (Danguy) R.M.K.Saunders</td><td></td><td>Madagascar</td><td>Ocean Indien</td><td>SBC</td></tr><tr><td>24</td><td>ANNONACEAE</td><td>Fenerivia oligosperma (Danguy) R.M.K.Saunders</td><td>0.52</td><td>Madagascar</td><td>Ocean Indien</td><td>Thouvenot</td></tr><tr><td>25</td><td>ANNONACEAE</td><td>Fissistigma latifolium (Dunal) Merr.</td><td>0.33</td><td>Vietnam</td><td>Asie continentale</td><td>SBC</td></tr><tr><td>26</td><td>ANNONACEAE</td><td>Cleistopholis glauca Pierre</td><td>0.42</td><td>Cameroun</td><td>Afrique</td><td>Foury 2</td></tr><tr><td>27</td><td>ANNONACEAE</td><td>Cleistopholis patens (Benth.) Engl. & Diels</td><td>0.3</td><td>Gabon</td><td>Afrique</td><td>Jard.Col.</td></tr><tr><td>28</td><td>ANNONACEAE</td><td>Cleistopholis patens (Benth.) Engl. & Diels</td><td>0.28</td><td>Gabon</td><td>Afrique</td><td>Jard.Col.</td></tr><tr><td>29</td><td>ANNONACEAE</td><td>Cleistopholis patens (Benth.) Engl. & Diels</td><td>0.29</td><td>Congo</td><td>Afrique</td><td>Sargos</td></tr><tr><td>30</td><td>ANNONACEAE</td><td>Cleistopholis staudtii Engl. & Diels</td><td>0.35</td><td>Congo</td><td>Afrique</td><td>Sargos</td></tr><tr><td>31</td><td>ANNONACEAE</td><td>Cleistopholis staudtii Engl. & Diels</td><td>0.31</td><td>Cameroun</td><td>Afrique</td><td>Foury 2</td></tr><tr><td>32</td><td>ANNONACEAE</td><td>Cleistopholis staudtii Engl. & Diels</td><td>0.37</td><td>Gabon</td><td>Afrique</td><td>Rabourdin</td></tr><tr><td>33</td><td>ANNONACEAE</td><td>Annickia chlorantha (Oliv.) Setten & Maas</td><td>0.53</td><td>Gabon</td><td>Afrique</td><td>Rabourdin</td></tr><tr><td>34</td><td>ANNONACEAE</td><td>Annickia chlorantha (Oliv.) Setten & Maas</td><td>0.57</td><td>Cameroun</td><td>Afrique</td><td>Foury 2</td></tr><tr><td>35</td><td>ANNONACEAE</td><td>Annickia chlorantha (Oliv.) Setten & Maas</td><td>0.56</td><td>Cameroun</td><td>Afrique</td><td>Hedin</td></tr><tr><td>36</td><td>ANNONACEAE</td><td>Annickia chlorantha (Oliv.) Setten & Maas</td><td>0.44</td><td>Cameroun</td><td>Afrique</td><td>SBC</td></tr><tr><td>37</td><td>ANNONACEAE</td><td>Guatteria caribaea Urb.</td><td>0.52</td><td>Antilles fransßaises</td><td>Amerique Centrale et Antilles</td><td>Ag.Col.</td></tr></tbody></table>

<figure><img src="image_14.png" /></figure>

<figure><img src="image_15.png" /></figure>
Pourquoi une base de données ?

<table><thead><tr><th>A</th><th>B</th><th>C</th><th>D</th><th>E</th><th>F</th><th>I</th></tr><tr><th>CTFT id</th><th>Family</th><th>Species</th><th>Specific gravity</th><th>Country</th><th>Sub-continent</th><th>Collector's name</th></tr></thead><tbody><tr><td>1</td><td>LAURACEAE</td><td>Cinnamomum ilicioides A.Chev.</td><td>0.51</td><td>Vietnam</td><td>Asie continentale</td><td>Jard.Col.</td></tr><tr><td>2</td><td>MAGNOLIACEAE</td><td>Magnolia tsiampacca (L.) Figlar & Noot.</td><td>0.6</td><td>Chine</td><td>Asie continentale</td><td>SBC</td></tr><tr><td>3</td><td>MAGNOLIACEAE</td><td>Liriodendron chinense Sargent</td><td></td><td>Amerique Nord</td><td>Amerique du Nord</td><td>SBC</td></tr><tr><td>4</td><td>MAGNOLIACEAE</td><td>Liriodendron tulipifera L.</td><td></td><td>France</td><td>Europe</td><td>SBC</td></tr><tr><td>5</td><td>MAGNOLIACEAE</td><td>Magnolia obovata Thunb.</td><td>0.45</td><td>Japon</td><td>Asie continentale</td><td>SBC</td></tr><tr><td>6</td><td>MAGNOLIACEAE</td><td>Magnolia kobus DC.</td><td></td><td>Japon</td><td>Asie continentale</td><td>SBC</td></tr><tr><td>7</td><td>MAGNOLIACEAE</td><td>Magnolia sp</td><td></td><td>Vietnam</td><td>Asie continentale</td><td>Ag.Indoch.</td></tr><tr><td>8</td><td>MAGNOLIACEAE</td><td>Magnolia fordiana (Oliv.) Hu</td><td>0.45</td><td>Vietnam</td><td>Asie continentale</td><td>Bertin</td></tr><tr><td>9</td><td>MAGNOLIACEAE</td><td>Magnolia sp</td><td></td><td>Etats-Unis n.p.</td><td>Amerique du Nord</td><td>SBC</td></tr><tr><td>10</td><td>MAGNOLIACEAE</td><td>Magnolia blumei Prantl</td><td>0.46</td><td>Vietnam</td><td>Asie continentale</td><td>Bertin</td></tr><tr><td>11</td><td>MAGNOLIACEAE</td><td>Magnolia sp</td><td></td><td>Vietnam</td><td>Asie continentale</td><td>Ag.Indoch.</td></tr><tr><td>12</td><td>MAGNOLIACEAE</td><td>Magnolia champaca (L.) Baill. ex Pierre</td><td></td><td>Reunion</td><td>Ocean Indien</td><td>Ag.Col.</td></tr><tr><td>13</td><td>MAGNOLIACEAE</td><td>Magnolia hypolampra (Dandy) Figlar</td><td>0.59</td><td>Vietnam</td><td>Asie continentale</td><td>Bertin</td></tr><tr><td>14</td><td>MAGNOLIACEAE</td><td>Magnolia hypolampra (Dandy) Figlar</td><td></td><td>Vietnam</td><td>Asie continentale</td><td>SBC</td></tr><tr><td>15</td><td>MAGNOLIACEAE</td><td>Magnolia hypolampra (Dandy) Figlar</td><td></td><td>Vietnam</td><td>Asie continentale</td><td>SBC</td></tr><tr><td>16</td><td>MAGNOLIACEAE</td><td>Magnolia dodecapetala (Lam.) Govaerts</td><td>0.62</td><td>Antilles fransßaises</td><td>Amerique Centrale et Antilles</td><td>SBC</td></tr><tr><td>17</td><td>CANELLACEAE</td><td>Cinnamosma madagascariensis Danguy</td><td>0.99</td><td>Madagascar</td><td>Ocean Indien</td><td>SBC</td></tr><tr><td>18</td><td>CERCIDIPHYLLACEAE</td><td>Cercidiphyllum japonicum Siebold & Zucc.</td><td></td><td>Japon</td><td>Asie continentale</td><td>SBC</td></tr><tr><td>19</td><td>ANNONACEAE</td><td>Guatteria caribaea Urb.</td><td></td><td>Antilles fransßaises</td><td>Amerique Centrale et Antilles</td><td>SBC</td></tr><tr><td>20</td><td>ANNONACEAE</td><td>Annona reticulata L.</td><td>0.52</td><td>Antilles fransßaises</td><td>Amerique Centrale et Antilles</td><td>Ag.Col.</td></tr><tr><td>21</td><td>ANNONACEAE</td><td>Anonidium mannii Engl. & Diels</td><td>0.33</td><td>Cameroun</td><td>Afrique</td><td>Hedin</td></tr><tr><td>22</td><td>ANNONACEAE</td><td>Anonidium mannii Engl. & Diels</td><td>0.37</td><td>Cameroun</td><td>Afrique</td><td>Foury 2</td></tr><tr><td>23</td><td>ANNONACEAE</td><td>Fenerivia oligosperma (Danguy) R.M.K.Saunders</td><td></td><td>Madagascar</td><td>Ocean Indien</td><td>SBC</td></tr><tr><td>24</td><td>ANNONACEAE</td><td>Fenerivia oligosperma (Danguy) R.M.K.Saunders</td><td>0.52</td><td>Madagascar</td><td>Ocean Indien</td><td>Thouvenot</td></tr><tr><td>25</td><td>ANNONACEAE</td><td>Fissistigma latifolium (Dunal) Merr.</td><td>0.33</td><td>Vietnam</td><td>Asie continentale</td><td>SBC</td></tr><tr><td>26</td><td>ANNONACEAE</td><td>Cleistopholis glauca Pierre</td><td>0.42</td><td>Cameroun</td><td>Afrique</td><td>Foury 2</td></tr><tr><td>27</td><td>ANNONACEAE</td><td>Cleistopholis patens (Benth.) Engl. & Diels</td><td>0.3</td><td>Gabon</td><td>Afrique</td><td>Jard.Col.</td></tr><tr><td>28</td><td>ANNONACEAE</td><td>Cleistopholis patens (Benth.) Engl. & Diels</td><td>0.28</td><td>Gabon</td><td>Afrique</td><td>Jard.Col.</td></tr><tr><td>29</td><td>ANNONACEAE</td><td>Cleistopholis patens (Benth.) Engl. & Diels</td><td>0.29</td><td>Congo</td><td>Afrique</td><td>Sargos</td></tr><tr><td>30</td><td>ANNONACEAE</td><td>Cleistopholis staudtii Engl. & Diels</td><td>0.35</td><td>Congo</td><td>Afrique</td><td>Sargos</td></tr><tr><td>31</td><td>ANNONACEAE</td><td>Cleistopholis staudtii Engl. & Diels</td><td>0.31</td><td>Cameroun</td><td>Afrique</td><td>Foury 2</td></tr><tr><td>32</td><td>ANNONACEAE</td><td>Cleistopholis staudtii Engl. & Diels</td><td>0.37</td><td>Gabon</td><td>Afrique</td><td>Rabourdin</td></tr><tr><td>33</td><td>ANNONACEAE</td><td>Annickia chlorantha (Oliv.) Setten & Maas</td><td>0.53</td><td>Gabon</td><td>Afrique</td><td>Rabourdin</td></tr><tr><td>34</td><td>ANNONACEAE</td><td>Annickia chlorantha (Oliv.) Setten & Maas</td><td>0.57</td><td>Cameroun</td><td>Afrique</td><td>Foury 2</td></tr><tr><td>35</td><td>ANNONACEAE</td><td>Annickia chlorantha (Oliv.) Setten & Maas</td><td>0.56</td><td>Cameroun</td><td>Afrique</td><td>Hedin</td></tr><tr><td>36</td><td>ANNONACEAE</td><td>Annickia chlorantha (Oliv.) Setten & Maas</td><td>0.44</td><td>Cameroun</td><td>Afrique</td><td>SBC</td></tr><tr><td>37</td><td>ANNONACEAE</td><td>Guatteria caribaea Urb.</td><td>0.52</td><td>Antilles fransßaises</td><td>Amerique Centrale et Antilles</td><td>Ag.Col.</td></tr></tbody></table>
# Tableur Vs SGBD ? 1/2

> "Je gère ma base de données sur Excel..." : non-sens

Le tableur est un logiciel qui permet de traiter efficacement des données numériques et de présenter les résultats sous forme de graphiques.

## Avantages du tableur :

* ✓ Facilité et rapidité d'utilisation

* ✓ Exploitation et mise en forme rapide des résultats

* ✓ Fichiers autonomes et portables

## Problèmes de l'approche fichiers :

* ✓ Pas de sémantique et vision limitée des données

* ✓ Redondance et risque d'incohérence des données

* ✓ Pas d'indépendance entre les données et les traitements (moyennes, graphiques...)

* ✓ Pas d'accès multi utilisateurs

**Remarque :** Tout ensemble de données ne justifie pas forcément d'une base de données.
# Tableur Vs SGBD ? 2/2

## Intérêts d'une base de données :

* ✓ Manipule facilement de gros volumes de données

* ✓ Stockage persistant et interoperabilité entre les bases de données

* ✓ Unicité de l'information

* ✓ Langage normalisé de requêtes et de programmation

* ✓ Contexte multi-utilisateurs

## Inconvénients :

* ✓ Nécessite de bien définir les besoins et d'être méticuleux lors de la réalisation de la base de données

* ✓ Nécessite un réel apprentissage
# Les bases de données à travers le temps

<figure><img src="image_16.png" /></figure>

Ancêtre de la BD

<figure><img src="image_17.png" /></figure>

Modèle BD sous MySQL

<figure><img src="image_18.png" /></figure>
Données, base de données et SGBD

## Modèle conceptuel

- Modèle logique

- Modèle physique

- Importation/exportation de données

- Requêtes

- Logiciel R et bases de données

- Utilisation du package RODBC

<figure><img src="image_19.png" /></figure>

cirad

AGRICULTURAL RESEARCH FOR DEVELOPMENT

Biomass
Wood
Energy
Bioproducts

AIDA

agap

Sandrine Auzoux, UR AIDA

Sébastien Paradis, UR BIOWOOEB

Lauriane Rouan, UMR AGAP

## Conception de bases de données expérimentales à des fins de modélisation

## Interfaçage avec R
# Etapes de conception d'une base de données

1. Analyse de l'existant et des besoins : spécifications générales

2. Création d'un modèle conceptuel (MCD) qui permet de représenter tous les aspects importants du problème posé → schéma conceptuel

3. Traduction du modèle conceptuel en modèle logique (MLD)

4. Implémentation du modèle physique (MPD) de la base de données dans un SGBD, à partir du modèle logique

<figure><img src="image_20.png" /></figure>
# Analyse de l'existant et des besoins

## Phase essentielle et complexe

1. Ecrire les **objectifs de la base de données** : 1 phrase + mots clés qui répondent aux questions Qui ? Où ? Quand ? Quoi ? Pourquoi ? Comment ? Combien ?

2. Rassembler tous les documents que vous avez en votre possession (formulaires papier, fichiers Excel, Word et PowerPoint, photos, vidéo, croquis...)

3. Collecter et organiser toutes les informations que vous souhaitez stocker dans la base de données

4. Description en langage naturel des données et des traitements à effectuer sur ces données ⇔ spécifications générales

<figure><img src="image_21.png" /></figure>

<figure><img src="image_22.png" /></figure>

La conception réussie d'une base de données repose sur la précision et l'exhaustivité avec lesquelles les besoins des utilisateurs ont été exprimés.
# Formalismes de modélisation et méthodes

2 formalismes très utilisés dans le domaine des bases de données :

m
merise

Méthode d'Etudes et de Réalisation Informatique pour les Systèmes d'Entreprise (1978), basée sur le schéma Entités-Associations (E.F. Codd 1969)

<figure><img src="image_23.png" /></figure>

Unified Modeling Language (Booch, Rumbaugh, Jacobson, 1996). C'est la référence en terme de modélisation objet, qui consiste à créer une représentation informatique des éléments du monde réel auxquels on s'intéresse, sans se préoccuper de l'implémentation.
# La méthode MERISE et le modèle E-A

## 1. Définition des spécifications ➡ Dictionnaire de données

## 2. Modèle conceptuel de données (MCD)
modélisation formelle et standardisée de la
structure d'une base de données sans
Faire référence à une solution technique

Modèle entité-association
(modèle conceptuel des données)

<figure><img src="image_24.png" /></figure>

Schéma conceptuel

<figure><img src="image_25.png" /></figure>

## 3. Modèle logique de données (MLD)
modélisation de la structure suivant laquelle les
données seront stockées dans la future
base de données (Merise)

Modèle logique des données

<figure><img src="image_26.png" /></figure>

Schéma logique

<figure><img src="image_27.png" /></figure>

Modèle physique des données

<figure><img src="image_28.png" /></figure>

## 4. Modèle physique de données (MPD)
représentation exacte de la BD en fonction du SGBD

Schéma physique
# Le dictionnaire des données

Le dictionnaire des données est un document qui regroupe toutes les données à conserver dans la base (MCD)

<table><thead><tr><td>Code mnémonique</td><td>Désignation</td><td>Type</td><td>Taille</td><td>Remarque</td></tr></thead><tbody><tr><td>Nom_agriculteur</td><td>Nom de l'agriculteur</td><td>A</td><td>30</td><td></td></tr><tr><td>ID_placette</td><td>Identifiant de la placette</td><td>AN</td><td></td><td>Code de la placette où se situe la modalité</td></tr><tr><td>Surface</td><td>Surface de la parcelle</td><td>N</td><td></td><td></td></tr><tr><td>Date_plantation</td><td>Date de plantation</td><td>date</td><td></td><td>Au format jj/mm/aaaa</td></tr><tr><td>Recolte</td><td>Récolté ou pas?</td><td>booléen</td><td></td><td></td></tr></tbody></table>

## Inventaire épuré : données élémentaires

* ✓ Pas de données calculées

* ✓ Pas de données composées

* ✓ Pas de synonymes (même propriété avec plusieurs noms)

* ✓ Pas de polysèmes (plusieurs propriétés de même nom)

* ✓ Pas de redondances (répétitions des mêmes propriétés)
# Modèle conceptuel de données (MCD)

* Représentation formelle et standardisée de l'ensemble des données que l'on doit traiter pour répondre au problème posé

* Avantage : être à la portée des utilisateurs. Ceux-ci expriment en langage naturel leur connaissance des données et participent activement à l'élaboration du schéma conceptuel.

* Indépendant de toute technique informatique (physique et logique)

* Basé sur le modèle Entité-Relation ou Entité-Association (EA) choisi comme Standard en 1988.

* concepts de base du modèle : propriété, entité, relation

* règles de construction pour aboutir à une représentation graphique standard qui élimine les redondances et les ambiguïtés.

<figure><img src="image_29.png" /></figure>

Ne pas négliger l'importance de la phase de modélisation conceptuelle
# Définitions MCD – Entité (1/5)

Une **entité** est un ensemble d'éléments homogènes

Ex : exploitant, parcelle

Une entité possède un ensemble de **propriétés**

Ex : NoExploitant, nomExploitant, prenomExploitant

Une **occurrence** est une valeur prise par la propriété

Ex : Daniel

Un **identifiant** correspond à une/plusieurs propriétés d'une entité qui ont une valeur unique pour chaque occurrence

Ex : NoExploitant

Libellé entité

Liste des
propriétés

.

.

.
# Définitions MCD – Association (2/5)

Une **association** (relation) est un lien sémantique entre plusieurs entités.

<figure><img src="image_30.png" /></figure>
# Définitions MCD – Cardinalité (3/5)

Les cardinalités représentent le nombre d'occurrences minimum et maximum d'une association par rapport à une entité.

<figure><img src="image_31.png" /></figure>
# Définitions MCD – Dimension (4/5)

La **dimension** d'une association est le nombre d'entités concernées par celle-ci (nombre de pattes de l'association). Elle peut être binaire, ternaire ou n-aire.

<figure><img src="image_32.png" /></figure>
# Définitions MCD – Réflexivité (5/5)

L'**association** réflexive est une association dont plusieurs « pattes » lient la même entité. Dans ce cas, plusieurs occurrences de la même entité seront associées.

<figure><img src="image_33.png" /></figure>
# MCD – Valeurs des cardinalités

<figure><img src="image_34.png" /></figure>

<figure><img src="image_35.png" /></figure>

<figure><img src="image_36.png" /></figure>

Au moins 1

<figure><img src="image_37.png" /></figure>

Au plus 1

<figure><img src="image_38.png" /></figure>

De 1 à 64
# Construction d'un MCD

## Solution 1: modélisation directe

Identification des entités et des associations à partir des noms et des verbes

Exemple, un agriculteur possède un champ : 2 entités *agriculteur* et *champ*, et 1 association *possède*

<figure><img src="image_39.png" /></figure>

## Solution 2 : modélisation par analyse des dépendances fonctionnelles

1) Construction et épuration du *dictionnaire de données*

2) Création et simplification de la *matrice des dépendances fonctionnelles simples*

3) Recherche des *dépendances fonctionnelles composées*

4) Élaboration du modèle conceptuel de données
Création du MCD

1. Création du dictionnaire de données

2. Construction de la matrice des dépendances fonctionnelles (tableau reprenant la liste des identifiants et des propriétés)

3. Réalisation de la matrice des dépendances fonctionnelles composées (même tableau que précédemment avec les propriétés non définies)

4. Ecriture des dépendances fonctionnelles

5. Modèle conceptuel de données
Inventaire exhaustif

<table><thead><tr><td>Propriétés</td><td>Provenance</td><td>Remarque</td></tr></thead><tbody><tr><td>Code Client</td><td>Liste clients</td><td>Constitué des 3 lettres nom + 3 lettres prénom + département + Ordre A, B,....</td></tr><tr><td>Civilité</td><td>Liste clients</td><td></td></tr><tr><td>Prenom</td><td>Liste clients</td><td></td></tr><tr><td>Nom</td><td>Liste clients</td><td></td></tr><tr><td>Adresse</td><td>Liste clients</td><td></td></tr><tr><td>Code Postal</td><td>Liste clients</td><td></td></tr><tr><td>Ville</td><td>Liste clients</td><td></td></tr><tr><td>Code</td><td>Communes + code post</td><td></td></tr><tr><td>Code Postal</td><td>Communes + code post</td><td></td></tr><tr><td>Ville</td><td>Communes + code post</td><td></td></tr><tr><td>Code</td><td>Liste des agences</td><td></td></tr><tr><td>Nom</td><td>Liste des agences</td><td></td></tr><tr><td>Référence</td><td>Catalogue</td><td></td></tr><tr><td>Désignation</td><td>Catalogue</td><td></td></tr><tr><td>Tarif / Semaine</td><td>Catalogue</td><td></td></tr><tr><td>Caution</td><td>Catalogue</td><td></td></tr><tr><td>Code article</td><td>Stocks</td><td></td></tr><tr><td>Nom</td><td>Stocks</td><td></td></tr><tr><td>Quantité dispo / agence</td><td>Stocks</td><td></td></tr><tr><td>Date</td><td>Contrat</td><td></td></tr><tr><td>Nom de l'Agence</td><td>Contrat</td><td></td></tr><tr><td>Numero contrat</td><td>Contrat</td><td></td></tr><tr><td>Civilité</td><td>Contrat</td><td></td></tr><tr><td>Prenom</td><td>Contrat</td><td></td></tr><tr><td>Nom</td><td>Contrat</td><td></td></tr><tr><td>Adresse</td><td>Contrat</td><td></td></tr><tr><td>Code postal</td><td>Contrat</td><td></td></tr><tr><td>Ville</td><td>Contrat</td><td></td></tr><tr><td>Durée</td><td>Contrat</td><td></td></tr><tr><td>Reference</td><td>Contrat</td><td></td></tr><tr><td>Materiel</td><td>Contrat</td><td></td></tr><tr><td>Montant Unitaire</td><td>Contrat</td><td></td></tr><tr><td>Quantité</td><td>Contrat</td><td></td></tr><tr><td>Montant total (ligne)</td><td>Contrat</td><td></td></tr><tr><td>Total facture</td><td>Contrat</td><td></td></tr><tr><td>Caution</td><td>Contrat</td><td></td></tr></tbody></table>
# Détection des synonymes, des calculs, des polysèmes

1. Renommer les propriétés

2. Supprimer les propriétés calculées

<table><thead><tr><th>Propriétés</th><th>Synoymes, calculs, polysèmes</th></tr></thead><tbody><tr><td>Code Client</td><td>Code Client</td></tr><tr><td>Civilité</td><td>Civilité</td></tr><tr><td>Prenom</td><td>Prenom Client</td></tr><tr><td>Nom</td><td>Nom Client</td></tr><tr><td>Adresse</td><td>Adresse Client</td></tr><tr><td>Code Postal</td><td>Code Postal</td></tr><tr><td>Ville</td><td>Ville</td></tr><tr><td>Code</td><td>Code CP</td></tr><tr><td>Code Postal</td><td>Code Postal</td></tr><tr><td>Ville</td><td>Ville</td></tr><tr><td>Code</td><td>Code Agence</td></tr><tr><td>Nom</td><td>Nom Agence</td></tr><tr><td>Référence</td><td>Référence Materiel</td></tr><tr><td>Désignation</td><td>Désignation</td></tr><tr><td>Tarif / Semaine</td><td>Tarif / semaine</td></tr><tr><td>Caution</td><td>Caution</td></tr><tr><td>Code article</td><td>Référence Materiel</td></tr><tr><td>Nom</td><td>Désignation</td></tr><tr><td>Quantité dispo / agence</td><td>Quantité dispo / agence</td></tr><tr><td>Date</td><td>Date Commande</td></tr><tr><td>Nom de l'Agence</td><td>Nom Agence</td></tr><tr><td>Numero contrat</td><td>Numero Contrat</td></tr><tr><td>Civilité</td><td>Civilité</td></tr><tr><td>Prenom</td><td>Prenom Client</td></tr><tr><td>Nom</td><td>Nom Client</td></tr><tr><td>Adresse</td><td>Adresse Client</td></tr><tr><td>Code postal</td><td>Code Postal</td></tr><tr><td>Ville</td><td>Ville</td></tr><tr><td>Durée</td><td>Durée</td></tr><tr><td>Reference</td><td>Référence Materiel</td></tr><tr><td>Materiel</td><td>Désignation</td></tr><tr><td>Montant Unitaire</td><td>Tarif / semaine</td></tr><tr><td>Quantité</td><td>Quantité Louée</td></tr><tr><td>Montant total (ligne)</td><td>Calculé</td></tr><tr><td>Total facture</td><td>Calculé</td></tr><tr><td>Caution</td><td>Calculé</td></tr></tbody></table>
# Détection des redondances

## 3. Supprimer les propriétés en double

<table><thead><tr><th>Propriétés</th><th>Inventaire épuré</th></tr></thead><tbody><tr><td>Code Client</td><td>Code Client</td></tr><tr><td>Civilité</td><td>Civilité</td></tr><tr><td>Prenom Client</td><td>Prenom Client</td></tr><tr><td>Nom Client</td><td>Nom Client</td></tr><tr><td>Adresse Client</td><td>Adresse Client</td></tr><tr><td>Code Postal</td><td>Code Postal</td></tr><tr><td>Ville</td><td>Ville</td></tr><tr><td>Code CP</td><td>Code CP</td></tr><tr><td>Code Postal</td><td></td></tr><tr><td>Ville</td><td></td></tr><tr><td>Code Agence</td><td>Code Agence</td></tr><tr><td>Nom Agence</td><td>Nom Agence</td></tr><tr><td>Référence Materiel</td><td>Référence Materiel</td></tr><tr><td>Désignation</td><td>Désignation</td></tr><tr><td>Tarif / semaine</td><td>Tarif / semaine</td></tr><tr><td>Caution</td><td>Caution</td></tr><tr><td>Référence Materiel</td><td></td></tr><tr><td>Désignation</td><td></td></tr><tr><td>Quantité dispo / agence</td><td>Quantité dispo / agence</td></tr><tr><td>Date Commande</td><td>Date Commande</td></tr><tr><td>Nom Agence</td><td></td></tr><tr><td>Numero Contrat</td><td>Numero Contrat</td></tr><tr><td>Civilité</td><td></td></tr><tr><td>Prenom Client</td><td></td></tr><tr><td>Nom Client</td><td></td></tr><tr><td>Adresse Client</td><td></td></tr><tr><td>Code Postal</td><td></td></tr><tr><td>Ville</td><td></td></tr><tr><td>Durée</td><td>Durée</td></tr><tr><td>Référence Materiel</td><td></td></tr><tr><td>Désignation</td><td></td></tr><tr><td>Tarif / semaine</td><td></td></tr><tr><td>Quantité Louée</td><td>Quantité Louée</td></tr><tr><td>Calculé</td><td></td></tr><tr><td>Calculé</td><td></td></tr><tr><td>Calculé</td><td></td></tr></tbody></table>
# La matrice des dépendances fonctionnelles

La MDF permet de mettre en évidence les liens sémantiques et logiques entre les données.

Il s'agit d'un tableau à 2 entrées : en lignes et en colonnes, on inscrit les données issues du dictionnaire de données.

Pour remplir ce tableau, on pose une question pour chaque colonne :
Pour une valeur de cette donnée, existe-t-il une seule valeur de la donnée située en ligne ?

Dans l'affirmative, on inscrit le chiffre 1 à l'intersection

<table><thead><tr><td>Source</td><td>ID_Placette</td><td>ID_agriculteur</td></tr></thead><tbody><tr><td>Cible</td><td></td><td></td></tr><tr><td>ID_placette</td><td>*</td><td></td></tr><tr><td>Surface</td><td>1</td><td></td></tr><tr><td>ID_agriculteur</td><td></td><td>*</td></tr><tr><td>Nom_agriculteur</td><td></td><td>1</td></tr></tbody></table>
# Matrice des dépendances fonctionnelles simples

<table><thead><tr><th>Propriétés</th><th>Code client</th><th>Civilité</th><th>Prenom Client</th><th>Nom Client</th><th>Adresse Client</th><th>Code Postal</th><th>Ville</th><th>Code CP</th><th>Code Agence</th><th>Nom Agence</th><th>Reference Materiel</th><th>Designation</th><th>Tarif / semaine</th><th>Caution</th><th>Quantité dispo / agence</th><th>Date commande</th><th>Numero Contrat</th><th>Duree</th><th>Quantité louée</th></tr></thead><tbody><tr><td>Code client</td><td>*</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr><tr><td>Civilite</td><td>1 *</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr><tr><td>Prenom Client</td><td>1 *</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr><tr><td>Nom Client</td><td>1 *</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr><tr><td>Adresse Client</td><td>1 *</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr><tr><td>Code Postal</td><td>1 *</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td>1</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr><tr><td>Ville</td><td>1 *</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td>1</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr><tr><td>Code CP</td><td>1 *</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr><tr><td>Code Agence</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr><tr><td>Nom Agence</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td>1 *</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr><tr><td>Reference Materiel</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr><tr><td>Designation</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr><tr><td>Tarif / semaine</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr><tr><td>Caution</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr><tr><td>Quantité dispo/agence</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr><tr><td>Date commande</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr><tr><td>Numero Contrat</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr><tr><td>Duree</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr><tr><td>Quantité louée</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr></tbody></table>

Pour une valeur de chaque colonne, existe-t-il une seule valeur de la donnée située en ligne ?
# Simplification de la MDF

<table><thead><tr><th>Propriétés</th><th>Code client</th><th>Civilité</th><th>Prenom Client</th><th>Nom Client</th><th>Adresse Client</th><th>Code Postal</th><th>Ville</th><th>Code CP</th><th>Code Agence</th><th>Nom Agence</th><th>Reference Materiel</th><th>Designation</th><th>Tarif / semaine</th><th>Caution</th><th>Quantite dispo / agence</th><th>Date commande</th><th>Numero Contrat</th><th>Duree</th><th>Quantite louee</th></tr></thead><tbody><tr><td>Code client</td><td>*</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr><tr><td>Civilite</td><td></td><td>1 *</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td>1</td><td></td></tr><tr><td>Prenom Client</td><td>1</td><td></td><td>*</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td>1</td><td></td></tr><tr><td>Nom Client</td><td>1</td><td></td><td></td><td>*</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td>1</td><td></td></tr><tr><td>Adresse Client</td><td>1</td><td></td><td></td><td></td><td>*</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td>1</td><td></td></tr><tr><td>Code Postal</td><td>1</td><td></td><td></td><td></td><td></td><td>*</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td>1</td><td></td></tr><tr><td>Ville</td><td>1</td><td></td><td></td><td></td><td></td><td></td><td>*</td><td></td><td>1</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td>1</td><td></td></tr><tr><td>Code CP</td><td>1</td><td></td><td></td><td></td><td></td><td></td><td></td><td>*</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr><tr><td>Code Agence</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td>*</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr><tr><td>Nom Agence</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td>1 *</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td>1</td><td></td></tr><tr><td>Reference Materiel</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td>*</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr><tr><td>Designation</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td>1 *</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr><tr><td>Tarif / semaine</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td>1</td><td>*</td><td></td><td></td><td></td><td></td><td></td><td></td></tr><tr><td>Caution</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td>1</td><td>*</td><td></td><td></td><td></td><td></td><td></td><td></td></tr><tr><td>Quantite dispo / agence</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td>*</td><td></td><td></td><td></td><td></td></tr><tr><td>Date commande</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td>*</td><td></td><td>1</td><td></td></tr><tr><td>Numero Contrat</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td>*</td><td></td><td></td></tr><tr><td>Duree</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td>1 *</td><td></td></tr><tr><td>Quantite louee</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td>*</td></tr></tbody></table>

Pour une valeur de chaque colonne, existe-t-il une seule valeur de la donnée située en ligne ?
# Résultat de la simplification

<table><thead><tr><td>Propriétés</td><td>Code client</td><td>Code CP</td><td>Code Agence</td><td>Reference materiel</td><td>Numero contrat</td></tr></thead><tbody><tr><td>Civilite</td><td>1</td><td></td><td></td><td></td><td>1</td></tr><tr><td>Prenom client</td><td>1</td><td></td><td></td><td></td><td>1</td></tr><tr><td>Nom client</td><td>1</td><td></td><td></td><td></td><td>1</td></tr><tr><td>Adresse client</td><td>1</td><td></td><td></td><td></td><td>1</td></tr><tr><td>Code postal</td><td>1</td><td>1</td><td></td><td></td><td>1</td></tr><tr><td>Ville</td><td>1</td><td>1</td><td></td><td></td><td>1</td></tr><tr><td>Nom agence</td><td></td><td></td><td>1</td><td></td><td>1</td></tr><tr><td>Designation</td><td></td><td></td><td></td><td>1</td><td></td></tr><tr><td>Tarif/semaine</td><td></td><td></td><td></td><td>1</td><td></td></tr><tr><td>Caution</td><td></td><td></td><td></td><td>1</td><td></td></tr><tr><td>Quantite dispo/agence</td><td></td><td></td><td></td><td></td><td></td></tr><tr><td>Date commande</td><td></td><td></td><td></td><td></td><td>1</td></tr><tr><td>Duree</td><td></td><td></td><td></td><td></td><td>1</td></tr><tr><td>Quantite louee</td><td></td><td></td><td></td><td></td><td></td></tr></tbody></table>

Pour une valeur de chaque colonne, existe-t-il une seule valeur de la donnée située en ligne ?
Elimination des dépendances transitives

<table><thead><tr><td>Propriétés</td><td>Code client</td><td>Code CP</td><td>Code Agence</td><td>Reference materiel</td><td>Numero contrat</td></tr></thead><tbody><tr><td>Civilite</td><td>1</td><td></td><td></td><td></td><td>1</td></tr><tr><td>Prenom client</td><td>1</td><td></td><td></td><td></td><td>1</td></tr><tr><td>Nom client</td><td>1</td><td></td><td></td><td></td><td>1</td></tr><tr><td>Adresse client</td><td>1</td><td></td><td></td><td></td><td>1</td></tr><tr><td>Code postal</td><td>1</td><td>1</td><td></td><td></td><td>1</td></tr><tr><td>Ville</td><td>1</td><td>1</td><td></td><td></td><td>1</td></tr><tr><td>Nom agence</td><td></td><td></td><td>1</td><td></td><td>1</td></tr><tr><td>Designation</td><td></td><td></td><td></td><td>1</td><td></td></tr><tr><td>Tarif/semaine</td><td></td><td></td><td></td><td>1</td><td></td></tr><tr><td>Caution</td><td></td><td></td><td></td><td>1</td><td></td></tr><tr><td>Quantite dispo/agence</td><td></td><td></td><td></td><td></td><td></td></tr><tr><td>Date commande</td><td></td><td></td><td></td><td></td><td>1</td></tr><tr><td>Duree</td><td></td><td></td><td></td><td></td><td>1</td></tr><tr><td>Quantite louee</td><td></td><td></td><td></td><td></td><td></td></tr></tbody></table>

Plusieurs 1 sur la ligne = transitivité, choisir 1 et 1 seul identifiant par colonne
# Mise en évidence et labellisation des entités

- La matrice des dépendances fonctionnelles simple met en évidence les entités.

<table><thead><tr><th>Propriétés</th><th>Client</th><th>Code Postal</th><th>Agence</th><th>Materiel</th><th>Contrat</th></tr><tr><th></th><th>Code client</th><th>Code CP</th><th>Code Agence</th><th>Reference materiel</th><th>Numero contrat</th></tr></thead><tbody><tr><td>Civilite</td><td>1</td><td></td><td></td><td></td><td></td></tr><tr><td>Prenom client</td><td>1</td><td></td><td></td><td></td><td></td></tr><tr><td>Nom client</td><td>1</td><td></td><td></td><td></td><td></td></tr><tr><td>Adresse client</td><td>1</td><td></td><td></td><td></td><td></td></tr><tr><td>Code postal</td><td></td><td>1</td><td></td><td></td><td></td></tr><tr><td>Ville</td><td></td><td>1</td><td></td><td></td><td></td></tr><tr><td>Nom agence</td><td></td><td></td><td>1</td><td></td><td></td></tr><tr><td>Designation</td><td></td><td></td><td></td><td>1</td><td></td></tr><tr><td>Tarif/semaine</td><td></td><td></td><td></td><td>1</td><td></td></tr><tr><td>Caution</td><td></td><td></td><td></td><td>1</td><td></td></tr><tr><td>Date commande</td><td></td><td></td><td></td><td></td><td>1</td></tr><tr><td>Duree</td><td></td><td></td><td></td><td></td><td>1</td></tr></tbody></table>
# Matrice des dépendances fonctionnelles composées

## Certaines données ne contiennent pas de 1 ni dans la ligne, ni dans la colonne

<table><thead><tr><th>Propriétés</th><th>Code client</th><th>Civilité</th><th>Prenom Client</th><th>Nom Client</th><th>Adresse Client</th><th>Code Postal</th><th>Ville</th><th>Code CP</th><th>Code Agence</th><th>Nom Agence</th><th>Reference Materiel</th><th>Designation</th><th>Tarif / semaine</th><th>Caution</th><th>Quantite dispo / agence</th><th>Date commande</th><th>Numero Contrat</th><th>Duree</th><th>Quantite louee</th></tr></thead><tbody><tr><td>Code client</td><td>*</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr><tr><td>Civilite</td><td>1 *</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td>1</td><td></td></tr><tr><td>Prenom Client</td><td>1</td><td>*</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td>1</td><td></td></tr><tr><td>Nom Client</td><td>1</td><td></td><td>*</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td>1</td><td></td></tr><tr><td>Adresse Client</td><td>1</td><td></td><td></td><td>*</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td>1</td><td></td></tr><tr><td>Code Postal</td><td>1</td><td></td><td></td><td></td><td>*</td><td></td><td></td><td></td><td>1</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td>1</td><td></td></tr><tr><td>Ville</td><td>1</td><td></td><td></td><td></td><td></td><td></td><td>*</td><td></td><td>1</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td>1</td><td></td></tr><tr><td>Code CP</td><td>1</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr><tr><td>Code Agence</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr><tr><td>Nom Agence</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td>1 *</td><td></td><td></td><td></td><td></td><td></td><td></td><td>1</td><td></td></tr><tr><td>Reference Materiel</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td>*</td><td></td><td></td><td></td><td></td><td></td><td></td></tr><tr><td>Designation</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr><tr><td>Tarif / semaine</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr><tr><td>Caution</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td>*</td><td></td><td></td><td></td><td></td></tr><tr><td>Quantite dispo/agence</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td>*</td><td></td><td></td><td></td></tr><tr><td>Date commande</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td>*</td><td>1</td><td></td></tr><tr><td>Numero Contrat</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr><tr><td>Duree</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td>1 *</td><td></td></tr><tr><td>Quantite louee</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td>*</td></tr></tbody></table>

Il s'agit donc de dépendances fonctionnelles composées: ces données dépendent de 2 ou de plusieurs colonnes.
# Matrice des dépendances fonctionnelles composées

* La matrice des dépendances **fonctionnelles composées** met en évidence les **associations porteuses de propriétés** dans le MCD.

<table><thead><tr><td>Propriétés</td><td>Code client</td><td>Code CP</td><td>Code Agence</td><td>Reference materiel</td><td>Numero contrat</td></tr></thead><tbody><tr><td>Quantite dispo/agence</td><td></td><td></td><td>1</td><td>1</td><td></td></tr><tr><td>Quantite louee</td><td></td><td></td><td></td><td>1</td><td>1</td></tr></tbody></table>

Est-ce qu'une propriété correspond 1 et 1 seule fois à l'identifiant 1 et à l'identifiant 2?
# MCD Kilouplus

<figure><img src="image_40.png" /></figure>

<figure><img src="image_41.png" /></figure>

<figure><img src="image_42.png" /></figure>

<figure><img src="image_43.png" /></figure>

<figure><img src="image_44.png" /></figure>
Données, base de données et SGBD

Modèle conceptuel

Modèle logique

Modèle physique

Importation/exportation de données

Requêtes

Logiciel R et bases de données

Utilisation du package RODBC

cirad

AGRICULTURAL RESEARCH
FOR DEVELOPMENT

Biomass
Wood
Energy
Bioproducts

AIDA

agap

Sandrine Auzoux, UR AIDA

Sébastien Paradis, UR BIOWOOEB

Lauriane Rouan, UMR AGAP

Conception de bases
de données
expérimentales à des
fins de modélisation

Interfaçage avec R
# Modèle Logique de Données

Basé sur le formalisme graphique Merise, le MLD est une étape intermédiaire pour passer du MCD, qui est un modèle sémantique, vers une représentation physique des données : SGBD.

<figure><img src="image_45.png" /></figure>
# Traduction d'un MCD en MLD (1/4)

**Règle 1** : toute entité devient une table dans laquelle les attributs deviennent des colonnes (champs). L'identifiant de l'entité devient la clé primaire de la table.

**Règle 2** : toute association de type (1- n) disparait. L'identifiant de la table côté n migre dans la table du côté 1 et devient une clé étrangère.

<figure><img src="image_46.png" /></figure>
# Traduction d'un MCD en MLD (2/4)

**Règle 3** : toute association de type (n-n) devient une table dont la clé primaire est la concaténation des clés primaires des tables associées. Si l'association est porteuse, les propriétés deviennent des attributs de la table.

<figure><img src="image_47.png" /></figure>
# Traduction d'un MCD en MLD (3/4)

**Règle 4** : toute association binaire de type (1-1) est traduite comme une association de type (n-n) à l'exception que la clé étrangère peut contenir ni doublon, ni valeur nulle.

<figure><img src="image_48.png" /></figure>
# Traduction d'un MCD en MLD (4/4)

**Règle 5** : Toute association non binaire est traduite par une table supplémentaire dont la clé primaire est composée d'autant de clés étrangères que d'entités en association. Les attributs de l'association deviennent des colonnes de la table.

<figure><img src="image_49.png" /></figure>
MCD Kilouplus

<figure><img src="image_50.png" /></figure>
# MLD kilouplus

<figure><img src="image_51.png" /></figure>
# Modèle Physique de Données

Le MPD consiste à l'implémentation physique d'une base de données dans un SGBD.

Le MPD étant lié au SGBD, 2 méthodes possibles pour construire la structure de la base de données :

* ✓ Soit en utilisant les outils proposés par le SGBD

* ✓ Soit en utilisant le langage de définition des données du SQL (Structured Query Language).

Le MPD est basé sur la structure du MLD : **tables, champs(attributs) et relations (associations)**. La traduction du MLD en MPD consiste à **typer les données de chaque champ (chaîne de caractères, numérique...)**.
C'est un **Système de Gestion de Bases de Données Relationnelles**

C'est un Programme de la suite bureautique **Microsoft Office** créée par Microsoft (Licence propriétaire, environnement Windows)

La base de données est représentée par 1 fichier dont le nom se termine par l'extension ".mdb" (Access 2000 à 2003) ou « .accdb » (Access 2007 à 2016)

**Une base de données Access est composée de 6 catégories d'objets :**

* ✓ **Tables** : données stockées sous forme de tableaux

* ✓ **Requêtes** : filtres, tris, calculs sur 1 ou plusieurs tables/requêtes suppression, ajout, modification de données en masse

* ✓ **Formulaires** : masques de saisie basés sur des tables/requêtes

* ✓ **Etats** : aperçus avant impression personnalisés

* ✓ **Macros** : mini-programmes qui exécutent une tâche répétitive

* ✓ **Modules** : blocs de code Visual Basic for Application (VBA)
# Les tables sous Access

Le champ (colonne) est l'élément fondamental

L'ensemble des champs constitue un enregistrement (ligne)

La clé primaire identifie chaque enregistrement de façon unique

(Access peut la créer lui-même et gérer automatiquement les données contenues)

<figure><img src="image_52.png" /></figure>
# Structure d'une table sous Access

<figure><img src="image_53.png" /></figure>

Le mode **création** permet de définir la structure de la table :

* ✓ Nom des champs

* ✓ Type de données

* ✓ Description de la donnée contenue dans le champs (métadonnée)

<figure><img src="image_54.png" /></figure>
# Les types de données sous Access

<table><thead><tr><td>Type</td><td>Description</td><td>Taille</td></tr></thead><tbody><tr><td>Texte</td><td>Caractères alphanumériques</td><td>&lt;= 255 caractères</td></tr><tr><td>Mémo</td><td>Caractères alphanumériques</td><td>&lt;= 65535 caractères</td></tr><tr><td>Numérique</td><td>Nombres avec ou sans décimales</td><td>Entier : -32 768 à 32 767<br>Entier long : -2 147 438 648 à +2 147 438 648<br>Réel simple: -3,402823 E38 à +3,402823 E38<br>Réel double:-1,79769313486232 E308 à +1,79769313486232 E308</td></tr><tr><td>Date/Heure</td><td>Date et/ou heure</td><td></td></tr><tr><td>Monétaire</td><td>Evite l'arrondissement pendant les calculs<br>Précision : 15 chiffres + 4 chiffres</td><td>-922 337 203 685 477,5808<br>à<br>+ 922 337 203 685 477,5808</td></tr><tr><td>Numéro auto</td><td>Nombre entier incrémentée<br>automatiquement</td><td>Comme entier long</td></tr><tr><td>Liste de choix</td><td>Permet de choisir une valeur dans une<br>autre table ou liste de valeurs</td><td></td></tr><tr><td>Oui/Non</td><td>Combinaison logique (vrai/faux, 0 ou 1)</td><td></td></tr><tr><td>Objet Ole</td><td>Objets provenant d'autres applications<br>(Image, son, vidéo...)</td><td>&lt;= 1Go</td></tr><tr><td>Lien hypertexte</td><td>Adresse internet, mail</td><td>&lt;= 65535 caractères</td></tr></tbody></table>
# Les propriétés des champs

**Taille du champ** : longueur pour les textes,

longueur et type pour les nombres

**Format** : comme Excel

**Masque de saisie** : date, tel, code postal...

**Valeur par défaut** : remplit automatiquement le champ

**Valide si** : indique des conditions (ex: note >0 et <20)

**Null interdit** : peut on ne rien mettre ?

**Chaine vide autorisée** : texte vide

**Indexé** : définit les clés et accélère le processus de recherche

**Liste de choix** : évite de taper l'intégralité

du texte lorsque les choix sont limités

<figure><img src="image_55.png" /></figure>

**Remarque** : Pour de meilleurs résultats, attribuez toujours la valeur la plus petite possible à la propriété **Taille du champ**.
# Les clés étrangères - relations

Une clé étrangère est une clé qui représente la valeur de la clé primaire d'une table connexe.

<figure><img src="image_56.png" /></figure>

La clé étrangère sert à établir des relations entre les tables (jointures)

<figure><img src="image_57.png" /></figure>

<figure><img src="image_58.png" /></figure>

table Champ

Contrairement aux clés primaires qui sont uniques, les clés étrangères peuvent prendre plusieurs fois la même valeur.

table culture
# L'intégrité référentielle

Il s'agit de règles simples suivies par le SGBDR pour maintenir la cohérence des relations entre les tables et garantir l'intégrité des données stockées.

Pour que la relation soit toujours valide, toutes les valeurs de la clé étrangère de la table liée doivent exister dans le champ clé primaire de la table de référence.

Sous Access, 2 actions étendent ce principe :

* ✓ « mettre à jour en cascade » : lorsque l'utilisateur change la valeur de la clé primaire, automatiquement, la valeur du champ correspondant de la table liée est corrigée.

* ✓ « suppression en cascade » : lorsque l'utilisateur efface un enregistrement, automatiquement, tous les enregistrements des tables liées qui ont un champs de même valeur sont supprimés.
# Création du schéma relationnel (MPD)

<figure><img src="image_59.png" /></figure>

<figure><img src="image_60.png" /></figure>

<figure><img src="image_61.png" /></figure>

<figure><img src="image_62.png" /></figure>

<figure><img src="image_63.png" /></figure>
Création du MPD sous ACCESS :

1. Créer les tables

✓ Définir les champs (type et taille)

✓ Définir les restrictions

✓ Identifier les clés primaires

2. Construire le schéma relationnel

✓ Identifier les contraintes d'intégrité référentielles

✓ Construire les relations entre les tables
MLD kilouplus

<figure><img src="image_64.png" /></figure>
# MPD Kilouplus sous Microsoft Access

<figure><img src="image_65.png" /></figure>
Données, base de données et SGBD

Modèle conceptuel

Modèle logique

Modèle physique

Importation/exportation de données

Requêtes

Logiciel R et bases de données

Utilisation du package RODBC

cirad

AGRICULTURAL RESEARCH
FOR DEVELOPMENT

Biomass
Wood
Energy
Bioproducts

AIDA

agap

Sandrine Auzoux, UR AIDA

Sébastien Paradis, UR BIOWOOEB

Lauriane Rouan, UMR AGAP

Conception de bases
de données
expérimentales à des
fins de modélisation

Interfaçage avec R
# Alimentation d'une base de données Access

Access propose plusieurs méthodes pour entrer des données dans une base de données :

* Saisie directement dans une table : risque d'erreurs et fastidieux

* Saisie à l'aide d'un formulaire : plus précise, plus rapide et plus facile

* Importation de données externes dans Access: plus rapide et simple

L'une des fonctionnalités les plus utiles dans Access est la possibilité d'utiliser des données provenant d'autres programmes.

Les commandes sous l'onglet "données externes" permettent d'exporter, d'importer et de lier des données.

<figure><img src="image_66.png" /></figure>
# Saisie des données dans une table

Le mode "feuille de données" permet d'afficher et de saisir les données dans une table. La saisie s'effectue comme dans un tableau Excel. Toute donnée saisie est enregistrée automatiquement.

<figure><img src="image_67.png" /></figure>

Mode Feuille de données

<figure><img src="image_68.png" /></figure>

<figure><img src="image_69.png" /></figure>

Mode Tableau croisé dynamique

<figure><img src="image_70.png" /></figure>

Mode G

<figure><img src="image_71.png" /></figure>

Mode C

enregistrement

<table><thead><tr><th>numdatamet</th><th>numstatmet</th><th>datemetec</th><th>tmin</th><th>tmax</th><th>tmoy</th><th>hrmin</th><th>hrmax</th><th>hrmoy</th><th>ventmax</th><th>ventmoy</th></tr></thead><tbody><tr><td>1</td><td>2</td><td>01/01/2013</td><td>17,27</td><td>30,65</td><td>23,58031</td><td>13,45</td><td>28,85</td><td>21,70</td><td>2,908</td><td>1,27</td></tr><tr><td>2</td><td>2</td><td>02/01/2013</td><td>17,49</td><td>31,94</td><td>24,3676</td><td>14,08</td><td>32,38</td><td>23,22</td><td>2,324</td><td>1,08</td></tr><tr><td>3</td><td>2</td><td>03/01/2013</td><td>17,58</td><td>32,29</td><td>24,57521</td><td>13,62</td><td>31,67</td><td>22,22</td><td>2,507</td><td>1,04</td></tr><tr><td>4</td><td>2</td><td>04/01/2013</td><td>17,9</td><td>32,94</td><td>24,92312</td><td>10,73</td><td>29,07</td><td>19,50</td><td>2,098</td><td>1,12</td></tr><tr><td>5</td><td>2</td><td>05/01/2013</td><td>17,58</td><td>31,77</td><td>24,58</td><td>10,34</td><td>27,58</td><td>17,90</td><td>2,538</td><td>1,13</td></tr><tr><td>6</td><td>2</td><td>06/01/2013</td><td>16,99</td><td>32,38</td><td>23,99187</td><td>10,29</td><td>27,07</td><td>18,45</td><td>2,811</td><td>0,83</td></tr><tr><td>7</td><td>2</td><td>07/01/2013</td><td>18,04</td><td>33</td><td>24,85854</td><td>13,6</td><td>30,62</td><td>22,70</td><td>2,012</td><td>0,94</td></tr><tr><td>8</td><td>2</td><td>08/01/2013</td><td>18,51</td><td>33,05</td><td>25,44167</td><td>15,86</td><td>33,13</td><td>23,91</td><td>1,943</td><td>0,94</td></tr><tr><td>9</td><td>2</td><td>09/01/2013</td><td>19,22</td><td>33,63</td><td>25,9976</td><td>15,77</td><td>28,93</td><td>22,73</td><td>2,18</td><td>1,11</td></tr><tr><td>10</td><td>2</td><td>10/01/2013</td><td>19,64</td><td>33,12</td><td>25,87104</td><td>10,69</td><td>26,67</td><td>18,57</td><td>2,069</td><td>1,13</td></tr><tr><td>11</td><td>2</td><td>11/01/2013</td><td>18,57</td><td>32,97</td><td>24,40073</td><td>11,96</td><td>36,56</td><td>22,27</td><td>2,16</td><td>0,78</td></tr><tr><td>12</td><td>2</td><td>12/01/2013</td><td>18,19</td><td>32,83</td><td>24,74562</td><td>12,11</td><td>28,56</td><td>20,57</td><td>2,153</td><td>1,09</td></tr><tr><td>13</td><td>2</td><td>13/01/2013</td><td>18,22</td><td>34,76</td><td>25,63521</td><td>9,45</td><td>23,61</td><td>16,75</td><td>1,992</td><td>1,03</td></tr><tr><td>14</td><td>2</td><td>14/01/2013</td><td>18,93</td><td>34,31</td><td>25,58865</td><td>11,02</td><td>31,8</td><td>18,90</td><td>1,868</td><td>0,73</td></tr><tr><td>15</td><td>2</td><td>15/01/2013</td><td>19,79</td><td>34,56</td><td>26,35302</td><td>10,67</td><td>32,76</td><td>20,09</td><td>2,031</td><td>0,59</td></tr></tbody></table>

champ
# Saisie à partir d'un formulaire

Le formulaire est utilisé pour créer l'interface utilisateur d'une application de base de données.

Le formulaire "lié" est directement connecté à une source de données : une (des) table(s) ou une (des) requête(s).

Il facilite la saisie des données : ajout, modification, suppression.

+ agréable à utiliser que la feuille de données (affichage en ligne et en colonne)

<figure><img src="image_72.png" /></figure>
Données qu'Access peut importer, lier ou exporter

<table><thead><tr><td>Format</td><td>Importation autorisée?</td><td>Liaison autorisée?</td><td>Exportation autorisée?</td></tr></thead><tbody><tr><td>Fichier Excel</td><td>Oui</td><td>Oui</td><td>Oui</td></tr><tr><td>Fichier Access</td><td>Oui</td><td>Oui</td><td>Oui</td></tr><tr><td>Fichier texte</td><td>Oui</td><td>Oui</td><td>Oui</td></tr><tr><td>Fichier Word</td><td>Non, enregistrer fichier texte et importer</td><td>Non, enregistrer fichier texte et lier</td><td>Oui (exporter en tant que fusion word ou texte enrichi)</td></tr><tr><td>Fichier XML</td><td>Oui</td><td>Non</td><td>Oui</td></tr><tr><td>Fichier PDF</td><td>Non</td><td>Non</td><td>Oui</td></tr><tr><td>Document HTML</td><td>Oui</td><td>Oui</td><td>Oui</td></tr><tr><td>Fichier DBase</td><td>Oui</td><td>Oui</td><td>Oui</td></tr><tr><td>Bd ODBC (SQL server par exemple)</td><td>Oui</td><td>Oui</td><td>Oui</td></tr></tbody></table>
# Importer des données Excel vers Access

Plusieurs façons de stocker des données d'un classeur Excel dans une base de données Access:

1. Copier/Coller d'1 feuille de calcul ouverte dans 1 feuille de données Access.

<figure><img src="image_73.png" /></figure>

2. Importer des données en écrivant du code.

<figure><img src="image_74.png" /></figure>

Microsoft
Visual Basic
for Applications

3. Avec l'**assistant d'importation d'Access**, on peut importer 1 feuille de calcul dans 1 nouvelle table ou 1 table existante.

4. Lier une feuille de calcul à une base de données Access.

<figure><img src="image_75.png" /></figure>

**Remarque :** Il est impossible d'enregistrer un classeur Excel en tant que base de données Access. Excel n'intègre aucune fonctionnalité pour créer une base de données Access.
# Exporter des données Access vers Excel

Plusieurs techniques pour transférer des données d'Access vers Excel:

1. Copier/Coller des données d'Access dans une feuille de calcul Excel.

2. Avec l'Assistant Exportation d'Access,

* ✓ On peut exporter une table, le résultat d'une requête, un formulaire ou un état vers une feuille de calcul Excel.

* ✓ 1 objet peut être exporté à la fois

* ✓ Possibilité de fusionner les données dans plusieurs feuilles de calcul Excel

3. Exporter des données à l'aide de code.

<figure><img src="image_76.png" /></figure>

Microsoft*
Visual Basic*
for Applications

4. Lier une feuille de calcul à une base de données Access.

<figure><img src="image_77.png" /></figure>

<figure><img src="image_78.png" /></figure>
Données, base de données et SGBD

Modèle conceptuel

Modèle logique

Modèle physique

Importation/exportation de données

Requêtes

Logiciel R et bases de données

Utilisation du package RODBC

cirad

AGRICULTURAL RESEARCH
FOR DEVELOPMENT

Biomass
Wood
Energy
Bioproducts

AIDA

agap

Sandrine Auzoux, UR AIDA

Sébastien Paradis, UR BIOWOOEB

Lauriane Rouan, UMR AGAP

Conception de bases
de données
expérimentales à des
fins de modélisation

Interfaçage avec R
# SQL Généralités

SQL signifie "Structured Query Language"
c'est-à-dire "langage d'interrogation structuré"

C'est le **langage de requête standard** des SGBDR.

C'est à la fois :

* ✓ Un langage de définition de données (**LDD**) : création, modification, suppression des bases de données et des tables

* ✓ Un langage d'interrogation de la base (**LID**) : interrogation de la base en vue d'avoir une liste de résultats

* ✓ Un langage de manipulation de données (**LMD**) : sélection, insertion, modification ou suppression des données dans une table

* ✓ Un langage de contrôle de l'accès aux données (**LCD**) : définition des permissions au niveau des utilisateurs d'une base de données
# SQL - Les commandes de base

## Manipulation des tables

**CREATE** : création de table

**DROP** : suppression de table

**ALTER** : modification de la structure de table

## Manipulation des données

**INSERT** : insertion de données dans 1 table

**DELETE** : suppression de données d'1 table

**UPDATE** : mise à jour de données d'1 table

**SELECT** : interrogation de données de 1 à n tables

## Gestion des privilèges utilisateurs (droits d'accès)

**GRANT** : ajout de privilèges

**REVOKE** : suppression de privilèges
La commande Select

SELECT est la commande la plus courante de SQL. Elle consiste à lire les données contenues dans une base de données ou à calculer de nouvelles données à partir de données existantes.

<table><tr><td>SELECT [DISTINCT ou ALL]</td><td>Précise les colonnes qui vont apparaître dans la réponse</td></tr><tr><td>FROM</td><td>Précise la (ou les) table(s) intervenant dans l'interrogation</td></tr><tr><td>WHERE</td><td>Précise les conditions à appliquer sur les lignes. On peut trouver :<br/>• Des comparateurs : =, >, <, >=, <=, &lt;&gt;<br/>• Des opérateurs logiques : AND, OR, NOT<br/>• Les prédicats : IN, LIKE, NULL, ALL, SOME, ANY, EXISTS...</td></tr><tr><td>GROUP BY</td><td>Précise la (ou les) colonne de regroupement</td></tr><tr><td>HAVING</td><td>Précise la (ou les) conditions associées à un regroupement</td></tr><tr><td>ORDER BY</td><td>Précise l'ordre dans lequel vont apparaître les lignes de la réponse :<br/>- ASC : En ordre ascendant (par défaut)<br/>- DESC: En ordre descendant</td></tr></table>
# Exemple de commande SELECT

Je sélectionne tous les agriculteurs qui cultivent du blé.

<figure><img src="image_79.png" /></figure>

SELECT * FROM parcelle, agriculteur WHERE culture='blé'

<figure><img src="image_80.png" /></figure>

résultat de la requête
SQL – Les fonctions agrégats

Les fonctions **agrégats** sont utilisées dans une clause
**SELECT** ou **HAVING** :

**COUNT(<nom d'une colonne>)** : comptabilise le nombre de lignes de la colonne spécifiée.

**SUM(<nom d'une colonne>)** : retourne la somme des valeurs d'une colonne spécifiée de type numérique.

**MIN(<nom d'une colonne>)** : retourne la valeur minimale d'une colonne spécifiée de type caractère ou numérique.

**MAX(<nom d'une colonne>)**: retourne la valeur maximale d'une colonne spécifiée de type caractère ou numérique caractère ou numérique.

**AVG(<nom d'une colonne>)** : calcule la moyenne arithmétique d'une colonne spécifiée de type numérique.
# Exemple fonctions agrégats

Je sélectionne toutes les cultures dont la surface totale est supérieure à 30000

<figure><img src="image_81.png" /></figure>

SELECT culture, sum(surface) as stot FROM parcelles GROUP BY culture HAVING sum(surface) > 30000

<table><thead><tr><th colspan="3">parcelles</th></tr><tr><th>parc_id</th><th>culture</th><th>surface</th></tr></thead><tbody><tr><td>3106</td><td>blé</td><td>25500</td></tr><tr><td>3108</td><td>blé</td><td>54300</td></tr><tr><td>3004</td><td>maïs</td><td>42200</td></tr><tr><td>2311</td><td>vigne</td><td>8740</td></tr><tr><td>3016</td><td>tournesol</td><td>21500</td></tr><tr><td>3156</td><td>blé</td><td>26400</td></tr><tr><td>2308</td><td>vigne</td><td>12350</td></tr><tr><td>2455</td><td>verger</td><td>4680</td></tr></tbody></table>

<figure><img src="image_82.png" /></figure>

résultat de la requête

<table><thead><tr><th>culture</th><th>stot</th></tr></thead><tbody><tr><td>blé</td><td>106200</td></tr><tr><td>maïs</td><td>42200</td></tr></tbody></table>
# SQL – Les jointures

> « Les jointures en SQL permettent d'associer plusieurs tables dans une même requête. Cela permet d'exploiter la puissance des bases de données relationnelles pour obtenir des résultats qui combinent les données de plusieurs tables de manière efficace. »

2 types de jointures peuvent être utilisés dans des requêtes en code SQL :

* Les jointures internes permettent de sélectionner les enregistrements ayant des correspondances entre les deux tables liées.

* Les jointures externes permettent de sélectionner à la fois :

* les enregistrements ayant des correspondances entre les deux tables liées.

* les enregistrements n'ayant pas de correspondance dans la première, dans la seconde ou dans toutes les tables.
# SQL – Sans jointure

Si aucune condition de jointure est précisée, la requête correspondante réalisera le produit cartésien des attributs des tables impliquées

SELECT id_champ, culture, nom_agriculteur FROM agriculteur, champ

<table><thead><tr><th colspan="3">champ</th></tr><tr><th>Id_champ</th><th>culture</th><th>Id_agriculteur</th></tr></thead><tbody><tr><td>3106</td><td>blé</td><td>2</td></tr><tr><td>2455</td><td>verger</td><td>1</td></tr></tbody></table>

<table><thead><tr><th colspan="2">agriculteur</th></tr><tr><th>Id.agriculteur</th><th>nom_agriculteur</th></tr></thead><tbody><tr><td>1</td><td>John</td></tr><tr><td>2</td><td>Céline</td></tr></tbody></table>

<figure><img src="image_83.png" /></figure>

<table><thead><tr><th>Id_champ</th><th>culture</th><th>nom_agriculteur</th></tr></thead><tbody><tr><td>2455</td><td>verger</td><td>John</td></tr><tr><td>2455</td><td>verger</td><td>Céline</td></tr><tr><td>3106</td><td>blé</td><td>John</td></tr><tr><td>3106</td><td>blé</td><td>Céline</td></tr></tbody></table>
# SQL - jointure interne

## Je sélectionne les champs qui sont cultivés par un agriculteur

<figure><img src="image_84.png" /></figure>

SELECT C.id_champ, C.culture, A.nom_agriculteur FROM champ C INNER JOIN agriculteur A ON A.id_agriculteur = C.id_agriculteur

<table><thead><tr><th colspan="3">champ</th><th colspan="2">agriculteur</th></tr><tr><th>Id_champ</th><th>culture</th><th>Id_agriculteur</th><th>Id.agriculteur</th><th>nom_agriculteur</th></tr></thead><tbody><tr><td>3106</td><td>blé</td><td>2</td><td>1</td><td>John</td></tr><tr><td>2455</td><td>verger</td><td>1</td><td>2</td><td>Céline</td></tr><tr><td></td><td></td><td></td><td>3</td><td>Robert</td></tr></tbody></table>

<figure><img src="image_85.png" /></figure>

<table><thead><tr><th>Id_champ</th><th>culture</th><th>nom_agriculteur</th></tr></thead><tbody><tr><td>2455</td><td>verger</td><td>John</td></tr><tr><td>3106</td><td>blé</td><td>Céline</td></tr></tbody></table>
# SQL - jointure externe

Je sélectionne tous les agriculteurs, y compris ceux qui ne cultivent pas de champ

<figure><img src="image_86.png" /></figure>

SELECT C.id_champ, C.culture, A.nom_agriculteur FROM agriculteur A
RIGHT JOIN champ C ON A.id_agriculteur = C.id_agriculteur

<table><thead><tr><th colspan="3">champ</th><th colspan="2">agriculteur</th></tr><tr><th>Id_champ</th><th>culture</th><th>Id_agriculteur</th><th>Id.agriculteur</th><th>nom_agriculteur</th></tr></thead><tbody><tr><td>3106</td><td>blé</td><td>2</td><td>1</td><td>John</td></tr><tr><td>2455</td><td>verger</td><td>1</td><td>2</td><td>Céline</td></tr><tr><td></td><td></td><td></td><td>3</td><td>Robert</td></tr></tbody></table>

<figure><img src="image_87.png" /></figure>

<table><thead><tr><th>Id_champ</th><th>culture</th><th>nom_agriculteur</th></tr></thead><tbody><tr><td>2455</td><td>verger</td><td>John</td></tr><tr><td>3106</td><td>blé</td><td>Céline</td></tr><tr><td></td><td></td><td>Robert</td></tr></tbody></table>
SQL – Les jointures en un coup d'œil

SQL

JOINS

SELECT <fields>

FROM TableA A

INNER JOIN TableB B

ON A.key = B.key

<figure><img src="image_88.png" /></figure>

SELECT <fields>

FROM TableA A

LEFT JOIN TableB B

ON A.key = B.key

<figure><img src="image_89.png" /></figure>

SELECT <fields>

FROM TableA A

RIGHT JOIN TableB B

ON A.key = B.key

<figure><img src="image_90.png" /></figure>

SELECT <fields>

FROM TableA A

LEFT JOIN TableB B

ON A.key = B.key

WHERE B.key IS NULL

<figure><img src="image_91.png" /></figure>

SELECT <fields>

FROM TableA A

RIGHT JOIN TableB B

ON A.key = B.key

WHERE a.key IS NULL

<figure><img src="image_92.png" /></figure>

SELECT <fields>

FROM TableA A

FULL OUTER JOIN TableB B

ON A.key = B.key

<figure><img src="image_93.png" /></figure>

SELECT <fields>

FROM TableA A

FULL OUTER JOIN TableB B

ON A.key = B.key

WHERE A.key IS NULL

OR B.key IS NULL

<figure><img src="image_94.png" /></figure>

<figure><img src="image_95.png" /></figure>
# Les requêtes dans Access

Il existe 3 grands types de requêtes :

* Les requêtes **sélections** qui permettent de sélectionner des enregistrements, d'effectuer des tris ou des calculs sur les données d'une ou plusieurs tables.

<figure><img src="image_96.png" /></figure>

* Les requêtes **actions** sont utilisées pour modifier, supprimer, ajouter des enregistrements ou créer de nouvelles tables.

* Les requêtes d'**analyse croisée** présentent les résultats sous forme de tableaux type Excel.

Access offre 3 manières de créer une requête:

✓ en utilisant les assistants (requête simple, analyse croisée, trouver les doublons, de non correspondance)

✓ en la bâtissant du début à la fin en mode création graphique

✓ en l'écrivant en langage SQL en mode SQL.
Les étapes pour la création d'un requête

1. Sélectionner la/les tables et la/les requêtes

2. Choisir le type de requête sélection

3. Sélectionner le/les champs à afficher

4. Déterminer si les champs ont besoin d'être triés

5. Définir les critères de sélection

6. Options spécialisées : regroupement ou générateur d'expression

7. Cacher les champs au besoin

8. Exécuter la requête et valider le résultat

9. Convertir la requête sélection en requête action (Ajout, Suppression, Mise à jour, création de table)

10. Exécuter à nouveau la requête et confirmer l'opération

**Requêtes action, attention !!!** Impossible de revenir en arrière lorsque la requête a été exécutée.
Créer et exécuter toujours une requête sélection avant de créer une requête action.
Les critères des requêtes dans Access

Un critère de requête est une **condition appliquée à un champ**, qui est définie en fonction des valeurs de ce champ.

C'est une chaîne qui comprend des **noms de champs**, des **opérateurs**, des ** constantes**, des **valeurs** et des **fonctions spécifiques**.

Dans ACCESS, on parle aussi d'**expressions**

Exemple : **concaténation** du prénom et du nom = [Prénom] &"" & [nom]

Les formats de saisie standard d'un critère de requête sont :

* ✓ les # entourent les dates

* ✓ les " entourent les textes

* ✓ les [] entourent les noms d'objets. Obligatoire si le nom comporte un espace ou un signe de ponctuation.
# Le générateur d'expression

Il permet de saisir des expressions plus rapidement et avec plus de précision

Exemple d'expression pour créer un champ **désignation** correspondant au code du produit suivi de **nom du produit**

<figure><img src="image_97.png" /></figure>

Expression = Formule

<figure><img src="image_98.png" /></figure>

Identificateurs :
champs de tables, de formulaires et de requêtes

<figure><img src="image_99.png" /></figure>

Opérateurs :
<, <=, >, >=, =, <>

<figure><img src="image_100.png" /></figure>

Fonctions : somme, moyenne, date...

<figure><img src="image_101.png" /></figure>

Constantes : chaînes de caractères, valeur numérique
# Les opérateurs

<table><thead><tr><th>Symbole</th><th>Description</th><th>Exemples</th></tr></thead><tbody><tr><td colspan="3">Opérateurs de comparaison</td></tr><tr><td>&lt;, &lt;=</td><td>Est inférieur à; Est inférieur ou égal à,</td><td rowspan="3">Surface de la parcelle &lt; 300 ha</td></tr><tr><td>&gt;, &gt;=</td><td>Est supérieur; Est supérieur ou égal à,</td></tr><tr><td>=, &lt;&gt;</td><td>Est égal à; Est différent de</td></tr><tr><td colspan="3">Opérateur de concaténation</td></tr><tr><td>&amp;</td><td>Concatène des chaines de caractères</td><td>[Prénom] &amp;"" &amp; [nom]</td></tr><tr><td colspan="3">Opérateurs divers</td></tr><tr><td>Entre</td><td>Sélectionne les enregistrement dont les valeurs sont comprises dans l'intervalle</td><td>Entre 10 et 20</td></tr><tr><td>Dans</td><td>Sélectionne les enregistrements dont la valeur est dans la liste</td><td>Entre 07/10/2012 et 10/12/2012</td></tr><tr><td>Est Null</td><td>Sélectionne les enregistrements qui n'ont pas ou seulement des valeurs</td><td rowspan="2">Dans ("Saint Denis", "Saint Pierre")</td></tr><tr><td>Est pas Null</td><td>Sélectionne les enregistrements qui ne correspondent pas au critère</td></tr><tr><td>Comme</td><td>Effectue une sélection sur une donnée approximative</td><td>Comme "R*" (commence par R et retourne Réunion...)<br>Comme "1#3" (trouve 103, 113, 123...)<br>Comme "*un*" (contient la chaîne de caractère un et retourne Réunion)</td></tr></tbody></table>
# Opérations de regroupement

<table><thead><tr><td>Opération</td><td>Description</td></tr></thead><tbody><tr><td>Regroupement</td><td>Définir les groupes de données sur lesquelles effectuer les calculs</td></tr><tr><td>Somme</td><td>Calcule le total des valeurs du champ</td></tr><tr><td>Moyenne</td><td>Calcule la moyenne des valeurs du champ</td></tr><tr><td>Min</td><td>Trouve la valeur la plus petite du champ</td></tr><tr><td>Max</td><td>Trouve la valeur la plus grande du champ</td></tr><tr><td>Compte</td><td>Calcule le nombre de valeurs dans un champ, sans compter les valeurs nulles</td></tr><tr><td>EcartType</td><td>Calcule l'écart type des valeurs d'un champ</td></tr><tr><td>Var</td><td>Calcule la variance des valeurs d'un champ</td></tr><tr><td>Premier</td><td>Trouve la première valeur du champ</td></tr><tr><td>Dernier</td><td>Trouve la dernière valeur du champ</td></tr><tr><td>Expression</td><td>Pour créer un champ calculé incluant une fonction de regroupement</td></tr><tr><td>Où</td><td>Pour spécifier les critères d'un champ qui n'est pas utilisé pour définir des regroupement.</td></tr></tbody></table>
# Exemple de requête

<figure><img src="image_102.png" /></figure>

## Création de la requête

Je sélectionne dans la table échantillon tous les échantillons d'insectes collectés dans le champ dont l'ordre est "Diptera"

<figure><img src="image_103.png" /></figure>

## Résultat de la requête

<figure><img src="image_104.png" /></figure>
Données, base de données et SGBD

Modèle conceptuel

Modèle logique

Modèle physique

Importation/exportation de données

Requêtes

Logiciel R et bases de données

Utilisation du package RODBC

Biomass
Wood
Energy
Bioproducts

<figure><img src="image_105.png" /></figure>

<figure><img src="image_106.png" /></figure>

Sandrine Auzoux, UR AIDA
Sébastien Paradis, UR BIOWOOEB
Lauriane Rouan, UMR AGAP

Conception de bases
de données
expérimentales à des
fins de modélisation

Interfaçage avec R
<figure><img src="image_107.png" /></figure>

R est, avant tout, un logiciel de traitement statistique des données.

Il dispose d'une bibliothèque très large de fonctions statistiques, d'autant plus large qu'il est possible d'en intégrer de nouvelles par le système des "packages", modules externes, que l'on peut télécharger gratuitement sur internet.

R propose également une gamme étendue de fonctionnalités graphiques.

R est, aussi, un langage de programmation

Il est ainsi possible de créer de nouvelles fonctions de traitement de données.
Ensemble des
commandes que
l'on souhaite
exécuter (Script)

<figure><img src="image_108.png" /></figure>
<figure><img src="image_109.png" /></figure>

Exécution des

commandes

Affichage des résultats
<figure><img src="image_110.png" /></figure>

Liste des objets créés

Historique des
commandes
<figure><img src="image_111.png" /></figure>

Gestion des packages

Visualisation des sorties
graphiques

Aide

Gestionnaire de fichiers
Que sait gérer R ?

Sous R on travaille avec

• des nombres 0, 1, -3.76, π ;

• des chaînes de caractères "genotype", "tree" ;

• des "logiques" TRUE, FALSE.

Pour faire des analyses statistiques ou des graphiques, il est
nécessaire de **stocker les données en mémoire**.

On crée pour cela des **objets** (vecteur, liste, matrice, tableau de données, ...), auxquels on donne un **nom**. Cette opération s'appelle **l'assignation** et se fait à l'aide du symbole `<-`.
<figure><img src="image_112.png" /></figure>

<figure><img src="image_113.png" /></figure>

manipule des objets définis par :

* leur **nom**

* leur **contenu**

* des **attributs** qui vont caractériser le type de données représentées par l'objet.

Les objets ont tous, au moins, **deux attributs** :

<figure><img src="image_114.png" /></figure>

* le **mode** indiquant le type des éléments de l'objet (numérique, caractère, logique, fonction, ...);

* la **longueur** donnant le nombre d'éléments contenus dans l'objet.
<figure><img src="image_115.png" /></figure>

<table><thead><tr><td>Objet</td><td>Mode</td><td>Plusieurs modes possibles dans le même objet ?</td></tr></thead><tbody><tr><td>Vecteur</td><td>numérique, caractère ou logique</td><td>Non</td></tr><tr><td>Facteur</td><td>numérique ou caractère</td><td>Non</td></tr><tr><td>Matrice</td><td>numérique, caractère ou logique</td><td>Non</td></tr><tr><td>Tableau de données</td><td>numérique, caractère ou logique</td><td>Oui</td></tr><tr><td>Liste</td><td>numérique, caractère, logique, ...</td><td>Oui</td></tr></tbody></table>
<figure><img src="image_116.png" /></figure>

<table><thead><tr><th>Objet</th><th>Mode</th><th>Plusieurs modes possibles dans le même objet ?</th></tr></thead><tbody><tr><td colspan="2">Requêtes</td><td></td></tr><tr><td>Vecteur</td><td>numérique, caractère ou logique</td><td>Non</td></tr><tr><td>Facteur</td><td>numérique ou caractère</td><td>Non</td></tr><tr><td>Matrice</td><td>numérique, caractère ou logique</td><td>Non</td></tr><tr><td colspan="2">Résultats</td><td></td></tr><tr><td>Tableau de données</td><td>numérique, caractère ou logique</td><td>Oui</td></tr><tr><td>Liste</td><td>numérique, caractère, logique, ...</td><td>Oui</td></tr></tbody></table>
Les vecteurs

Un vecteur est constitué d'une série d'éléments de même mode.
La manière la plus courante de créer un vecteur est d'utiliser la
fonction c() (concaténation).

> v1 <- c(1,5,24)

> v1
[1] 1 5 24

> mode(v1)
[1] "numeric"

> v2 <- c("arbre", "feuille", "racine")

> v2
[1] "arbre" "feuille" "racine"

> mode(v2)
[1] "character"

> v3 <- c(TRUE,FALSE,TRUE)

> v3
[1] TRUE FALSE TRUE

> mode(v3)
[1] "logical"

> v4 <- c(1,"leaf")

> v4
[1] "1" "leaf"

> mode(v4)
[1] "character"
Les "data.frame"

Les **tableaux de données** (data.frame) sont des objets consacrés spécifiquement au stockage des données destinées à l'analyse.

Ce type de tableau "individus X variables" est analogue à une
matrice dont les colonnes peuvent être de différents modes.

Chaque **colonne** correspond à une **variable**, et chaque **ligne** à un **individu**.

Un tableau de données se crée soit par l'import d'un fichier de données au moyen de la fonction read.table , soit directement à l'aide de la fonction data.frame .

Il peut être aussi le résultat de l'appel d'une fonction R (sqlFetch, sqlQuery, ...)
Les "data.frame"

> MaConnexion <- odbcConnect("GARP_Formation")

> Tabsite <- sqlFetch(MaConnexion, "site")

> is.data.frame(Tabsite)

[1] TRUE

> Tabsite

<table><thead><tr><th>NumSite</th><th>Site</th><th>station</th><th>Meteo</th><th>Altitude</th></tr></thead><tbody><tr><td>1</td><td>Andranomanelatra</td><td></td><td>Cimel</td><td>1645</td></tr><tr><td>2</td><td>Ivory</td><td></td><td>Cimel</td><td>954</td></tr></tbody></table>
Les "data.frame"

Si X est un tableau de données, on accèdera à la valeur de la ième ligne et jème colonne en exécutant la commande X[i, j].

Pour accéder à toutes les valeurs d'une ligne (resp. **colonne**) donnée, il suffit simplement d'omettre l'indice de la colonne (resp. **ligne**) sans oublier la virgule.

Si le tableau X a des noms de colonnes (variables), ceux-ci peuvent être utilisés pour accéder à l'information contenue dans le tableau.

> Tabsite[2,3]
[1] Cimel
Levels: Cimel
>
> Tabsite[1,]
NumSite      Site      StationMeteo Altitude
1           1 Andranomanelatra Cimel      1645
>
> Tabsite[,4]
[1] 1645 954
>
> Tabsite$site
[1] Andranomanelatra Ivory
Levels: Andranomanelatra Ivory
>
> Tabsite[Tabsite$site=="Ivory", "Altitude"]
[1] 954
# Le package RODBC

Les fonctions du package RODBC permettent de gérer des bases de données sous différents **Systèmes de Gestion de Base de Données** : PostgreSQL, MySQL, Microsoft Access ..., par l'intermédiaire de R grâce à un **lien Open DataBase Connectivity (ODBC)** préalablement créé avec une base de données déjà existante.

## 3 fonctions principales :

* ✓ **odbcConnect**, permet d'établir une connexion,

* ✓ **sqlQuery**, permet d'exécuter une requête,

* ✓ **odbcClose**, ferme la connexion établie.

## Intérêts et inconvénients :

* ✓ Ce package permet d'entrer ou de récupérer des données directement dans une base de données à partir de R ;

* ✓ L'installation de ce seul package permet d'utiliser les SGBD les plus répandus ;

* ✓ La création de la source de données ODBC n'est pas forcément évidente.
# Création d'une source de données ODBC

Aller dans **Panneau de configuration**, puis **Outils d'administration et Sources de données (ODBC)**.

<figure><img src="image_117.png" /></figure>
# Création d'une source de données ODBC

Cliquer sur **Ajouter** et sélectionner le pilote correspondant à votre base de données

<figure><img src="image_118.png" /></figure>

**Remarque** : Si le pilote n'est pas installé, il est possible de le télécharger sur le site de Microsoft https://www.microsoft.com/fr-FR/download/details.aspx?id=13255
# Création d'une source de données ODBC

Dans la fenêtre suivante, nous allons identifier la source données.

<figure><img src="image_119.png" /></figure>

« Nom de la source de données » sera le nom à indiquer dans la fonction R. Valider avec OK puis Appliquer et Quitter.

La source de données (ODBC) est maintenant créée.
Installation du Package R

Depuis Rstudio, aller dans l'onglet **Packages** et cliquer sur **Install**.
Si une connexion internet est disponible, choisir **Install from Repository (CRAN, CRANextra)** et saisir le nom du package **RODBC**.

<figure><img src="image_120.png" /></figure>
## Chargement du Package R

<figure><img src="image_121.png" /></figure>
## Etablissement et fermeture d'une connexion

Avant de faire de pouvoir faire des requêtes, il est nécessaire de se connecter à la base de données

```
> library(RODBC)
Warning message:
package 'RODBC' was built under R version 3.2.5
> MaConnexion <- odbcConnect("GARP_Formation")
```

S'il y a un mot de passe restreignant l'accès à la base il faut le spécifier de la manière suivante

```
> MaConnexion <- odbcconnect("GARP_Formation",
+ uid="Nom_utilisateur", pwd="mot_de_passe")
```

Une fois les manipulations faites sur la (les) base(s) de données ouverte(s), il faut fermer la (les) connexion(s)

```
> odbcClose(MaConnexion)      Fermeture d'une connexion en particulier
> 
> odbcCloseAll()              Fermeture de toutes les connexions ouvertes
> 
```
# Lecture de la base de données

Pour savoir quelles sont les tables accessibles par la connexion ouverte, on utilise la fonction sqlTables

> MaConnexion <- odbcConnect("GARP_Formation")

> sqlTables(MaConnexion)

<table><thead><tr><th></th><th>TABLE_CAT</th><th>TABLE_SCHEMA</th><th>TABLE_NAME</th><th>TABLE_TYPE</th><th>REMARKS</th></tr></thead><tbody><tr><td>1</td><td>D\\Formation\\Formation BDD et R\\GARP_Formation.accdb</td><td>&lt;NA&gt;</td><td>MSysAccessStorage</td><td>SYSTEM TABLE</td><td>&lt;NA&gt;</td></tr><tr><td>2</td><td>D\\Formation\\Formation BDD et R\\GARP_Formation.accdb</td><td>&lt;NA&gt;</td><td>MSysAccessXML</td><td>SYSTEM TABLE</td><td>&lt;NA&gt;</td></tr><tr><td>3</td><td>D\\Formation\\Formation BDD et R\\GARP_Formation.accdb</td><td>&lt;NA&gt;</td><td>MSysACES</td><td>SYSTEM TABLE</td><td>&lt;NA&gt;</td></tr><tr><td>4</td><td>D\\Formation\\Formation BDD et R\\GARP_Formation.accdb</td><td>&lt;NA&gt;</td><td>MSysComplexColumns</td><td>SYSTEM TABLE</td><td>&lt;NA&gt;</td></tr><tr><td>5</td><td>D\\Formation\\Formation BDD et R\\GARP_Formation.accdb</td><td>&lt;NA&gt;</td><td>MSysIMEXColumns</td><td>SYSTEM TABLE</td><td>&lt;NA&gt;</td></tr><tr><td>6</td><td>D\\Formation\\Formation BDD et R\\GARP_Formation.accdb</td><td>&lt;NA&gt;</td><td>MSysIMEXSpecs</td><td>SYSTEM TABLE</td><td>&lt;NA&gt;</td></tr><tr><td>7</td><td>D\\Formation\\Formation BDD et R\\GARP_Formation.accdb</td><td>&lt;NA&gt;</td><td>MSysNameMap</td><td>SYSTEM TABLE</td><td>&lt;NA&gt;</td></tr><tr><td>8</td><td>D\\Formation\\Formation BDD et R\\GARP_Formation.accdb</td><td>&lt;NA&gt;</td><td>MSysNavPaneGroupCategories</td><td>SYSTEM TABLE</td><td>&lt;NA&gt;</td></tr><tr><td>9</td><td>D\\Formation\\Formation BDD et R\\GARP_Formation.accdb</td><td>&lt;NA&gt;</td><td>MSysNavPaneGroups</td><td>SYSTEM TABLE</td><td>&lt;NA&gt;</td></tr><tr><td>10</td><td>D\\Formation\\Formation BDD et R\\GARP_Formation.accdb</td><td>&lt;NA&gt;</td><td>MSysNavPaneGroupToObjects</td><td>SYSTEM TABLE</td><td>&lt;NA&gt;</td></tr><tr><td>11</td><td>D\\Formation\\Formation BDD et R\\GARP_Formation.accdb</td><td>&lt;NA&gt;</td><td>MSysNavPaneObjectIDs</td><td>SYSTEM TABLE</td><td>&lt;NA&gt;</td></tr><tr><td>12</td><td>D\\Formation\\Formation BDD et R\\GARP_Formation.accdb</td><td>&lt;NA&gt;</td><td>MSysObjects</td><td>SYSTEM TABLE</td><td>&lt;NA&gt;</td></tr><tr><td>13</td><td>D\\Formation\\Formation BDD et R\\GARP_Formation.accdb</td><td>&lt;NA&gt;</td><td>MSysQueries</td><td>SYSTEM TABLE</td><td>&lt;NA&gt;</td></tr><tr><td>14</td><td>D\\Formation\\Formation BDD et R\\GARP_Formation.accdb</td><td>&lt;NA&gt;</td><td>MSysRelationships</td><td>SYSTEM TABLE</td><td>&lt;NA&gt;</td></tr><tr><td>15</td><td>D\\Formation\\Formation BDD et R\\GARP_Formation.accdb</td><td>&lt;NA&gt;</td><td>MSysResources</td><td>SYSTEM TABLE</td><td>&lt;NA&gt;</td></tr><tr><td>16</td><td>D\\Formation\\Formation BDD et R\\GARP_Formation.accdb</td><td>&lt;NA&gt;</td><td>Bilan_Parcelles_Feuilles</td><td>TABLE</td><td>&lt;NA&gt;</td></tr><tr><td>17</td><td>D\\Formation\\Formation BDD et R\\GARP_Formation.accdb</td><td>&lt;NA&gt;</td><td>Bilan_Poquet_Feuilles</td><td>TABLE</td><td>&lt;NA&gt;</td></tr><tr><td>18</td><td>D\\Formation\\Formation BDD et R\\GARP_Formation.accdb</td><td>&lt;NA&gt;</td><td>Bilan_Poquet_Pani</td><td>TABLE</td><td>&lt;NA&gt;</td></tr><tr><td>19</td><td>D\\Formation\\Formation BDD et R\\GARP_Formation.accdb</td><td>&lt;NA&gt;</td><td>Date_Phenologique</td><td>TABLE</td><td>&lt;NA&gt;</td></tr><tr><td>20</td><td>D\\Formation\\Formation BDD et R\\GARP_Formation.accdb</td><td>&lt;NA&gt;</td><td>DiagnosticFoliaire</td><td>TABLE</td><td>&lt;NA&gt;</td></tr><tr><td>21</td><td>D\\Formation\\Formation BDD et R\\GARP_Formation.accdb</td><td>&lt;NA&gt;</td><td>DonneesMeteo</td><td>TABLE</td><td>&lt;NA&gt;</td></tr><tr><td>22</td><td>D\\Formation\\Formation BDD et R\\GARP_Formation.accdb</td><td>&lt;NA&gt;</td><td>Extraction</td><td>TABLE</td><td>&lt;NA&gt;</td></tr><tr><td>23</td><td>D\\Formation\\Formation BDD et R\\GARP_Formation.accdb</td><td>&lt;NA&gt;</td><td>FertiSiteAnnee</td><td>TABLE</td><td>&lt;NA&gt;</td></tr></tbody></table>
# Lecture de la base de données

Pour accéder aux informations sur le contenu d'une table, on utilise la fonction `sqlColumns`

> `sqlColumns(MaConnexion, "site")`

<table><thead><tr><th></th><th>TABLE_CAT</th><th>TABLE_SCHEMA</th><th>TABLE_NAME</th><th>COLUMN_NAME</th></tr></thead><tbody><tr><td>1</td><td>D:\\Formation\\Formation</td><td>BDD et R\\GARP_F</td><td>Formation.accdb</td><td>\GARP_F</td></tr><tr><td>2</td><td>D:\\Formation\\Formation</td><td>BDD et R\\GARP_F</td><td>Formation.accdb</td><td>\GARP_F</td></tr><tr><td>3</td><td>D:\\Formation\\Formation</td><td>BDD et R\\GARP_F</td><td>Formation.accdb</td><td>\GARP_F</td></tr><tr><td>4</td><td>D:\\Formation\\Formation</td><td>BDD et R\\GARP_F</td><td>Formation.accdb</td><td>\GARP_F</td></tr></tbody></table><table><thead><tr><th>DATA_TYPE</th><th>TYPE_NAME</th><th>COLUMN_SIZE</th><th>BUFFER_LENGTH</th><th>DECIMAL_DIGITS</th><th>NUM_PRECRadix</th><th>NULLABLE</th><th>REMARKS</th></tr></thead><tbody><tr><td>1</td><td>4</td><td>COUNTER</td><td>10</td><td>4</td><td>0</td><td>10</td><td>0 &lt;NA&gt;</td></tr><tr><td>2</td><td>12</td><td>VARCHAR</td><td>50</td><td>100</td><td>NA</td><td>NA</td><td>1 &lt;NA&gt;</td></tr><tr><td>3</td><td>12</td><td>VARCHAR</td><td>255</td><td>510</td><td>NA</td><td>NA</td><td>1 &lt;NA&gt;</td></tr><tr><td>4</td><td>4</td><td>INTEGER</td><td>10</td><td>4</td><td>0</td><td>10</td><td>1 &lt;NA&gt;</td></tr></tbody></table><table><thead><tr><th>COLUMN_DEF</th><th>SQL_DATA_TYPE</th><th>SQL_DATETIME_SUB</th><th>CHAR_OCTET_LENGTH</th><th>ORDINAL_POSITION</th><th>IS_NULLABLE</th><th>ORDINAL</th></tr></thead><tbody><tr><td>1</td><td>&lt;NA&gt;</td><td>4</td><td>NA</td><td>NA</td><td>1</td><td>NO</td><td>1</td></tr><tr><td>2</td><td>&lt;NA&gt;</td><td>12</td><td>NA</td><td>100</td><td>2</td><td>YES</td><td>2</td></tr><tr><td>3</td><td>&lt;NA&gt;</td><td>12</td><td>NA</td><td>510</td><td>3</td><td>YES</td><td>3</td></tr><tr><td>4</td><td>&lt;NA&gt;</td><td>4</td><td>NA</td><td>NA</td><td>4</td><td>YES</td><td>4</td></tr></tbody></table>

> |
# Lecture de la base de données

Pour importer tout ou partie d'une table dans R sous la forme d'un data.frame, on utilise la fonction sqlFetch

> sqlFetch(MaConnexion, "FertisiteAnnee")

<table><thead><tr><th>numFert</th><th>Fertilisation</th><th>Type</th><th>Caractéristiques</th><th>Annee</th><th>Site</th></tr></thead><tbody><tr><td>1</td><td>F1 fumure de base</td><td>sans azote</td><td>2009-2010</td><td>1</td><td></td></tr><tr><td>2</td><td>F2 fumure de base</td><td>30N + 23N + 23N</td><td>2009-2010</td><td>1</td><td></td></tr><tr><td>3</td><td>Fv fumure de base</td><td>30N + 23N</td><td>2009-2010</td><td>1</td><td></td></tr><tr><td>4</td><td>F1 fumure de base</td><td>sans azote</td><td>2010-2011</td><td>1</td><td></td></tr><tr><td>5</td><td>F2 fumure de base</td><td>30N</td><td>2010-2011</td><td>1</td><td></td></tr><tr><td>6</td><td>Fv fumure de base</td><td>60N + 46N + 46N</td><td>2010-2011</td><td>1</td><td></td></tr><tr><td>7</td><td>F1 fumure de base</td><td>sans azote</td><td>2010-2011</td><td>2</td><td></td></tr><tr><td>8</td><td>F2 fumure de base</td><td>30N + 15N + 15N</td><td>2010-2011</td><td>2</td><td></td></tr><tr><td>9</td><td>Fv fumure de base</td><td>60N + 30N + 30N</td><td>2010-2011</td><td>2</td><td></td></tr><tr><td>10</td><td>F1 fumure de base</td><td>sans azote</td><td>2011-2012</td><td>1</td><td></td></tr><tr><td>11</td><td>F2 fumure de base</td><td>30N + 23N + 23N</td><td>2011-2012</td><td>1</td><td></td></tr><tr><td>12</td><td>Fv fumure de base</td><td>60N + 46N + 46N</td><td>2011-2012</td><td>1</td><td></td></tr><tr><td>13</td><td>F1 fumure de base</td><td>sans azote</td><td>2011-2012</td><td>2</td><td></td></tr><tr><td>14</td><td>F2 fumure de base</td><td>30N + 15N + 15N</td><td>2011-2012</td><td>2</td><td></td></tr><tr><td>15</td><td>Fv fumure de base</td><td>60N + 30N + 30N</td><td>2011-2012</td><td>2</td><td></td></tr><tr><td>16</td><td>F1 fumure de base</td><td>sans azote</td><td>2012-2013</td><td>1</td><td></td></tr><tr><td>17</td><td>F2 fumure de base</td><td>30N + 23N + 23N</td><td>2012-2013</td><td>1</td><td></td></tr><tr><td>18</td><td>Fv fumure de base</td><td>30N + 46N</td><td>2012-2013</td><td>1</td><td></td></tr><tr><td>19</td><td>F1 fumure de base</td><td>sans azote</td><td>2012-2013</td><td>2</td><td></td></tr><tr><td>20</td><td>F2 fumure de base</td><td>30N + 15N + 15N</td><td>2012-2013</td><td>2</td><td></td></tr><tr><td>21</td><td>Fv fumure de base</td><td>30N + 30N</td><td>2012-2013</td><td>2</td><td></td></tr><tr><td>22</td><td>F1 fumure de base</td><td>sans azote</td><td>2013-2014</td><td>1</td><td></td></tr><tr><td>23</td><td>F2 fumure de base</td><td>30N + 23N + 23N</td><td>2013-2014</td><td>1</td><td></td></tr><tr><td>24</td><td>Fv fumure de base</td><td>30N + 46N</td><td>2013-2014</td><td>1</td><td></td></tr><tr><td>25</td><td>Fv fumure de base</td><td>30N + 30N</td><td>2013-2014</td><td>2</td><td></td></tr><tr><td>26</td><td>F1 fumure de base</td><td>sans azote</td><td>2013-2014</td><td>2</td><td></td></tr><tr><td>27</td><td>F2 fumure de base</td><td>30N + 15N + 15N</td><td>2013-2014</td><td>2</td><td></td></tr></tbody></table>
# Lecture de la base de données

> sqlFetch(MaConnexion, "FertisiteAnnee", max=10)

<table><thead><tr><th>numFert</th><th>Fertilisation</th><th>Type</th><th>Caractéristiques</th><th>Annee</th><th>Site</th></tr></thead><tbody><tr><td>1</td><td>1</td><td>F1</td><td>fumure de base</td><td>sans azote</td><td>2009-2010</td><td>1</td></tr><tr><td>2</td><td>2</td><td>F2</td><td>fumure de base</td><td>30N + 23N + 23N</td><td>2009-2010</td><td>1</td></tr><tr><td>3</td><td>3</td><td>Fv</td><td>fumure de base</td><td>30N + 23N</td><td>2009-2010</td><td>1</td></tr><tr><td>4</td><td>4</td><td>F1</td><td>fumure de base</td><td>sans azote</td><td>2010-2011</td><td>1</td></tr><tr><td>5</td><td>5</td><td>F2</td><td>fumure de base</td><td>30N</td><td>2010-2011</td><td>1</td></tr><tr><td>6</td><td>6</td><td>Fv</td><td>fumure de base</td><td>60N + 46N + 46N</td><td>2010-2011</td><td>1</td></tr><tr><td>7</td><td>7</td><td>F1</td><td>fumure de base</td><td>sans azote</td><td>2010-2011</td><td>2</td></tr><tr><td>8</td><td>8</td><td>F2</td><td>fumure de base</td><td>30N + 15N + 15N</td><td>2010-2011</td><td>2</td></tr><tr><td>9</td><td>9</td><td>Fv</td><td>fumure de base</td><td>60N + 30N + 30N</td><td>2010-2011</td><td>2</td></tr><tr><td>10</td><td>10</td><td>F1</td><td>fumure de base</td><td>sans azote</td><td>2011-2012</td><td>1</td></tr></tbody></table>

> sqlFetchMore(MaConnexion, max=10)

<table><thead><tr><th>numFert</th><th>Fertilisation</th><th>Type</th><th>Caractéristiques</th><th>Annee</th><th>Site</th></tr></thead><tbody><tr><td>1</td><td>11</td><td>F2</td><td>fumure de base</td><td>30N + 23N + 23N</td><td>2011-2012</td><td>1</td></tr><tr><td>2</td><td>12</td><td>Fv</td><td>fumure de base</td><td>60N + 46N + 46N</td><td>2011-2012</td><td>1</td></tr><tr><td>3</td><td>13</td><td>F1</td><td>fumure de base</td><td>sans azote</td><td>2011-2012</td><td>2</td></tr><tr><td>4</td><td>14</td><td>F2</td><td>fumure de base</td><td>30N + 15N + 15N</td><td>2011-2012</td><td>2</td></tr><tr><td>5</td><td>15</td><td>Fv</td><td>fumure de base</td><td>60N + 30N + 30N</td><td>2011-2012</td><td>2</td></tr><tr><td>6</td><td>16</td><td>F1</td><td>fumure de base</td><td>sans azote</td><td>2012-2013</td><td>1</td></tr><tr><td>7</td><td>17</td><td>F2</td><td>fumure de base</td><td>30N + 23N + 23N</td><td>2012-2013</td><td>1</td></tr><tr><td>8</td><td>18</td><td>Fv</td><td>fumure de base</td><td>30N + 46N</td><td>2012-2013</td><td>1</td></tr><tr><td>9</td><td>19</td><td>F1</td><td>fumure de base</td><td>sans azote</td><td>2012-2013</td><td>2</td></tr><tr><td>10</td><td>20</td><td>F2</td><td>fumure de base</td><td>30N + 15N + 15N</td><td>2012-2013</td><td>2</td></tr></tbody></table>
Exécution d'une requête SQL

Les requêtes SQL s'exécute à l'aide de la fonction sqlQuery

> ResultatMaRequete <- sqlQuery(MaConnexion, "MaRequete")

« MaRequete » est une **chaîne de caractères**.

Le résultat de la requête est renvoyé sous forme d'un data.frame
(ici appelé ResultatMaRequete)