Exemple pratique

On considère la table suivante :

titre nom_auteur prenom_auteur date_nai_auteur langue ann_publi thèmes
1984 Orwell George 1903 anglais 1949 Totalitarisme, science-fiction, anticipation, Dystopie
Dune Herbert Frank 1920 anglais 1965 science-fiction, anticipation
Fondation Asimov Isaac 1920 anglais 1951 science-fiction, Economie
Le meilleur des mondes Huxley Aldous 1894 anglais 1931 Totalitarisme, science fiction, dystopie
Fahrenheit 451 Bradbury Ray 1920 anglais 1953 science-fiction, Dystopie
Ubik K. Dick Philip 1928 anglais 1969 science-fiction, anticipation
Chroniques martiennes Bradbury Rey 1920 anglais 1950 science-fiction, anticipation
La nuit des temps Barjavel René 1911 français 1968 science-fiction, tragédie
Blade runner K Dick Philip 1928 anglais 1968 Intelligence artificielle, science fiction
Les robots Asimov Isaac 1920 anglais 1950 science fiction, Intelligence artificielle
La planète des singes Boulle Pierre 1912 francais 1963 science fiction, Dystopie
Ravage Barjavel René 1911 français 1943 Science-Fiction, anticipation
Le maître du haut chateau K.Dick Philip 1928 anglais 1962 Dystopie, Uchronie
Le monde des A Van Vogt Alfred Elton 1912 anglais 1945 science fiction, IA
La fin de l'éternité Asimov Isaac 1920 anglais 1955 science-fiction, voyage dans le temps
De la Terre à la Lune Verne Jules 1828 français 1865 Science-Fiction, aventure

Imaginez quels problèmes peuvent se poser si on cherche à mettre en place un traitement automatisé pour les données de cette table.

Quelles solutions imaginer pour y remédier ?

Le modèle relationnel

Un des modèles de données le plus courant est le modèle relationnel. Les principes de base de ce modèles sont les suivants :

  • séparer les données dans plusieurs tables
    • chaque table contient des données relatives à un même sujet
    • éviter la redondance des données
    • ne pas stocker des données qui peuvent être calculées (exemple : une ligne Total)
    • chaque champ ne contient qu'une seule information
  • mettre les tables en relation par l'utilisation de clés
    • clés primaires : leurs valeurs (souvent des entiers) permettent d'identifier une donnée de manière unique
    • clés étrangères : référencent une clé primaire d'une autre table

Quelques éléments de vocabulaire

  • un enregistrement est composé de plusieurs informations distinctes appartenant à un même objet ou une même entité. Pour faire simple, cela correspond à une ligne du tableau.
  • un attribut est une information élémentaire appartenant à un enregistrement. Les attributs se voient ici sur les intitulés de colonne.
  • un attribut atomique est un attribut ne contenant qu'une seule information.
  • Chaque attribut possède un type : le titre est du type chaîne de caractères et la note est du type entier.
  • Le domaine d'un attribut donné correspond à un ensemble (fini ou infini) de valeurs admissibles. Le domaine pour note est l'ensemble des entiers de 0 à 10.

A vous de jouer

  1. Combien notre table possède t-elle d'enregistrements ?
  2. Quels sont tous les attributs de la table ?
  3. Citez un attribut atomique et un attribut non atomique.
  4. Pour chaque attribut, précisez le type et le domaine.

Construire une structure optimisée

Identifiez les éléments de la table qui sont en contradiciton avec les principes du modèle relationnel énoncés ci-dessus.

Vous avez identifié plusieurs problèmes liés à cette table qui transgressent les règles du modèle relationnel que nous avons d'énoncé. Vous allez à présent redistribuer ces données dans 4 tables :

  • une table Livres
  • une table Auteurs
  • une table Themes
  • une table Langues
  1. Quels attributs proposez-vous pour chacune des tables
  2. Comment peut-on connaître l'auteur de 1984 et les thèmes abordés ?
  3. Dans la table Livres, quelle est la clé primaire ? quelles sont les clés étrangères ?
  4. Dans la table Auteurs, l'attribut date de naissance est-il une clé primaire ?
  5. Quel peut être l'intérêt de mettre la langue dans une table langues ? Quel problème dans la table de départ cela résout-il ?

En conclusion

On retiendra les principes généraux pour regrouper les données en plusieurs tables :

  • Mettre dans une même table les données relatives à un même sujet
  • Chaque attribut ne contient qu'une seule valeur
  • Créer une clé primaire pour chaque table
  • Créer de nouvelles tables pour
    • éviter la redondance des données
    • limiter les incohérences lors des mises à jour
    • faciliter le traitement des données

A vous de jouer

Structurer des données

On considère la table Films suivante :

Titre Annee Realisateur Note NbAavis Duree Type
Apocalypse Now 1979 Francis Ford Coppola 8,4 578150 2h27 Drama, Mystery, War
Full Metal Jacket 1987 Stanley Kubrick 8,3 644089 1h56 Drama, War
Scarface 1983 Brian De Palma 8,3 704025 170 min Crime, Drama
Orange mécanique 1971 S. Kubrick 8,3 725846 136' Crime, Drama, Sci-Fi
2001, l'odyssée de l'espace 1968 Kubrick 8,3 574171 2h29 Adventure, Science fiction
Taxi Driver 1976 Martin Scorsese 8,3 685042 1h54 Crime, Drama

source https://www.imdb.com

  1. Proposer une structure conforme au modèle relationnel pour ces données.
  2. Donner le contenu de chacune des tables.

Récupérer des données dans un modèle relationnel

IdClient Nom Adresse Mail
1 Jean Bon 2 rue Jean Mermoz - Caen jean.bon@free.fr
2 Alain Térieur 3 rue Paul Eluard - Hérouville alain.terieur4@hotmail.com
3 Thérèse Etroit 16 rue de la porte - Mondeville therese.etroit@orange.fr
4 Gilles Héjone 1 place de la bastille - Bénouville gilledu14@sfr.fr
5 Hélène de Troie 2 rue Néper - Caen ln23@laposte.net

extrait Table Clients

IdProduit CodeProduit NomProduit Prix Stock
1 12x24F gel hydroalcoolique 100ml 3.21 2
2 21s53R masque FFP2 x100 10,57 3
3 97D74S visière de protection 0.50 10
4 10F36A désinfectant indistriel 10L 53,25 5

extrait Table Produits

IdCmd IdClient IdProduit Quantite Expedie
1 4 1 1 1
2 2 2 2 0
3 1 1 1 1
4 3 3 4 0
5 1 4 3 0

extrait Table Commandes pour un jour J

  1. Dans la table Commandes quelles est la clé primaire ? quelles sont les clés étrangères ?
  2. A combien s'élève le montant total des commandes de la journée J
  3. Quels sont les noms des clients pour lesquels la commande a été expédiée ?
  4. Quels sont les produits pour lesquels le stock ne sera pas suffisant ?