Différences
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente | ||
sio2:d4-a05-la_programmation_de_declencheurs [2024/11/28 11:41] – dthevenot | sio2:d4-a05-la_programmation_de_declencheurs [2025/03/17 19:13] (Version actuelle) – [Alternative] dthevenot | ||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
~~SLIDESHOW~~ | ~~SLIDESHOW~~ | ||
- | ====== D4-A05 Gestion des données – La programmation au sein d’un SGBD - les déclencheurs (triggers) ====== | + | ====== D4-A05 |
< | < | ||
* Le respect de contraintes d’intégrité avancées à l’aide de déclencheurs ; | * Le respect de contraintes d’intégrité avancées à l’aide de déclencheurs ; | ||
Ligne 8: | Ligne 8: | ||
===== Rappels : Contraintes d’intégrité ===== | ===== Rappels : Contraintes d’intégrité ===== | ||
- | Une contrainte d' | + | Une **contrainte d' |
Il existe deux types de contraintes : | Il existe deux types de contraintes : | ||
Ligne 22: | Ligne 22: | ||
===== ===== | ===== ===== | ||
Les contraintes d' | Les contraintes d' | ||
- | |||
- | ===== ===== | ||
- | Les différentes contraintes d’intégrité : | ||
* La contrainte de domaine | * La contrainte de domaine | ||
* La contrainte de relation | * La contrainte de relation | ||
* La contrainte de référence ou contrainte d’intégrité référentielle | * La contrainte de référence ou contrainte d’intégrité référentielle | ||
- | ===== Contraintes d' | + | ===== Contraintes d' |
Le langage SQL usuel permet de nombreuses opérations sur les bases de données mais ne suffit malgré tout pas à implémenter toutes les règles de gestion inhérentes à celles-ci. En effet, il est par exemple impossible d’assurer l’intégrité des données dès lors que le modèle de données nécessite la mise en œuvre de **contraintes d’intégrité avancées.** | Le langage SQL usuel permet de nombreuses opérations sur les bases de données mais ne suffit malgré tout pas à implémenter toutes les règles de gestion inhérentes à celles-ci. En effet, il est par exemple impossible d’assurer l’intégrité des données dès lors que le modèle de données nécessite la mise en œuvre de **contraintes d’intégrité avancées.** | ||
===== ===== | ===== ===== | ||
Ligne 36: | Ligne 33: | ||
Ainsi le langage SQL a-t ’il fait l’objet d’enrichissements successifs de sorte que de nouvelles notions sont apparues de manière à pouvoir solutionner des problématiques telles que celles évoquées ci-avants. Ces notions font même désormais partie de la norme SQL : **trigger, événements, | Ainsi le langage SQL a-t ’il fait l’objet d’enrichissements successifs de sorte que de nouvelles notions sont apparues de manière à pouvoir solutionner des problématiques telles que celles évoquées ci-avants. Ces notions font même désormais partie de la norme SQL : **trigger, événements, | ||
- | C’est dans ce contexte | + | C’est dans ce contexte |
===== Les déclencheurs (triggers) ===== | ===== Les déclencheurs (triggers) ===== | ||
- | Un trigger est une règle spécifiant une action à exécuter sur la BD, quand une condition est vérifiée, suite à une mise à jour ou une interrogation. C'est un algorithme exécuté à l’occasion d’un événement se produisant sur une table d’une base de données. Ce mécanisme est aussi nommé déclencheur. Un trigger est de la forme : | + | Un trigger est une règle spécifiant une action à exécuter sur la BD, quand une condition est vérifiée, suite à une mise à jour. C'est un algorithme exécuté à l’occasion d’un événement se produisant sur une table d’une base de données. Ce mécanisme est aussi nommé déclencheur. Un trigger est de la forme : |
===== ===== | ===== ===== | ||
* sur < | * sur < | ||
Ligne 52: | Ligne 49: | ||
===== ===== | ===== ===== | ||
==== les < | ==== les < | ||
- | Les événements sont typiquement | + | Les événements sont les suivants : |
* BEFORE INSERT : pour exécuter un trigger avant l’insertion d’une nouvelle ligne au sein d’une table. La nouvelle ligne n’est donc pas encore dans la table au moment de l’exécution du trigger. | * BEFORE INSERT : pour exécuter un trigger avant l’insertion d’une nouvelle ligne au sein d’une table. La nouvelle ligne n’est donc pas encore dans la table au moment de l’exécution du trigger. | ||
* AFTER INSERT : pour exécuter un trigger après l’insertion d’une nouvelle ligne au sein d’une table. La nouvelle ligne existe donc effectivement dans la table au moment de l’exécution du trigger. | * AFTER INSERT : pour exécuter un trigger après l’insertion d’une nouvelle ligne au sein d’une table. La nouvelle ligne existe donc effectivement dans la table au moment de l’exécution du trigger. | ||
Ligne 69: | Ligne 66: | ||
L’exécution d’un trigger est encapsulée dans ce qu’on appelle une transaction. Une transaction, | L’exécution d’un trigger est encapsulée dans ce qu’on appelle une transaction. Une transaction, | ||
- | L’on | + | On peut valider une transaction. C’est ce qu’on appelle un COMMIT. Au contraire, on peut faire échouer une transaction. C’est ce qu’on qualifie de ROLLBACK. |
===== ===== | ===== ===== | ||
En MySQL, conformément à la norme, on fait échouer une transaction en levant une erreur grâce à l’instruction SIGNAL. | En MySQL, conformément à la norme, on fait échouer une transaction en levant une erreur grâce à l’instruction SIGNAL. | ||
Ligne 96: | Ligne 93: | ||
__Explication : __ | __Explication : __ | ||
- | * À l’insertion, | + | * À l’insertion, |
- | * À la mise à jour, l’on vient modifier une ligne préexistante. Il y a donc une ancienne ligne (OLD) et une nouvelle (NEW), à savoir la même mais modifiée. NEW et OLD sont dès lors utilisables. | + | * À la mise à jour, on vient modifier une ligne préexistante. Il y a donc une ancienne ligne (OLD) et une nouvelle (NEW), à savoir la même mais modifiée. NEW et OLD sont dès lors utilisables. |
- | * À la suppression, | + | * À la suppression, |
===== ===== | ===== ===== | ||
==== L’intérêt ==== | ==== L’intérêt ==== | ||
- | Si nous pouvons exécuter un programme lorsqu’un événement se produit, nous pouvons désormais, entre autres choses, vérifier des contraintes d’intégrité avancées. | + | Si nous pouvons exécuter un programme lorsqu’un événement se produit, nous pouvons désormais, entre autres choses, vérifier des contraintes d’intégrité avancées. |
[[Exercices d' | [[Exercices d' | ||
Ligne 110: | Ligne 107: | ||
===== Avantages ===== | ===== Avantages ===== | ||
- | Les triggers permettent de mettre en œuvre des contrôles d’intégrité avancées. | + | Les triggers permettent de mettre en œuvre des contrôles d’intégrité avancées. |
- | A l’inverse des contrôles applicatifs, | + | A l’inverse des contrôles applicatifs, |
- | Plus encore, l’exécution du code d’un trigger étant réalisée au sein même du SGBD, l’algorithme développé peut profiter des optimisations effectuées par le SGBD (tables d’index, fonctions de calcul optimisées, | + | Plus encore, l’exécution du code d’un trigger étant réalisée au sein même du SGBD, l’algorithme développé peut profiter des **optimisations effectuées par le SGBD** (tables d’index, fonctions de calcul optimisées, |
===== ===== | ===== ===== | ||
- | Cela permet également de partager la source de données entre plusieurs applications sans rompre la logique de validation, d’intégrité de la base de données. | + | Cela permet également de **partager la source de données entre plusieurs applications sans rompre la logique de validation, d’intégrité de la base de données**. |
- | Comme le serveur de base de données exécute des triggers, ils peuvent profiter de ressources serveur améliorées telles que la RAM et le processeur. | + | Comme le serveur de base de données exécute des triggers, ils peuvent profiter de **ressources serveur** améliorées telles que la RAM et le processeur. |
- | En somme, l’avantage du recours aux triggers réside avant tout dans les performances qu’ils peuvent procurer. | + | En somme, l’avantage du recours aux triggers réside avant tout dans les **performances** qu’ils peuvent procurer. |
| | ||
===== Inconvénients ===== | ===== Inconvénients ===== | ||
- | Quoique | + | Même si des normes SQL existent et que les implémentations du langage SQL tendent à s’harmoniser ces dernières années, |
Par exemple, SQL Server dispose de sa propre implémentation, | Par exemple, SQL Server dispose de sa propre implémentation, | ||
- | Ainsi, la première limite des triggers réside dans le fait que le SQL avancé, celui que nous étudions dans ce cours, ne soit pas interopérable. De plus, la syntaxe SQL employée peut sembler relativement lourde en comparaison de celles des langages les plus courants (PHP, Python, Java, etc.). Finalement, ces derniers langages offrent une syntaxe souvent plus étoffée que celle du SQL. | + | Ainsi, la première limite des triggers réside dans le fait que le SQL avancé, celui que nous étudions dans ce cours, ne soit **pas interopérable**. De plus, la syntaxe SQL employée peut sembler relativement lourde en comparaison de celles des langages les plus courants (PHP, Python, Java, etc.). Finalement, ces derniers langages offrent une syntaxe souvent plus étoffée que celle du SQL. |
===== Alternative ===== | ===== Alternative ===== | ||
- | Un trigger | + | Un déclencheur |
===== ===== | ===== ===== | ||
- | Ce choix offre souvent l’avantage de la portabilité, | + | Ce choix offre souvent l’avantage de la **portabilité**, de **l’interopérabilité**. Effectivement, |