Fiche de révision

Vocabulaire des bases de données


Nous allons montrer les limites de la représentation d'informations complexes dans des structures de données plates et introduire le vocabulaire des schémas relationnels.

ILimites des structures plates

1 Exemple : représentation d'un jeu multi-joueurs

Dans un jeu multi-joueurs, chaque joueur possède un pseudonyme, appartient à un peuple et à une alliance. Il dirige par ailleurs un ou plusieurs villages, qui ont chacun un nom qu'il choisit ; ces villages possèdent, entre autres choses, une certaine population et ont des coordonnées spatiales.

Une représentation en Python pourrait consister en un dictionnaire où les clés sont les joueurs et leurs valeurs associées sont une liste contenant leur peuple, leur alliance et une liste de villages, ceux-ci étant eux-mêmes codés par une liste. Par exemple :

Tableau de 5 lignes, 2 colonnes ;Corps du tableau de 5 lignes ;Ligne 1 : ; Jeu = {'Astérix': ['Gaulois', 'Formidables', [['Le Village', 57,; Ligne 2 : ;     (34, 22)], ['Autre Village', 123, (36, 23)]]], ; Ligne 3 : ;     'Obélix': ['Gaulois', 'Formidables', [['Le Village', 161,; Ligne 4 : ;     (38, 28)]]],; Ligne 5 : ;     'César': ['Romain', 'Pax', [['Rome', 1668, (151, 12)]]]};

2 Les limites de la représentation

Le choix de cette représentation n'est pas anodin : il est facile de déterminer l'alliance à laquelle appartient un joueur ou la population totale des villages qu'il contrôle :

Tableau de 5 lignes, 2 colonnes ;Corps du tableau de 5 lignes ;Ligne 1 : ; def alliance_joueur(jeu, j):; Ligne 2 : ;     return jeu[j][1]; Ligne 3 : ; ; Ligne 4 : ; def population_joueur(jeu, j):; Ligne 5 : ;     return sum([village[1] for village in jeu[j][2]]);

Cependant, il est plus malaisé d'extraire certaines informations comme la population totale des villages contrôlés par un peuple :

Tableau de 6 lignes, 2 colonnes ;Corps du tableau de 6 lignes ;Ligne 1 : ; def population_peuple(jeu, p):; Ligne 2 : ;     s = 0; Ligne 3 : ;     for joueur in jeu.values():; Ligne 4 : ;         if joueur[0] == p:; Ligne 5 : ;             s += sum([village[1] for village in joueur[2]]); Ligne 6 : ;     return s;

Dans cette représentation de données, dite plate, une appartenance est privilégiée par rapport aux autres (l'appartenance à une alliance, à un peuple, à un joueur, etc.).

Or, on peut être amené à effectuer des recherches indépendamment de tout lien. Un nouveau modèle s'avère donc nécessaire dans lequel les données sont représentées dans plusieurs tables, sans hiérarchie particulière, et liées entre elles.

IIVocabulaire des schémas relationnels

Un attribut est un couple (nom, domaine) où le nom (représentant un titre de colonne) prend ses valeurs dans un domaine.

Un domaine est donc un ensemble de valeurs que peut prendre une donnée, à rapprocher de la notion de type en Python, par exemple des entiers (ensemble noté N), des chaînes de caractères (noté S), des dates (noté D), des booléens (noté B), etc.

On appelle schéma d'une relation un ensemble ordonné d'attributs de la forme S=(A1, A2, , An), où les Ai sont des attributs deux à deux distincts, le schéma précisant en général les domaines de chaque attribut.

Une table, ou relation, de schéma S=(A1, A2, , An) est un ensemble fini de n-uplets (x1, , xn) où les xi prennent leurs valeurs dans Ai.

Les éléments d'une table R sont appelés les enregistrements de la relation. Leur nombre (fini) est appelé le cardinal de R et est noté #R.

IIIExemple de schéma

Représentons quelques données relatives aux élèves d'une classe de Terminale.

Tableau de 4 lignes, 5 colonnes ;Corps du tableau de 4 lignes ;Ligne 1 : Nom; Prénom; Date_de_naissance; Spé1; Spé2; Ligne 2 : Garcin; Catherine; 13/01/2002; Maths; PC; Ligne 3 : Thy; Jean; 11/08/2001; Maths; NSI; Ligne 4 : Garcin; Jean; 11/08/2001; NSI; PC;

Le schéma de cette relation est :

Tableau de 1 lignes, 2 colonnes ;Corps du tableau de 1 lignes ;Ligne 1 : ; ((Nom, S), (Prénom, S), (Date_de_naissance, D), (Spé1, S), (Spé2, S));

Il est indépendant de la notion de relation qui lui est associée, qui est représentée par une table (on parlera indifféremment de relation ou de table dans la suite).

La relation R comporte 3 enregistrements (ou valeurs), on a donc #R = 3.

Mot clé

Lorsqu'une base de données comporte plusieurs tables, l'ensemble des schémas de ces relations s'appelle le schéma relationnel de la base de données.

Pour lire la suite

Je m'abonne

Et j'accède à l'ensemble
des contenus du site