Qu'est-ce qu'une base de données ?

Par Boris Delange | 15.10.2024

Dans cet article, nous allons :

  • Définir ce qu'est une base de données en partant d'une analogie avec Excel
  • Evoquer les principes de conception qui permettent de créer une base de données
  • Aborder les notions de tables, de jointures et de schémas
  • Aborder le SQL, ce langage de programmation qui permet de requêter les bases de données

Principes de conception

Une base de données (BDD) est comme un grand tableur Excel, où chaque feuille représente une table.

Tout l’enjeu d’une base de données est :

  • d’éviter les redondances des données, pour prendre moins d’espace
  • de contenir le moins de cases vides possibles, toujours pour occuper moins d’espace
  • d’être le plus flexible possible, pour pouvoir ajouter de nouvelles données que l’on n’avait pas prévues initialement

Structurer les données en tables

Comment feriez-vous pour stocker dans un tableur Excel les données de biologie et les données démographiques de 5 patients ?


Mettons que l’on ait besoin de stocker le taux d’hémoglobine, les plaquettes et les leucocytes.

Le premier réflexe qui vient à l’esprit est de créer une colonne par paramètre de biologie.

Nous ajoutons une colonne date_biologie pour connaître la date de réalisation du prélèvement biologique.


patient_id age sexe date_admission date_sortie date_biologie hémoglobine plaquettes leucocytes
1 45 M 2024-10-01 2024-10-10 2024-10-03 13.5 / /
1 45 M 2024-10-01 2024-10-10 2024-10-04 / 150,000 7,200
2 60 F 2024-09-25 2024-10-05 2024-09-26 12.8 180,000 8,000
3 38 F 2024-10-05 2024-10-12 2024-10-07 14.0 220,000 /
3 38 F 2024-10-05 2024-10-12 2024-10-08 / / 6,500
4 52 M 2024-09-20 2024-09-30 2024-09-21 11.5 140,000 9,500
5 29 F 2024-10-08 2024-10-15 2024-10-09 13.2 170,000 7,800
5 29 F 2024-10-16 2024-10-20 2024-10-16 14.2 / /

Comment lire ce tableau ?


Le patient 1 a un seul séjour (une seule date_admission) et deux dosages biologiques à deux dates différentes durant ce même séjour (deux valeurs pour date_biologie).

Le patient 5 a deux séjours (deux valeurs pour date_admission), avec une biologie prélevée par séjour (deux valeurs différentes de date_biologie).

Nous pouvons remarquer deux choses :

  • Il existe une redondance des données démographiques (âge, sexe, dates d'admission et de sortie)
  • Nous avons dû créer une ligne par date de prélèvement biologique, ce qui fait que nous avons des cases vides aux dates où certaines biologies n'ont pas été réalisées


Si l’on revient à nos trois principes de conception (éviter les redondances, moins de cases vides et flexibilité), il semblerait que l’on puisse faire mieux.

Pourquoi ne pas créer une table (ou une feuille Excel pour continuer avec l’analogie) pour les patients ?


patient_id age sexe
1 45 M
2 60 F
3 38 F
4 52 M
5 29 F

On gagne ainsi de la place avec 3 lignes en moins.

Pourquoi ne pas avoir intégré les séjours dans cette table ?


Si on avait intégré les séjours dans cette table (avec les colonnes date_admission et date_sortie), nous aurions certes eu une seule ligne pour les patients 1 à 4, mais deux lignes pour le patient 5, qui a deux séjours différents.


Toujours dans une logique de diminuer le nombre de lignes, on préférera créer une table pour les séjours.

patient_id admission_id date_admission date_sortie
1 1 2024-10-01 2024-10-10
2 2 2024-09-25 2024-10-05
3 3 2024-10-05 2024-10-12
4 4 2024-09-20 2024-09-30
5 5 2024-10-08 2024-10-15
5 6 2024-10-16 2024-10-20

Pour finir, nous allons créer une table pour stocker les données de biologie.

patient_id admission_id date_biologie hémoglobine plaquettes leucocytes
1 1 2024-10-03 13.5 / /
1 1 2024-10-04 / 150,000 7,200
2 2 2024-09-26 12.8 180,000 8,000
3 3 2024-10-07 14.0 220,000 /
3 3 2024-10-07 / / 6,500
4 4 2024-09-21 11.5 140,000 9,500
5 5 2024-10-09 13.2 170,000 7,800
5 6 2024-10-16 14.2 / /

OK, mais ici nous avons encore des cases vides, nous pourrions optimiser.


La solution est de créer une colonne pour le nom du paramètre biologique, et une colonne pour sa valeur. Ainsi, plus de case vide !

patient_id admission_id date_biologie paramètre valeur
1 1 2024-10-03 hémoglobine 13.5
1 1 2024-10-04 plaquettes 150,000
1 1 2024-10-04 leucocytes 7,200
2 2 2024-09-26 hémoglobine 12.8
2 2 2024-09-26 plaquettes 180,000
2 2 2024-09-26 leucocytes 8,000
3 3 2024-10-07 hémoglobine 14.0
3 3 2024-10-07 plaquettes 220,000
3 3 2024-10-07 leucocytes 6,500
4 4 2024-09-21 hémoglobine 11.5
4 4 2024-09-21 plaquettes 140,000
4 4 2024-09-21 leucocytes 9,500
5 5 2024-10-09 hémoglobine 13.2
5 5 2024-10-09 plaquettes 170,000
5 5 2024-10-09 leucocytes 7,800
5 6 2024-10-16 hémoglobine 14.2

Nous venons de créer une base de données !


Alors certes, cela peut paraître moins lisible au premier abord, mais quand on a des millions de données, il est nécessaire d’optimiser leur stockage.

Et vous le verrez si vous faites un peu de programmation, cette manière d’organiser les données est finalement bien plus lisible qu’un fichier Excel à 50, 100 colonnes…

Jointures

Les données sont maintenant éparpillées sur plusieurs tables.

Comment les fusionner de nouveau ?


Si l’on veut fusionner plusieurs tables, on fera ce que l’on appelle une jointure.

Par exemple, si on fait une jointure entre les tables patients et séjours, en faisant une correspondance sur la colonne patient_id, nous obtiendrons cette table :

patient_id age sexe admission_id date_admission date_sortie
1 45 M 1 2024-10-01 2024-10-10
2 60 F 2 2024-09-25 2024-10-05
3 38 F 3 2024-10-05 2024-10-12
4 52 M 4 2024-09-20 2024-09-30
5 29 F 5 2024-10-08 2024-10-15
5 29 F 6 2024-10-16 2024-10-20

On pourra joindre les données de la table biologie de la même façon, et obtenir le tableau du début de l’article.

Requêter une base de données

Il existe un langage de programmation qui permet spécifiquement de requêter les bases de données.

Ce langage se nomme SQL, pour Structured Query Language.

C’est un langage assez simple et facile d’accès.

Il se compose de quelques mots clefs qui permettent d’obtenir les données que l’on veut, dont (non exhaustif) :

  • SELECT : vous choisissez les colonnes que vous voulez garder
  • FROM : de quelle table seront extraites les données ?
  • WHERE : quels filtres appliquer sur les données ?

Par exemple :

SELECT patient_id, age, sexe
FROM patients
WHERE age > 45

On sélectionne les colonnes patient_id, age, sexe de la table patients où la valeur de la colonne age est supérieur à la valeur 45.

On a le résultat suivant :

patient_id age sexe
2 60 F
4 52 M

Schémas de BDD

Ce que l’on appelle un schéma de base de données est la structure des tables qui composent une base de données.

Il spécifie :

  • le nom des tables
  • le nom des colonnes de chaque table
  • le type de données de chaque colonne (si la colonne doit comprendre des données de type texte ou numérique par exemple)

Par exemple, OMOP est un schéma de BDD spécialisée dans les données de santé.

Le schéma de données du modèle OMOP

Cette base est assez complexe, ce qui est nécessaire pour englober toutes les données de santé.

De même que nous l’avons fait plus haut, vous pouvez retrouver la table person qui correspond aux patients et la table visit_detail qui correspond aux séjours.

Conclusion

Les points à retenir :

  • Une base de données est un ensemble de tables avec un schéma particulier (noms des colonnes et type des données)
  • Les schémas des bases sont contruits selon des principes : éviter les redondances, optimiser l'espace et permettre la flexibilité
  • Les tables peuvent être liées entre-elles à l'aide de jointures
  • Le SQL est un langage de programmation permettant de requêter les bases de données

Pour aller plus loin :

Dernière modification 17.10.2024: Update articles (ae96e9e)