Livre_silo 30 août 2013 16:32 Page 257
¨
©
¨
©
¨
©
¨
©
C o p y r i g h t E y r o l l e s
257
10 – Algèbre relationnelle
Récupérer la liste des élèves d’une classe est très simple. Il suffit de parcourir le tableau des
classes jusqu’à obtenir celle qu’ on veut, puis de renvoyer son sous-tableau d’élèves :
def recherche_classe(filiere, numero):
for classe in lycee:
if classe[0] == filiere and classe[1] == numero:
return classe[2]
return None
Pour obtenir l’ensemble des élèves ayant passé leur terminale dans le lycée Adams, il faut
parcourir chaque classe et filtrer les élèves concernés. Cette recherche est plus complexe que
la précédente ; on constate notamment qu’il faut effectuer deux boucles for imbriquées :
une sur les classes, puis une sur leurs élèves.
def recherche_term(term):
eleves = []
for classe in lycee:
for eleve in classe[2]:
if eleve[1] == term:
eleves.append(eleve)
return eleves
On note que la représentation des données est implicitement choisie pour faciliter le type
de recherche prévu.
Si on choisit une autre représentation, en créant un tableau des lycées et en leur associant
les élèves qui y étaient en terminale, c’est la recherche des élèves provenant du même lycée
qui sera facilitée. En revanche, pour trouver l’ensemble des élèves d’une classe, il faudra
parcourir tous les lycées et tous les élèves.
Dans cet exemple, un élève a des liens d’appartenance à la fois avec les classes et avec les
lycées. Or, la représentation du problème sous forme de tableau contraint à privilégier un
de ces liens. De plus, on veut pouvoir effectuer des recherches indépendamment de tout
lien, par exemple rechercher tous les élèves portant le même nom.
10.2 Représentation dans le modèle relationnel
En faisant abstraction de tout lien d’appartenance, il est possible de représenter de manière
assez similaire un élève et une classe. En effet, on pourrait considérer qu’une classe est un
couple de la forme (filière, numéro), par exemple :
(“MPSI”, 1), (“MPSI”, 2), (“PCSI”, 1)
et les élèves des triplets de la forme (nom, classe, lycée-de-terminale), par exemple :
(“Évariste”, “MPSI 1”, “Lycée Adams”), (“Léa”, “MPSI 1”, “Lycée Cleese”)…
Précédent

- 270/402

Suivant