Comprendre le modèle relationnel en DB
Comprendre le modèle relationnel en DB
Qu’est-ce donc que ce fameux « modèle relationnel »? En bref, c’est un ensemble de résultats
scientifiques, qui ont en commun de s’appuyer sur une représentation tabulaire des données.
Beaucoup de ces résultats ont débouché sur des mises en œuvre pratique. Ils concernent
essentiellement deux problématiques complémentaires:
Supports complémentaires:
Dans le contexte des bases de données, les objets auxquels on s’intéresse sont des valeurs
élémentaires comme les entiers
, les réels (ou plus précisément les nombres en virgule flottante puisqu’on ne sait pas
représenter une précision infinie) , les chaînes de caractères
, les dates, etc. La notion de valeur élémentaire s’oppose à celle de valeur structurée: il n’est
pas possible en relationnel de placer dans une cellule un graphe, une liste, un enregistrement.
On introduit de plus une restriction importante: les relations sont finies (on ne peut pas
représenter en extension un ensemble infini avec une machine).
L’ensemble des paires constituées des noms de département et et de leur numéro de code est
par exemple une relation en base de données: c’est un ensemble fini, sous-ensemble du
produit cartésien
, , est un sous-ensemble fini du produit cartésien , qui lui même s’obtient par
Définition: relation
Une relation est un objet abstrait, on peut la représenter de différentes manières. Une
représentation naturelle est le graphe comme le montre la Fig. 5. Une autre structure possible
est la table, qui s’avère beaucoup plus pratique quand la relation n’est plus binaire mais
ternaire et au-delà.
nom code
Ardèche 07
Gard 30
Manche 50
Paris 75
Dans une base relationnelle, on utilise toujours la représentation d’une relation sous forme de
table. À partir de maintenant nous pourrons nous permettre d’utiliser les deux termes comme
synonymes.
Les nuplets
. Dans la représentation par table, un nuplet est une ligne. Là encore nous assimilerons les
deux termes, en privilégiant toutefois nuplet qui indique plus précisément la structure
constituée d’une liste de valeurs.
L’ordre des nuplets est indifférent car il n’y a pas d’ordre dans un ensemble;
conséquence pratique: le résultat d’une requête appliquée à une relation ne
dépend pas de l’ordre des lignes dans la relation.
On ne peut pas trouver deux fois le même nuplet car il n’y a pas de doublons
dans un ensemble.
Il n’y a pas (en théorie) de « cellule vide » dans la relation; toutes les valeurs
de tous les attributs de chaque nuplet sont toujours connues.
Dans la pratique les choses sont un peu différentes pour les doublons et les cellules vides,
comme nous le verrons
Le schéma
Et, finalement, on notera qu’aussi bien la représentation par graphe que celle par table
incluent un nommage de chaque dimension (le nom du département, son code, dans notre
exemple). Ce nommage n’est pas strictement indispensable (on pourrait utiliser la position par
exemple), mais s’avère très pratique et sera donc utilisé systématiquement.
1. Le nom de la relation.
2. Un nom (distinct) pour chaque dimension, dit nom d’attribut, noté
.
Le domaine de valeur (type) de chaque dimension, noté
3. .
sont distincts, mais on peut bien entendu utiliser plusieurs fois le même type. Le schéma de
notre table des départements est donc Département (nom: string, code:
string). Le domaine de valeur ayant relativement peu d’importance, on pourra souvent
l’omettre et écrire le schéma Département (nom, code). Il est d’aileurs relativement
facile de changer le type d’un attribut sur une base existante.
.
, les
La structure utilisée pour représenter les données est donc extrêmement simple. Il faut insister
sur le fait que les valeurs des attributs, celles que l’on trouve dans chaque cellule de la table,
sont élémentaires: entiers, chaînes de caractères, etc. On ne peut pas avoir une valeur
d’attribut qui soit un tant soit peu construite, comme par exemple une liste, ou une sous-
relation. Les valeurs dans une base de données sont dites atomiques (pour signifier qu’elles
sont non-décomposables, rien de toxique à priori). Cette contrainte conditionne tous les autres
aspects du modèle relationnel, et notamment la conception, et l’interrogation.
Une base bien formée suit des règles dites de normalisation. La forme normale minimale est
définie ci-dessous.
Une relation est en première forme normale si toutes les valeurs d’attribut sont connues et
atomiques et si elle ne contient aucun doublon.
On considère pour l’instant que toutes les valeurs d’un nuplet sont connues. En pratique, c’est
une contrainte trop forte que l’on sera amené à lever avec SQL, au prix de quelques difficultés
supplémentaires.
En première approche, une relation est simplement un ensemble de nuplets. On peut donc lui
appliquer des opérations ensemblistes: intersection, union, produit cartésien, projection, etc.
Cette vision se soucie peu de la signification de ce qui est représenté, et peut mener à des
manipulations dont la finalité reste obscure. Ce n’est pas forcément le meilleur choix pour un
utilisateur humain, mais ça l’est pour un système qui ne se soucie que de la description
opérationnelle.
Dans une seconde approche, plus « sémantique », une relation est un mécanisme permettant
d’énoncer des faits sur le monde réel. Chaque nuplet correspond à un tel énoncé. Si un nuplet
est présent dans la relation, le fait est considéré comme vrai, sinon il est faux.
La table des départements sera ainsi interprétée comme un ensemble d’énoncés: « Le
département de l’Ardèche a pour code 07 », « Le département du Gard a pour code 30 », et
ainsi de suite. Si un nuplet, par exemple, (Gers 32), n’est pas dans la base, on considère
que l’énoncé « Le département du Gers a pour code 32 » est faux.
Cette approche mène directement à une manipulation des données fondée sur des
raisonnements s’appuyant sur les valeurs de vérité énoncées par les faits de la base. On a alors
recours à la logique formelle pour exprimer ces raisonnements de manière rigoureuse. Dans
cette approche, qui est à la base de SQL, interroger une base, c’est déduire un ensemble de
faits qui satisfont un énoncé logique (une « formule »). Selon ce point de vue, SQL est un
langage pour écrire des formules logiques, et un système relationnel est (entre autres) une
machine qui effectue des démonstrations.
Quiz
A. é
éééé
Nous avons vu que l’ordre des nuplets dans une relation ne compte pas. Qu’est-ce que cela
implique pour le langage d’interrogation?
A. Il compte car sinon on ne saurait pas, par exemple, comparer les valeurs de
deux nuplets.
B. Il n’a aucune importance car les colonnes sont nommées et toutes les
opérations sur les nuplets sont donc possibles.
Supports complémentaires:
Diapositives: clés/dépendances
Vidéo sur les clés/dépendances
Comme nous l’avons vu ci-dessus, le schéma d’une relation consiste – pour l’essentiel – en un
nom (de relation) et un ensemble de noms d’attributs. On pourrait naïvement penser qu’il
suffit de créer une unique relation et de tout mettre dedans pour avoir une base de données. En
fait, une telle approche est inapplicable et il est indispensable de créer plusieurs relations,
associées les unes aux autres.
Le schéma d’une base de données est donc constitué d’un ensemble de schéma de relations.
Pourquoi en arrive-t-on là et quels sont les problèmes que l’on souhaite éviter? C’est ce que
nous étudions dans cette session. La notion centrale introduite ici est celle de clé d’une
relation.
Voici un exemple de schéma, avec une notation très simplifiée, que nous allons utiliser pour
discuter de la notion centrale de « bon » et « mauvais » schéma. On veut créer une base de
données représentant des films, avec des informations comme le titre, l’année, le metteur en
scène, etc. On part d’un schéma rassemblant ces informations dans une unique table:
Même pour une information aussi simple, il est facile d’énumérer tout un ensemble de
problèmes potentiels. Tous ou presque découlent d’un grave défaut de la table ci-dessus : il
est possible de représenter la même information plusieurs fois, ou, pour employer un mot que
nous retrouverons souvent, il y a redondance de l’information.
Rien n’empêche de représenter plusieurs fois le même film. Pire : il est possible d’insérer
plusieurs fois le film Vertigo en le décrivant à chaque fois de manière différente, par exemple
en lui attribuant une fois comme réalisateur Alfred Hitchcock, puis une autre fois John Woo,
etc.
La bonne question consiste d’ailleurs à se demander ce qui distingue deux films l’un de
l’autre, et à quel moment on peut dire que la même information a été répétée. Peut-il y avoir
deux films différents avec le même titre par exemple ? Si la réponse est non (?), alors on
devrait pouvoir assurer qu’il n’y a pas deux lignes dans la table avec la même valeur pour
l’attribut titre. Si la réponse est oui (ce qui semble raisonnable), il reste à déterminer quel est
l’ensemble des attributs qui permet de caractériser de manière unique un film ou, à défaut, de
créer un tel identifiant artificiellement. C’est une notion centrale et délicate sur laquelle nous
revenons de manière approfondie ultérieurement.
Autre anomalie liées aux insertions: on ne peut pas insérer un film si on ne connaît pas son
metteur en scène et réciproquement.
On ne peut pas supprimer un film sans supprimer du même coup son metteur en scène. Si on
souhaite, par exemple, ne plus voir le film Titanic figurer dans la base de données, on va
effacer du même coup les informations sur James Cameron.
Schémas normalisés
Que déduire de ce qui précède ? Tout d’abord qu’il existe des schémas avec de bonnes
propriétés, et d’autres qui souffrent de défauts de conception, lesquels entraînent de sérieux
problèmes de gestion de la base. Ensuite, que nous avons besoin d’aller plus loin qu’une
simple énumération d’attributs et énoncer des contraintes et des règles qui nous indiquent
plus précisément les liens qui caractérisent les données.
Le modèle relationnel nous propose un outil précieux pour répondre à ces questions: la
normalisation. Un schéma normalisé présente des caractéristiques formelles qu’il est possible
d’évaluer. La normalisation nous garantit l’absence de défaut (et notamment de redondance)
tout en préservant l’intégralité de l’information représentée.
La théorie du modèle relationnel a développé une construction formelle solide pour qualifier
les propriétés d’un schéma d’une part, et décomposer un schéma dénormalisé en schéma
normalisé d’autre part. Le premier, détaillé ci-dessous, donne un éclairage très précis sur ce
qu’est un bon schéma relationnel. Le second aspect fait l’objet du chapitre Conception d’une
base de données.
Le principal concept est celui de dépendance fonctionnelle, qui fournit une construction de
base pour élaborer les contraintes dont nous avons besoin pour caractériser nos données et
leurs liens. Il s’énonce comme suit.
é
J’ai donc considéré que la connaisance d’une adresse électronique détermine la connaissance
des valeurs des autres attributs, et de même pour le numéro de sécurité sociale.
Note
La notation
La connaissance d’un étudiant, d’un cours et d’une année détermine la note obtenue et le titre
du cours.
Prenons quelques exemples. Le tableau suivant montre une relation R(A1, A2, A3, A4).
A1 A2 A3 A4
1 2 3 4
1 2 3 5
6 7 8 2
2 1 3 4
Certaines propriétés fondamentales des DFs (les axiomes d’Armstrong) sont importantes à
connaître.
Axiomes d’Armstrong
Réflexivité: si
, alors . C’est une propriété assez triviale: si je connais , alors je connais toute partie de
.
Augmentation: si
, alors pour tout . Là aussi, c’est assez trivial: si la connaissance de détermine , alors la
connaissance d’un sur-ensemble de détermine à plus forte raison
.
Transitivité: si
Nous avons ici l’illustration d’une dépendance fonctionnelle obtenue par transitivité. En effet,
on peut admettre la dépendance suivante:
Les dépendances fonctionnelles fournissent un outil pour analyser la qualité d’un schéma
relationnel. Prenons le cas d’un système permettant d’évaluer des manuscrits soumis à un
éditeur. Voici deux schémas possibles pour représenter les rapports produits par des experts.
Schéma 1
o Manuscrit (id_manuscrit, auteur, titre, id_expert, nom, commentaire)
Schéma 2
o Manuscrit (id_manuscrit, auteur, titre, id_expert, commentaire)
o Expert (id_expert, nom)
On suppose donc qu’il existe un seul expert par manuscrit. Ces dépendances nous donnent un
moyen de caractériser précisément les redondances et incohérences potentielles. Voici un
exemple de relation pour le schéma 1.
id_manuscrit auteur titre id_expert nom commentaire
Une réussite, on tourne les
10 Serge L’arpète 2 Philippe
pages avec frénésie
Un art du chant
Un livre qui fait date sur le
20 Cécile grégorien sous Louis 2 Sophie
sujet. Bravo
XIV
Une réussite, on tourne les
10 Serge L’arpète 2 Philippe
pages avec frénésie
10 Philippe SQL 1 Sophie la référence
En nous basant sur les dépendances fonctionnelles associées à ce schéma on peut énumérer
les anomalies suivantes:
La DF
n’est pas respectée par le premier et deuxième nuplet. Pour le même id_expert, on
trouve une fois le nom « Philippe », une fois le nom « Sophie ».
La DF
En résumé, on a soit des redondances, soit des incohérences. Il est impératif d’éviter toutes
ces anomalies.
On pourrait envisager de demander à un SGBD de considérer les DFs comme des contraintes
sur le contenu de la base de données et d’assurer leur préservation. On éliminerait les
incohérences mais pas les redondances. De plus le contrôle de ces contraintes serait,
d’évidence, très coûteux. Il existe une bien meilleure solution, basée sur les clés et la
décomposition des schémas.
Clés
Définition: clé
Une clé d’une relation R est un sous-ensemble minimal C des attributs tel que tout attribut de
R dépend fonctionnellement de C.
L’attribut id_expert est une clé de la relation Expert dans le schéma 2. Dans le schéma 1,
l’attribut id_manuscrit est une clé de Manuscrit. Notez que tout attribut de la relation
dépend aussi de la paire (id_manuscrit, auteur), sans que cette paire soit une clé
puisqu’elle n’est pas minimale (il existe un sous-ensemble strict qui est lui-même clé).
Note
Un schéma de relation R est normalisé quand, dans toute dépendance fonctionnelle (minimale
et directe)
Remarque
Cette définition est celle de la forme normale dite « de Boyce-Codd ». La définition standard
de la troisième forme normale est un peu moins stricte (et un peu plus difficile à saisir
intuitivement): elle demande que tout attribut non-clé soit dépendant fonctionnellement d’une
clé.
La différence est subtile et très rarement rencontrée en pratique: la troisième forme normale
autorise une DF d’un attribut non-clé vers une partie de la clé, alors que la version de Boyce-
Codd exclut ce cas.
En toute rigueur, il faudrait connaître et discuter des deux versions de la définition mais, le
gain pratique étant négligeable, j’assume de vous demander de comprendre et de retenir la
définition la plus simple et la plus intuitive.
nom, alors que l’attribut id_expert n’est pas une clé. Il existe une version intuitive de cette
constatation abstraite: la relation Manuscrit contient des informations qui ne sont pas
directement liées à la notion de manuscrit. La présence d’informations indirectes est une
source de redondance et donc d’anomalies.
L’essentiel de ce qu’il faut comprendre est énoncé dans ce qui précède. On veut obtenir des
relations normalisées car il et facile de montrer que la dénormalisation entraîne toutes sortes
d’anomalies au moment où la base est mise à jour. De plus, si R est une relation de clé C,
deux lignes de R ayant les même valeurs pour C auront par définition les mêmes valeurs pour
les autres attributs et seront donc parfaitement identiques. Il est donc inutile (et nuisible)
d’autoriser cette situation : on fera en sorte que la valeur d’une clé soit unique pour
l’ensemble des lignes d’une relation. En résumé on veut des schémas de relation normalisés et
dotés d’une clé unique bien identifiée. Cette combinaison interdit toute redondance.
Note
Plusieurs formes de normalisation ont été proposées. Celle présentée ici est dite « troisième
forme normale » (3FN). Il est toujours possible de se ramener à des relations en 3FN.
Clés étrangères¶
Un bon schéma relationnel est donc un schéma où toutes les tables sont normalisées. Cela
signifie que, par rapport à notre approche initiale naïve où toutes les données étaient placées
dans une seule table, nous devons décomposer cette unique table en fonction des clés.
Ces deux relations sont normalisées, avec pour clés respectives id_manuscrit et id_expert.
On constate que id_expert est présent dans les deux schémas. Ce n’est pas une clé de la
relation Manuscrit, mais c’est la duplication de la clé de Expert dans Manuscrit. Quelle est
son rôle? Le raisonnement est exactement le suivant:
L’attribut id_expert dans la relation Manuscrit est une clé étrangère. Une clé étrangère
permet, par transitivité, de tout savoir sur le nuplet identifié par sa valeur, ce nuplet étant en
général (pas toujours) placé dans une autre table.
Soit
et deux relations de clés (primaires) respectives idR et idS. Une clé étrangère de dans est un
attribut ce de
dont la valeur est toujours identique à (exactement) une des valeurs de idS.
Voici une illustration du mécanisme de clé primaire et de clé étrangère, toujours sur notre
exemple de manuscrit et d’expert. Prenons tout d’abord la table des experts.
Et voici la table des manuscrits. Rappelons que id_expert est la clé étrangère de Expert
dans Manuscrit.
Voyez-vous quel(le) expert(e) a évalué quel manuscrit? Etes-vous d’accord que connaissant la
valeur de clé d’un manuscrit, je connais sans ambiguité le nom de l’expert qui l’a évalué?
Constatez-vous que ces relations sont bien normalisées?
Une clé étrangère ne peut prendre ses valeurs que dans l’ensemble des valeurs de la clé
référencée. Dans notre exemple, la valeur de la clé étrangère id_expert dans Manuscrit est
impérativement l’une des valeurs de clé de id_expert. Si ce n’était pas le cas, on ferait
référence à un expert qui n’existe pas.
Dans un schéma normalisé, un système doit donc gérer deux types de contraintes, toutes deux
liées aux clés.
Contrainte d’unicité: une valeur de clé ne peut apparaître qu’une fois dans une relation.
Contrainte d’intégrité référentielle : la valeur d’une clé étrangère doit toujours être également
une des valeurs de la clé référencée.
Quiz
Voici une relation R(A, B, C, D)
ABC D
f 2 V 10
r 2 U 10
f 3 V 10
g 3 U 10
La dépendance
On veut représenter des logements touristiques et les activités qu’ils proposent. Voici un
exemple de table.
code nom capacité type lieu activité
ca Causses 45 Auberge Cévennes Randonnée
ge Génépi 134 Hôtel Alpes Piscine
ge Génépi 134 Hôtel Alpes Ski
pi U Pinzutu 10 Gîte Corse Plongée
pi U Pinzutu 10 Gîte Corse Voile
Parmi les dépendances fonctionnelles suivantes, lesquelles à votre avis sont respectées par
cette table?
A.
A.
En supposant que les dépendances fonctionnelles sont respectées, quelles affirmations ci-
dessous sont vraies?
C. Je ne peux pas connaître d’expert s’il n’a pas évalué au moins un manuscrit.
Reprenons le schéma initial sur les films, auquel on a ajouté des identifiants.
Film(idFilm, titre, année, idRéalisateur, prénom, nom, annéeNaiss)
A. éé
ééé
Quelle est la clé?
A. (idFilm, idRéalisateur)
B. idFilm
C. idRéalisateur
A. B
B. (C,D)
C. A
A. A
B. (A, C)
C. C
A. Tout attribut qui apparaît à droite mais jamais à gauche d’une DF doit faire
partie des clés
B. Tout attribut qui apparaît à gauche mais jamais à droite d’une DF doit faire
partie des clés
A. Oui
B. Non
Une relation R(A, B, C, D) a pour clé A. Quelles sont les solutions possibles pour garantir que
la DF
est respectée.
B. Quand on insère un nuplet (a, b, c, d), on détruit au préalable tous les nuplets
existants tels que A=a.
D. On interdit l’insertion d’un nuplet s’il existe déjà un nuplet tel que A=a.
Dans une relation en troisième forme normale, quelle affirmation est fausse
A. Si un attribut ne fait pas partie d’une clé, alors il dépend d’une clé
Dans l’ensemble du cours nous allons utiliser quelques bases de données, petites, simples, à
des fins d’illustration, pour les langages d’interrogation notamment. Elles sont présentées ci-
dessous, avec quelques commentaires sur le schéma, que nous considérons comme donné
pour l’instant. Si vous vous demandez par quelle méthode on en est arrivé à ces schémas,
reportez-vous au chapitre Conception d’une base de données.
Notre première base de données décrit les pérégrinations de quelques voyageurs plus ou
moins célèbres. Ces voyageurs occupent occasionnellement des logements pendant des
périodes plus ou moins longues, et y exercent (ou pas) quelques activités.
Voici le schéma de la base. Les clés primaires sont en gras, les clés étrangères en italiques.
Essayez de vous figurer les dépendances fonctionnelles et la manière dont elles permettent de
rassembler des informations réparties dans plusieurs tables.
La table Voyageur ne comprend aucune clé étrangère. Les voyageurs sont identifiés par un
numéro séquentiel nommé idVoyageur, incrémenté de 10 en 10 (on aurait pu incrémenter de
5, ou de 100, ou changer à chaque fois: la seule chose qui compte est que chaque identifiant
soit unique). On indique la ville et la région de résidence.
Remarquez que nos régions ne sont pas des régions administratives au sens strict: cette base
va nous permettre d’illustrer l’interrogation de bases relationnelles, elle n’a aucune prétention
à l’exatitude.
La table Logement
La table Logement est également très simple, son schéma ne contient pas de clé étrangère. La
clé est un code synthétisant le nom du logement. Voici son contenu.
L’information nommée région dans la table des voyageurs d’appelle maintenant lieu dans la
table Logement. Ce n’est pas tout à fait cohérent, mais corrrespond à des situations
couramment rencontrées où la même information apparaît sous des noms différents. Nous
verrons que le modèle relationnel est équipé pour y faire face.
Les séjours sont identifiés par un numéro séquentiel incrémenté par unités. Le début et la fin
sont des numéros de semaine dans l’année (on fait simple, ce n’est pas une base pour de vrai).
Séjour contient deux clés étrangères: l’une référençant le logement, l’autre le voyageur. On
peut que la valeur de idVoyageur (ou codeLogement) dans cette relation est toujours la
valeur de l’une des clés primaire de Voyageur (respectivement Logement). Si ce n’est pas
clair, vus pouvez revoir la définition des clés étrangères et méditer dessus le temps qu’il
faudra.
Note
La clé étrangère codeLogement n’a pas la même nom que la clé primaire dont elle reprend les
valeurs (code dans logrement). Au contraire, idVoyageur` est aussi bien le nom de la clé
primaire (dans Voyageur) que de la clé étrangère (dans Séjour). Les deux situations sont
parfaitement correctes et acceptables. Nous verrons comment spécifier avec SQL le rôle des
attributs, indépendamment du nommage.
La table Activité
Cette table contient les activités associées aux logements. La clé est la paire constituée de
(codeLogement, codeActivité).
codeLogement codeActivité description
pi Voile Pratique du dériveur et du catamaran
pi Plongée Baptèmes et préparation des brevets
ca Randonnée Sorties d’une journée en groupe
ge Ski Sur piste uniquement
ge Piscine Nage loisir non encadrée
Le schéma de cette table a une petite particularité: la clé étrangère codeLogement fait partie
de la clé primaire. Tout se passe dans ce cas comme si on identifiait les activités relativant au
logement auquel elle sont associées. Il s’agit encore une fois d’une situation normale, issue
d’un de choix de conception assez courant.
Réflechissez bien à ce schéma, nous allons l’utiliser intensivement par la suite pour
l’interrogation.
La seconde base représente des films, leur metteur en scène, leurs acteurs. Les films sont
produit dans un pays, avec une table représentant la liste des pays. De plus des internautes
peuvent noter des films. Le schéma est le suivant:
Quelques choix simplifiateurs ont été faits qui demanderaient sans doute à être reconsidérés
pour une base réelle. La clé étrangère idRéalisateur dans Film par exemple implique que
connaissant le film, je connais son réalisateur (dépendance fonctionnelle), ce qui exclut donc
d’avoir deux réalisateurs ou plus pour un même film. C’est vrai la plupart du temps, mais pas
toujours.
La clé primaire de la table Rôle est la paire (idFilm, idActeur), ce qui interdirait à un
même acteur de jouer plusieurs rôles dans un même film. Là aussi, on pourrait trouver des
exceptions qui rendraient ce schéma impropre à représenter tous les cas de figure. On peut
donc remarquer que chaque partie de la clé de la table Rôle est elle-même une clé étrangère
qui fait référence à une ligne dans une autre table:
l’attribut idFilm fait référence à une ligne de la table Film (un film);
l’attribut idActeur fait référence à une ligne de la table Artiste (un acteur);
Un même acteur peut figurer plusieurs fois dans la table Rôle (mais pas associé au même
film), ainsi qu’un même film (mais pas associé au même acteur). Voici un exemple concis de
contenu de cette base montrant les liens établis par les associations (clé primaire, clé
étrangère). Commençons par la table des films.
id titre année genre idRéalisateur codePays
20 Impitoyable 1992 Western 130 USA
21 Ennemi d’état 1998 Action 132 USA
En voici enfin la table des rôles, qui consiste ensentiellement en identifiants établissant des
liens avec les deux tables précédentes. À vous de les décrypter pour comprendre comment
toute l’information est représentée. Que peut-on dire de l’artiste 130 par exemple? Peut-on
savoir dans quels films joue Gene Hackman? Qui a mis en scène Impitoyable?
Nous nous appuierons sur cette représentation pour expliquer le raisonnement à mettre en
œuvre quand on conçoit une requête SQL.
Quiz
A. Oui
B. Non
A. Oui
B. Non
A. Oui
B. Non
A. Oui
B. Non
Connaissant une activité, puis-je toujours savoir dans quel logement elle est proposée?
A. Oui
B. Non
A. Oui
B. Non
Connaissant une activité, puis-je savoir quels voyageurs ont eu l’occasion de la pratiquer?
A. Oui
B. Non
Exercices
Exercice Ex-relationnel-1: calculs de transitivité
; E car
. On regarde les parties gauches pour savoir si on peut déterminer d’autres attributs.
n’apporte rien.
é
Une dépendance est directe si elle ne peut pas être obtenue par transitivité.
L’augmentation est un autre des axiomes d’Armstrong. Une dépendance est minimale si elle
ne peut pas être obtenue par augmentation.
En l’absence de toute dépendance fonctionnelle non triviale, quelle est la clé d’une relation?
Comment calculer les clés d’une relation à partir d’un ensemble de DF?
Donc on part des attributs qui doivent faire partie d’une clé et on vérifie qu’ils forment une
clé. Si non on les augmente progressivement avec ceux que l’on n’arrive pas à déterminer.
donc c’est une clé. C’est la seule car elle est minimale.
R(A, B, C, D, E),
R(A, B, C, D, E),
R(A, B, C, D, E),
R(A, B, C, D, E),
Donnez l’argument qui montre que cette relation n’est pas en troisième forme normale
é
é
Questions:
Soit la relation suivante, représentant des commandes d’un produit pour lequel on connaît le
prix unitaire et le nombre (nb) d’exemplaires commandés.
Chaque ligne corrrespond à un animal auquel on attribue un nom propre, une année de
naissance et une espèce (Ours, Lion, Boa, etc.). Cet animal est pris en charge par un gardien
(avec prénom et salaire) et occupe un emplacement dans le zoo dont on connaît la surface.
Enfin chaque espèce appartient à une classe (les mammifères, poissons, reptiles, batraciens ou
oiseaux) et on considère pour simplifier qu’elle provient d’une origine unique (Afrique,
Europe, etc.).
Tout cela est évidemment très approximatif. Essayons d’y mettre de l’ordre. Voici les
dépendances fonctionnelles:
animal
nom, espèce
animal.
espèce
origine, classe.
gardien
prénom, salaire.
emplacement
surface, gardien.
Le but pour l’instant est d’identifier les anomalies et de trouver les clés.
Supposons que le contenu de la table Zoo respecte les dépendances fonctionnelles ci-dessus.
Répondez aux questions suivantes:
Deux animaux peuvent-ils avoir le même nom?
Le nom d’un animal suffit-il pour l’identifier?
Peut-on avoir deux animaux avec le même nom sur le même emplacement?
Connaissant un animal, est-ce que je connais son origine?
Connaissant un animal, est-ce que je sais quel est son gardien?
Un gardien peut-il s’occuper de plusieurs emplacements?
Un emplacement peut-il être pris en charge par plusieurs gardiens?
Deux gardiens peuvent-ils avoir le même salaire?
Recherche d’anomalies
On peut mettre n’importe quoi dans cette relation. Par exemple on pourrait y trouver le
contenu de la table ci-dessous (on a simplifié le nombre de colonnes).
Maintenant:
Citer (au moins) 5 anomalies qui rendent cette table incompatible avec les
dépendances fonctionnelles données précédemment.
Citer (au moins) 2 redondances qui pourraient être évitées.
Montrer que animal et nom, Espèce sont des clés de la relation Zoo
Montrer que ce sont les seules clés.
Montrer que la table n’est pas en troisième forme normale