Vous êtes sur la page 1sur 6

IPEIK 2023

Base de données Examen Mai 2023 _ Corrigé

Partie n°4 : Algèbre relationnelle, SQL et SQLite


La base de données que nous avons élaborée concerne l'élasticité d'un brin d'ADN et permet
de stocker et d'analyser les résultats expérimentaux relatifs à cette thématique. Elle se
compose de quatre tables interconnectées : "ADN", "Mesures", "Conditions
expérimentales" et "Expérimentateurs".

La table "ADN" stocke les informations relatives aux brins d'ADN étudiés, notamment
leur identifiant unique, leur séquence nucléotidique, leur longueur en paires de bases et leur
masse moléculaire en daltons.
Table "ADN":
• id: identifiant unique du brin d'ADN
• sequence: séquence nucléotidique du brin d'ADN
• longueur: longueur du brin d'ADN en paires de bases (pb)
• masse: masse moléculaire du brin d'ADN en daltons (Da)

La table "Mesures" stocke les résultats des mesures expérimentales effectuées sur les
brins d'ADN, notamment l'identifiant unique de la mesure, l'identifiant du brin d'ADN
mesuré, l'identifiant de l'expérimentateur ayant effectué la mesure, la température à laquelle
la mesure a été effectuée, la force exercée sur le brin d'ADN lors de la mesure et l'extension
du brin d'ADN lors de la mesure.
Table "Mesures":
• id: identifiant unique de la mesure
• id_adn: identifiant du brin d'ADN mesuré (clé étrangère faisant référence à la table
"ADN")
• id_experimentateur: identifiant de l'expérimentateur ayant effectué la mesure (clé
étrangère faisant référence à la table "Expérimentateurs")
• temperature: température à laquelle la mesure a été effectuée en degrés Celsius (°C)
• force: force exercée sur le brin d'ADN lors de la mesure en piconewtons (pN)
• extension: extension du brin d'ADN lors de la mesure en nanomètres (nm)

La table "Conditions expérimentales" stocke les informations relatives aux conditions


expérimentales associées à chaque mesure, notamment l'identifiant unique de la condition
expérimentale, l'identifiant de la mesure associée, le type de condition expérimentale (par
exemple, ajout de ligands, variation de pH, etc.) et la valeur de la condition expérimentale
(par exemple, concentration du ligand, pH, etc.).
Table "Conditions expérimentales":
• id: identifiant unique de la condition expérimentale
• id_mesure: identifiant de la mesure associée (clé étrangère faisant référence à la table
"Mesures")

1
• type_condition: type de condition expérimentale (par exemple, ajout de ligands, variation
de pH, etc.)
• valeur_condition: valeur de la condition expérimentale (par exemple, concentration du
ligand, pH, etc.)

Enfin, la table "Expérimentateurs" stocke les informations relatives aux


expérimentateurs ayant effectué les mesures, notamment leur identifiant unique, leur nom,
leur prénom et leur laboratoire.
Table "Expérimentateurs":
• id: identifiant unique de l'expérimentateur
• nom: nom de l'expérimentateur
• prenom: prénom de l'expérimentateur
• laboratoire: laboratoire de l'expérimentateur

Cette base de données permettra de stocker, de gérer et d'analyser efficacement les données
expérimentales relatives à l'élasticité des brins d'ADN, afin de mieux comprendre les
propriétés physiques et mécaniques de cette molécule fondamentale de la vie.

Table "ADN":
id sequence longueur masse
1 ATCGATCGATCGATCGATCGATCGATCGATCGATCGATCGATCG 20 6512.08
2 CGATCGATCGATCGATCGATCGATCGATCGATCGATCGATCGATC 15 4871.56
3 GATCGATCGATCGATCGATCGATCGATCGATCGATCG 10 3247.84
4 ATCGATCGATCGATCGATCGATCGATCGATCGATCGATCG 12 3917.4
Table "Mesures":
id id_adn id_experimentateur temperature force extension
M1 2 300 25 12.3 23.4
M2 1 200 30 9.5 12.1
M3 3 100 20 7.2 15.9
M4 4 200 27 11.1 18.5

Table "Conditions expérimentales":


id id_mesure type_condition valeur_condition
E1 M1 ajout de ligands 10µM
E2 M2 variation de pH 7.5
E3 M3 ajout de sels 50mM NaCl
E4 M4 variation de température 22°C

Table "Expérimentateurs":
id nom prenom laboratoire
100 Heni Rafik Laboratoire A
200 Skeri Fatma Laboratoire B
300 Lafi Ahmed Laboratoire C

Algèbre relationnelle :

2
1. Quels sont les noms et prénoms des expérimentateurs qui ont effectué des mesures à
une température supérieure à 25°C ?
Noms , prénoms => table Expérimentateurs

Température => table Mesures

 Projection , Sélection , jointure (Expérimentateurs , Mesures )

2. Quel est l'identifiant du brin d'ADN mesuré ayant la plus grande longueur et quelle
est la masse moléculaire associée ?

id_adn => table Mesures


longueur => table ADN
Masse => table ADN

( )

. .

,
SQL
3. Quel est le nombre total de mesures effectuées dans la base de données ?
SELECT COUNT(*)
FROM Mesures
4. Quel est l'identifiant du brin d'ADN ayant la plus grande longueur et quelle est la
masse moléculaire associée ?
SELECT id,masse
FROM Adn
WHERE longueur = (SELECT MAX(longueur) FROM Adn)

3
5. Quel est le prénom et le nom de l'expérimentateur ayant effectué la mesure avec la
plus grande force exercée sur le brin d'ADN ?
SELECT nom, prenom
FROM Experimentateur E , Mesures M
WHERE E.id = M.id_experimentateur and force = (SELECT MAX(force)
FROM Mesures
6. Quelle est la température moyenne à laquelle les mesures ont été effectuées ?
SELECT AVG(temperature)
FROM Mesures
7. Quelle est la valeur la plus élevée de la condition expérimentale "concentration de
ligand" dans la base de données ?
SELECT MIN(valeur_condition)
FROM Conditions_expérimentales
WHERE type_condition = " concentration de ligand"
8. Quels sont les brins d'ADN mesurés ayant une extension maximale supérieure à 50
nm pour au moins deux mesures effectuées à des températures différentes ? Retourner
l'identifiant du brin d'ADN, la température des mesures et l'extension maximale
mesurée.
SELECT id_adn,temperature,MAX(extension)
FROM Mesures
WHERE extension > 50
GROUP BY id_adn
HAVING COUNT(DISTINCT temperature) >= 2
9. Effectuer une mise à jour de la colonne 'longueur' de la table 'ADN' pour tous les
brins d'ADN en multipliant leur longueur par 1,5.
UPDATE Adn
SET longueur = longueur * 1.5

SQLite
Les fonctions doivent être écrite en Python, On désigne par cur le curseur d'exécution des
différentes requêtes :

10. Écrire une fonction getadn(cur, adn_id) qui prend en paramètre le curseur
d'exécution de requête cur et l'identifiant d'un brin d'ADN adn_id, et qui retourne la
séquence nucléotidique associée à ce brin d'ADN, ou None si l'identifiant n'est pas
présent dans la base de données.
def getadn(cur,adn_id) :

4
cur.execute( "SELECT sequence FROM Adn WHERE
id= ?" , (adn_id,))
t=cur.fetchone()
if t != None :
return t[0]
return None

11. Écrire une fonction getexp(cur, labname) qui prend en paramètre le curseur
d'exécution de requête cur et le nom d'un laboratoire d'expérimentateurs labname, et
qui retourne une liste de dictionnaires contenant les informations de toutes les
expériences réalisées par les expérimentateurs de ce laboratoire. Chaque dictionnaire
contient les clés suivantes : 'id', 'temperature', 'force', 'extension', 'type_condition',
'valeur_condition', 'nom', 'prenom', 'id_adn'.

def getexp(cur,labname) :
cur.execute( "SELECT M.id, temperature, force, extension,
type_condition, valeur_condition, nom, prenom , id_adn
FROM Mesure M , Condition_Experimentales C ,
Experimentateur E WHERE E.id=id_experimentateur AND
M.id = id_mesure AND laboratoire = ?" , [labname])
L=cur.fetchall()
X=[]
for t in L :
D={}
D['id']=t[0]
D['temperature']=t[1]
D['force'] = t[2]
D['extension']=t[3]
D['Type_condition']=t[4]
D['valeur_condition']=t[5]
D['nom']=t[6]
D['prenom']=t[7]
D['id_adn']=t[8]
X.append(D)

5
return D

12. Écrire une fonction getMoyForce(cur, mint, maxt) qui prend en paramètre le
curseur d'exécution de requête cur, une température minimale mint et une
température maximale maxt, et qui retourne la moyenne des forces exercées sur tous
les brins d'ADN lors de toutes les expériences réalisées à une température comprise
entre mint et maxt, ou None si aucune expérience n'a été réalisée à cette plage de
températures.

def getMoyForce(cur,mint,maxt) :
cur.execute( "SELECT AVG(force) FROM Mesures
WHERE temperature BETEEN ? AND ? " , (mint,maxt))
t=cur.fetchone()
if t != None :
return t[0]
return None

Vous aimerez peut-être aussi