# Table de décision

Une table de décision est un outil logique permettant de modéliser facilement un ensemble de choix d’une certaine complexité. Au lieu d’obtenir une série de conditions imbriquées par une succession de SI..., ALORS..., SINON..., il est possible de créer une table les contenant. Ce type de table est particulièrement utile en programmation informatique.

## Exemple d'utilisation

Conditions :
| Il fait beau | o | o | o | o | n | n | n | n |
| La mer est chaude | o | o | n | n | o | o | n | n |
| Il y a des requins | o | n | o | n | o | n | o | n |
| Actions |||||||||
| Je vais à la plage | x | x | x | x | | | | |
| Je reste au lit | | | | | x | x | x | x |
| Je bronze | x | | x | x | | | | |
| Je me baigne | | x | | | | (x) | | |
Considérons la prise de décision suivante :
* S’il ne fait pas beau je reste au lit ;
* S’il fait beau, je vais à la plage ;
* et Si la mer est chaude et qu’il n’y a pas de requin, je me baigne ;
* Sinon, si la mer est froide ou qu'il y a des requins, je bronze.
Cela peut s’écrire de la sorte : (voir tableau ci-contre)
Il y a d'une part, en haut de la table, les conditions, et d'autre part, en dessous, le groupe des actions à mener.
Un rapide examen de la table permet de mieux comprendre les conditions, de supprimer celles qui sont paradoxales (par exemple je reste au lit et je bronze), ou inutiles (s'il ne fait pas beau je ne ferais que rester au lit). Il devient alors possible de compresser la table de décision afin de la rendre plus simple à lire, et donc à traiter.

## Compression

Conditions :
| Il fait beau | o | o | o | o | n |
| La mer est chaude | o | o | n | n | - |
| Il y a des requins | o | n | - | - | - |
| Actions ||||||
| Je vais à la plage | x | x | x | x | |
| Je reste au lit | | | | | x |
| Je bronze | x | | x | x | |
| Je me baigne | | x | | | |
* S'il ne fait pas beau, quelles que soient les autres conditions, je reste au lit. Donc je peux supprimer 3 colonnes sur 4 ayant la valeur 'n' pour 'Il fait beau'.
* On voit aussi que si la mer n'est pas chaude, quelle que soit la présence ou l'absence de requin, je ne me baigne pas, mais préfère bronzer.
* Les valeurs sont donc 'o' pour 'oui', 'n' pour 'non', ou '-' lorsque la condition n'est pas significative.
La table de décision est maintenant compressée et il devient plus aisé de voir les règles du processus de décision. Chaque colonne peut être comprise comme une règle.
Par exemple la première règle est : « Il fait beau et il y a des requins, donc je vais à la plage et je bronze. »

## Application

Le grand avantage de cette représentation matricielle est que la table de décision peut s'écrire sous forme de base de données. Cela permet au programmeur de gérer les conditionalités depuis une requête (SQL par exemple).
Ainsi, pour recenser les actions à exécuter, il devient possible de lancer ce type de requête :
select je_vais_a_la_plage,je_reste_au_lit,je_bronze, je_me_baigne from table_de_decision where il_fait_beau like '%o%' and la_mer_est_chaude like '%n%' and il_y_a_des_requins like '%o%';
La table de décision est créée de la manière suivante :
create table table_de_decision ( je_vais_a_la_plage varchar(3), je_reste_au_lit varchar(3), je_bronze varchar(3), je_me_baigne varchar(3), il_fait_beau varchar(3), la_mer_est_chaude varchar(3), il_y_a_des_requins varchar(3) ) ;
La table est ensuite alimentée ainsi :
insert into table_de_decision (je_vais_a_la_plage,je_reste_au_lit,je_bronze, je_me_baigne,il_fait_beau,la_mer_est_chaude,il_y_a_des_requins) values ('x',null, 'x',null, 'o','o/n','o');
insert into table_de_decision (je_vais_a_la_plage,je_reste_au_lit,je_bronze, je_me_baigne,il_fait_beau,la_mer_est_chaude,il_y_a_des_requins) values ('x',null, null, 'x','o', 'o','n');
insert into table_de_decision (je_vais_a_la_plage,je_reste_au_lit,je_bronze, je_me_baigne,il_fait_beau,la_mer_est_chaude,il_y_a_des_requins) values ('x',null, 'x',null, 'o', 'n','o');
insert into table_de_decision (je_vais_a_la_plage,je_reste_au_lit,je_bronze, je_me_baigne,il_fait_beau,la_mer_est_chaude,il_y_a_des_requins) values ('x',null, null, null, 'o', 'n','n');
insert into table_de_decision (je_vais_a_la_plage,je_reste_au_lit,je_bronze, je_me_baigne,il_fait_beau,la_mer_est_chaude,il_y_a_des_requins) values (null,'x', null,null, 'n','o/n','o/n');
Cette table de décision ainsi renseignée, le type de requête suivant devient alors possible :
select je_vais_a_la_plage,je_reste_au_lit,je_bronze, je_me_baigne from table_de_decision where il_fait_beau like '%o%' and la_mer_est_chaude like '%n%' and il_y_a_des_requins like '%o%';
Les tables de décision possèdent quelques similitudes avec les tables de vérité utilisées dans l'algèbre de Boole, en particulier la faculté de se compresser, et de s'économiser des règles.