SGBD Flashcards
C’est quoi le schéma ?
C’est la structure des tables/relations
C’est quoi un contenu ?
Ce sont les lignes stocké dans chaque table
A quoi servent les contraintes d’intégrité ?
A assurer la cohérence des données
C’est quoi une contrainte d’intégrité explicite?
Stocké dans le SGBD et qui peuvent être vérifier automatiquement à chaque modification du contenu (Ex : Produit.prix >= 0)
C’est quoi une contraine d’intégrité implicite ?
Qui sont dans la tête de l’administrateur de la base de données uniquement. (Ex : Le total d’un pannier est la somme des prix des objets qu’il contient)
C’est quoi une base de donné cohérante ?
Si son contenu vérifie toutes les contraintes
C’est quoi une clef ?
Sous ensemble de colonne d’une table
C’est quoi une super clef ?
Ensemble de colonnes qui vérifient : “Il y a au plus une ligne qui à les même valeur dans ces colonnes”
C’est quoi une clef candidate ?
Super clé qui contient un nombre minimal de colonnes (Dans la super-clef on peut prendre trop de colonnes)
C’est quoi une clef primaire ?
Clé candidate choisie pour identifier chaque ligne
C’est quoi un clef étrangère ?
Ensemble de colonnes d’une table faisant référence à la clef primaire d’un autre table.
C’est quoi un transaction ? Que cela permet -il de faire ?
Une transaction est un ensemble de requêtes qui permet de gérer des opérations élémentaires que les requêtes simple ne peuvent pas faire.
La notion de transaction permet de vérifier la coherence uniquement à la fin de l’execution de toutes les requêtes SI ON LE PRECISE.
Que veut dire ACID ?
Atomicité
Cohérence
Isolation
Durabilité
Définir l’Atomicité pour ACID
Soit la transaction est complètement réalisée, soit rien du tout
Une transaction n’a que trois états :
Active > En Cours d’exécution
Validée/Committed > Terminé par un succès
Annulée/Aborted > Terminé par un échec
C’est quoi l’auto-commit ?
Chaque requête est automatiquement une transaction.
C’est quoi la Journalisation ? Qui l’utilise ? Que permet-il d’avoir ?
Le rollback utilise la journalisation (On stocke les données avant et après modification.)
Le journal est un fichier sur le disque où sont stockées toutes les modifications faites par les transactions.
L’ordre des commit est aussi journalisé
Permet d’avoir de la reprise après panne
C’est quoi la cohérence pour ACID ?
Quelque soit l’exécution des transactions, la base de données reste cohérente
C’est quoi l’Isolation pour ACID ?
Les transactions doivent modifier la base comme si elles étaient chacune exécutée seule
Ce qu’implique l’Isolation :
- Sur ses modifications par rapport aux autres transaction ?
- Sur l’exécution parallèle ?
- Sur les conflits entre transaction ?
- Sur conflits de transaction qui ne font que lire ?
- Su la concurrence ?
- Sur le point de vue de celui qui envoie la transaction ?
Une transaction ne doit pas révéler ses modifications aux autres transactions tant qu’elle n’a pas été validée.
Les transactions exécutées en parallèle peuvent engendrer des problèmes de cohérence
Des conflits entre les transactions peuvent entraîner l’annulation de certaines transactions
Il n’y pas de problème d’isolation, si toutes les transaction lisent uniquement les données
L’isolation des transactions permet d’avoir une concurrence élevée.
Gestion transparente du point de vue de celui qui envoie la transaction
C’est quoi la Durabilité pour ACID ?
Les modifications d’une transaction sur la base de données ne sont jamais perdues
Comment définir un niveau d’isolation en SQL ?
SET TRANSACTION ISOLATION LEVEL {Niveau d’isolation};
Quels sont les niveaux d’isolation d’une transaction et leur impacts sur les lectures impropre et non reproductible ?
READ COMMITED (Par défaut) (Voit les modifications faites avant le début NON VALIDE)
- Lecture impropre impossible
- Lecture non reproductible possible
READ ONLY (Voit les modifcations faites avant le debut VALIDée) peut pas modif
- Lecture impropre impossible
- Lecture non reproductible impossible
SERIALIZABLE (Voit les modifcations faites avant le debut VALIDée) peut modif
- Lecture impropre impossible
- Lecture non reproductible impossible
C’est quoi une lecture impropre ? C’est quoi en anglais ? Pourquoi c’est pas bien ?
(Dirty read)
Il s’agit d’une lecture d’une donnée écrite par une transaction qui n’est pas encore validée. Risqué car la transaction peut être annulé ou modifier la donnée.
C’est quoi une lecture non reproductible ?
Relecture par une requête de données qui ont été modifiées par une autre depuis la première lecture
Comment différer la vérification des contraintes en SQL ?
En définissant la table :
CONSTRAINT nom_fk FOREIGN KEY vise REFERENCES Impasse (tireur) {option};
Après l’avoir fait
SET CONSTRAINTS nom_fk {Option} ;
SET CONSTRAINTS ALL {Option};
Quels sont les différents niveau de différation de la vérification des contraintes en SQL?
NOT DIFERABLE > Ne peut pas être différée (option par défaut)
DEFERABLE INITIALLY IMMEDIATE > Différé si on le précise
DEFERABLE INITIALLY DEFERED > Différé par défaut
C’est quoi une exécution concurrentes ?
Une exécution concurrente est une suite d’opérations prises par une ou plusieurs transactions en même temps
C’est quoi une exécution en série ?
On dit qu’une exécution est en série si toutes les opérations de chaque transaction sont exécutées de manière consécutives.
De quoi dépendent les exécution en série ?
Elles dépendent de l’ordre des transactions
Pourquoi on souhaite avoir des exécution sérialisable ?
Car ce sont des exécution qui garantissent la préservation de la cohérence de données
Comment savoir si un exécution est sérialisable ? (Définition théorique)
Une exécution E est sérialisables s’il existe une exécution E’ en série telles que E et E’ sont équivalentes et qu’elles ont le même effet sur toutes les bases de données. (Fait les mêmes opérations dans n’importe qu’elle BDD avec le bon schéma)
C’est quoi un conflit entre opréation consécutive ?
On parle de conflit entre deux opérations consécutives d’une exécutions lorsque leur ordre ne peut être inversé sans changer l’effet de cette exécution.
Dans quel cas il y a un conflit entre opération consécutive ?
- Deux opérations qui sont dans la même transaction
De transaction différentes :
- Deux écriture de la même donnée
- Lecture/Ecriture de la même donnée
Dans quel cas on peut inverser deux opérations consécutive ?
Dans deux transactions différentes :
- Deux lecture même sur le même élement
- Une écriture/lecture sur un élement différent
C’est quoi deux exécution équivalente par conflit ?
On dit que deux exécutions sont équivalentes par conflit si on peut passer de l’une à l’autre en inversant des opérations consécutives sans conflits.
C’est quoi une exécution sérialisable par conflit ?
On dit qu’une exécution est sérialisables par conflit si elle est équivalente par conflit à une exécution en série
(Il suffit donc de faire des inversions en respectant les règles d’équivalence par conflit de montrer que les deux transactions peuvent s’exécuter à la suite sans problème)
Qu’implique la sérialisabilité par conflit d’une exécution ?
Sa séralisibilité
Comment savoir si Ti précède Tj dans une exécution E ? (Ti <E Tj)
Si il existe deux opération Oi et Oj dans E tel que :
- Oi précède Oj dans E
- Oi et Oj s’applique sur le même élement
- Oi ou Oj est une opération d’écriture
Supposons que Ti <E Tj, que cela implique t-il ?
On sait que les Oi et Oj choisit sont en conflit et qu’on ne pourra donc pas les inverser sans conflit
Supposons que E est sérialisable et que Ti <E Tj par conflit, que cela implique t-il ?
Dans toute exécution en série équivalentes par conflit à E :
Ti apparaitra nécessairement avant Tj
Comment est défini le graphe de précédence d’une exécution ?
Les noeuds sont les transactions de E
Il y une arrête de Ti vers Tj si Ti <E Tj
Qu’implique le fait que E est sérialisable par conflit en plus d’avoir un graphe de précédence ?
E est équivalente par conflit à toute exécution en série des transactions E où Ti précède Tj dès qu’il existe une arrête de Ti vers Tj dans le graphe de précédence de E.
https://media.discordapp.net/attachments/509074684797648926/1101069350791806976/3vyyasV.png?width=201&height=410
A quoi quelle exécution en série E est équivalente par conflit avec ce graphe de précédence ?
(T2, T3, T1)
(T2, T1)
A quoi servent les verrous ?
On ne cherche plus à savoir si l’exécution dans cette ordre est sérialisable mais on cherche à différer certaines opérations (un minimum) pour conserver la sérialisibilité.
Quels sont les deux types de verrous ? Quand sont ils nécessaire ?
Verrou partagé (Shared lock) nécessaire pour lire un element
Verrou exclusif (Exclusive lock) nécessaire pour écrire un element
Quels sont les opérations pour obtenir un verrou partagé/exclusif et relaché un verrou en algèbre relationnelle?
Si(X) Ti obtient un verrou partagé sur X
Xi(X) Ti obtient un verrou exclusif sur X
Ui(X) Ti relache son verrou sur X
Quels sont les contraintes sur les lectures/ecriture par rapport au verrou que possède une transaction Ti ?
Une lecture est effectué uniquement quand Ti à un verrou partagé OU exclusif sur X
Une écriture est effectué uniquement quand Ti à un verrou exclusif sur X
Combien de transaction peuvent avoir de :
- Verrou partagé ?
- Verrou exclusif ?
- Les deux ?
A tout moment un élement de la base :
- Vérouillé exclusif par une UNIQUE transaction
- Vérouillé partagé par PLUSIEURS transactions
Mais jamais les deux pour un même élement
C’est quoi une perte de mise à jour ?
Cela se produit quand deux transaction essaye de modifer une même donné et ne commit qu’a la fin
Quels sont les exécutions qui ne sont jamais sérialisable ?
Celle avec une lecture impropre / perte de mise à jour
C’est quoi une procédure ?
Une procédure agit comme une fonction dans une BDD (Prend des arguments et effectue des traitements potentiellement conditionnelle)
Comment savoir quand une exécution est sérialisable ? (3 points)
- Quand on trouve un exemple d’execution en série équivalente
- Quand elle est sérialisable par conflit
- Quand elle est stricte
Que ce passe t’il si on veut un verrou exclusif sur une donné déjà verouillé de manière partagé par une autre transaction ?
On va attendre
Comment obtenir la sérialibilité par conflit avec les verroux ?
Avec le verrouillage en deux phases (2 Phase Locking 2PL)
Que se passe-t-il si un même transaction veut un verrou exclusif sur une donné dont elle à déjà un verrou partagé ?
Le verrou exclusif prend le pas du verrou partagé (Le remplace)
Quelle est la règle du verrouillage en deux phase ?
On ne peut plus prendre de verrou quand on a commencé a en relacher dans une même transaction
Que fait le SELECT … FOR UPDATE ?
Pose implictement un verrou row share :
Les lignes selectionné sont verrouillé en écriture
Que fait le LOCK TABLE … IN SHARE MODE ?
Permet d’obtenir un verrou partagé
Que fait le LOCK TABLE .. IN EXCLUSIVE MODE
Permet d’obtenir un verrou exclusif
Que fait le LOCK TABLE .. IN SHARE/EXCLUSIVE MODE NOWAIT
Plutôt que de bloquer l’exécution si la table est déjà verrouillée, Oracle abandonne
l’instruction.
Quel pose implicite fait le INSERT/DELETE/UPDATE ?
Row exclusive > Pose un verrou exclusif (Bloque les lecture ET ecriture) des lignes concerné
Quels sont les deux phases du 2PL ?
- Accisitions des verrous
- Relachement des verrous
Quel est le risque du 2PL ?
L’interblocage (Dead lock)
C’est quoi l’interblocage (Dead lock) ?
C’est un structure d’exécution où des transactions sont forcées d’attendre indéfiniment un verrou obtenu par une autre transaction.
C’est quoi une execution réparable ?
Une exécution est reparable si chaque transaction est validées après la transaction dont elle a lu des données modifiées.
w1(A)w1(B)w2(A)r2(B)c1c2 Réparable
C’est quoi une exécution sans annulation en cassacade (SAC) ?
Une exécution est sans annulation en cascade (SAC) si toutes les transactions lisent des valeurs modifié issues uniquement de transactions déjà validé.
w1(A)w1(B)w2(A)r2(B)c1c2 Non SAC
Quels propriétés on les SAC ?
- Jamais de lecture impropre
- Réparable
C’est quoi un exécution stricte ?
Une exécution AVEC VERROU est STRICTE si dans chaque transaction, aucun verrou exclusif n’est relaché avant que la transaction soit annulé ou validé.
Quel est la propriété des exécutions stricte ?
Elle sont sérialisable
C’est quoi deux éxéciton équivalente ?
Deux éxécution qui ont le même effet sur la BDD.
Pourquoi est il souhaitable pour une exécution d’être réparable ?
En cas d’annulation d’une transaction dont une autre lit les données modifiées non validée, on peut aussi annuler l’autre. Sinon c’est “trop tard”.
w1(A)w1(B)w2(A)r2(B)c1c2 Réparable
w1(A)w1(B)w2(A)r2(B)c2c1 Non réparable