Les données en table

Les données en table#

Les données d’un tableau peuvent être stockées dans une table enregistrée dans un fichier. Avec un programme Python qui a accès au fichier, les données de la table sont mémorisées sous forme de liste ou de dictionnaire pour y être traitées.

On donne quelques éléments de vocabulaire concernant les tables:

  • un tuple ou enregistrement est composé de plusieurs informations distinctes appartenant à un même objet, entité ou élément. Pour faire simple, cela correspond à une ligne du tableau.

  • un attribut est une information élémentaire appartenant à un enregistrement. Là aussi, pour simplifier, les attributs correspondent aux intitulés des colonnes.

  • un attribut atomique est un attribut qui ne contient qu’une seule information.

  • chaque attribut possède un type que l’on retrouve en programmation: nombre entier ou flottant, chaine de caractères, booléen, etc.

  • le domaine d’un attribut donné correspond à un ensemble (fini ou infini) de valeurs admissibles.

On a répertorié dans une table les livres d’un amateur de romans.

Titre

nom_auteur

prénom_auteur

naissance_auteur

langue

année_publication

genre

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”, “économie”]

Le meilleur des mondes

Huxley

Aldous

1894

anglais

1931

[“totalitarisme”, “science-fiction”, “dystopie”]

Farenheit 451

Bradbury

Ray

1920

anglais

1953

[“science-fiction”, “dystopie”]

Ubik

K Dick

Philip

1928

anglais

1969

[“science-fiction”, “anticipation”]

Chroniques martiennes

Bradbury

Ray

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

français

1963

[“science-fiction”, “dystopie”]

Ravage

Barjavel

René

1911

français

1943

[“dystopie”, “uchronie”]

Le monde des A

Van Vogt

Alfred Elton

1912

anglais

1945

[“science-fiction”, “intelligence artificielle”]

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”]

La machine à explorer le temps

Wells

Herbert George

1866

anglais

1895

[“science-fiction”, “voyage dans le temps”]

Traitement en Python#

On a rassemblé dans un fichier Python les romans de science-fiction. La table de données est enregistrée dans la variable biblio. Pour traiter les données de cette table en Python, il est nécessaire d’effectuer un import de celle-ci.

from bibliotheque import biblio
    1. Quel est le type Python utilisé pour cette table ?

    2. Quel est le type Python utilisé pour chaque enregistrement de la table ?

    3. Comment sont représentés en Python les attributs de cette table ?

  1. Écrire un script python qui affiche tous les titres de roman de cette table.

  2. Écrire en Python, un script qui affiche les romans d’Isaac Asimov.

  3. Écrire en Python, un script qui affiche tous les romans d’anticipation.

Le modèle relationnel#

Le regroupement dans une unique table de l’ensemble des enregistrements posent un certain nombres d’inconvénients pour le traitement des données :

  • la répétition de certaines informations (attribut auteur)

  • la multiplicité des valeurs pour l’attribut genre.

  • la recherche d’une information dans la table nécessite de parcourir toute la table pour obtenir, éventuellement, un ou plusieurs résultats.

  • les données de la table sont enregistrées dans un fichier. L’accès à ce fichier peut soulever de nombreux problèmes comme les accès concurrents (un seul utilisateur à la fois) et les droits d’accès au fichier en lecture et écriture.

  • comment garantir que l’ajout d’un enregistrement n’est pas un doublon d’un enregistrement existant!

  • la taille du fichier contenant la table à charger en mémoire.

Il existe un modèle de données qui palie à ces inconvénients: le modèle relationnel. Ce modèle repose sur une architecture client-serveur et sur des logiciels (SGBD) qui vont gérer les données imposant des règles exposées ci-après.

Le principe de base du modèle relationnel est le suivant :

  • séparer les données dans plusieurs tables appelées relations:

    • chaque relation contient des données relatives à un même sujet

    • chaque relation évite la redondance des données

    • dans une relation, chaque attribut ne contient qu’une seule information

  • joindre les relations entre elles par l’utilisation de clés:

    • des clés primaires qui sont des valeurs qui permettent d’identifier un enregistrement de manière unique

    • des clés étrangères qui référencent une clé primaire d’une autre relation

  1. Quel est le nombre de relations à créer pour modéliser notre table ? Donner les attributs de chaque relation.

  2. On représente ce modèle relationnel par le schéma suivant:

    image
    1. Compléter les relations avec leurs attributs respectifs.

    2. Dans la relation livre, le titre peut-il constituer une clef primaire ? Et si on y ajoute l’année de publication ?

      • Si on identifie chaque titre par un nombre entier, cela peut-il être une clef primaire ? Si oui, à quelle condition ?

      • Dans la relation auteur, les attributs nom et prénom peuvent-ils constituer une clef primaire ? Justifier.

      • Compléter la relation langue en y ajoutant la clef primaire id_langue puis compléter la relation genre.

  3. Il faut joindre les relations pour retrouver l’intégralité des informations sur chaque roman. Par exemple, pour connaitre la langue d’écriture d’un roman, il faut ajouter dans la relation livre la clef primaire de la relation langue. Ce nouvel attribut peut avoir le même nom que la clef primaire de la relation langue qui devient alors une clef étrangère de la relation livre.

    On symbolise la jointure par une flèche reliant la relation livre vers la relation langue. Effectuer, sur le schéma relationnel, les jointures entre les différentes relations.

  4. Quel est le problème rencontré pour joindre la relation livre avec la relation genre?

  5. Pour remédier à la jointure entre les relations livre et genre, on crée une nouvelle relation livre_par_genre qui contient les clefs primaires des relations livre et genre.

    1. Quelle est la clef primaire de cette relation ?

    2. Compléter le schéma relationnel.

  6. Construire et compléter les cinq relations avec les différents romans de la table initiale.