• [^] # Re: Avantage pour un néophyte ?

    Posté par (site web personnel) . En réponse à la dépêche PostgreSQL 8.1 disponible. Évalué à 10.

    Voici un exemple simple : Soit une base de données pour gérer les comptes des client d'une banque. Une table sert à déclarer les comptes (une ligne par client) et l'autre sert à déclarer les mouvements (crédit/débit).
    Dans la table clients, chaque compte ne peut exister qu'une fois. Cette contrainte d'intégrité se nomme primary key ou clé primaire.
    On ne peut faire des mouvements que sur des comptes existants. Donc dans la table des mouvements, on va déclarer que le numéro de compte doit exister dans la table des clients; on la nomme foreign key ou clé étrangère.

    L'énorme intérêt d'une base de données avec des contraintes d'intégrité fortes, c'est que l'on peut modifier les données avec tous les outils que l'on veut sans risquer de perdre leur cohérence, même sur un bug de programmation.

    L'intérêt des fonctions et des triggers est le même : on déclare que lorsqu'on insère/modifie/supprime quelque chose dans la base de données, on exécutera la fonction qui vérifiera/modifiera/archivera/etc les données. Par exemple, si je gère du matériel, le moteur A est dans le stock, casier X. Je le confie au labo d'essais.
    Dans la base de données il y a le lien (moteurA)-(stockX) Je modifie avec (moteurA)-(labo essai). Le trigger va alors appeler une fonction qui va stocker dans une table historique que :
    - (moteurA) est enlevé de (stockX) par Mr Machin à telle date.
    - (moteurA) est associé à (labo essai) par Mr Machin à telle date.
    - (stockX) a un (moteurA) de moins certifié par Mr Machin à telle date.
    - (labo essai) possède (moteurA) certifié par Mr Machin à telle date.

    Je peux vous assurer que lorsque l'on a des milliers d'éléments dans une base de données, un défaut d'intégrité tel que (moteurA) n'est pas à l'endroit indiqué, est bien plus difficile à corriger qu'un bug dans un programme.
    J'espère que ces lignes permettront à ceux qui ne sont pas familiarisés avec les contraintes d'intégrité de mieux en percevoir l'intérêt.