IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PL/SQL Oracle Discussion :

Contrainte d'intégrité et trigger


Sujet :

PL/SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    988
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 988
    Par défaut Contrainte d'intégrité et trigger
    Bonjour,
    Je viens delire ces propos à propos des triggers de base de données


    A la différence d'une contrainte d'intégrité, un déclencheur de base de données défini pour appliquer une règle d'intégrité ne vérifie pas les données
    chargées dans une table. Il est donc conseillé d'utiliser des déclencheurs de base de données uniquement lorsqu'une règle d'intégrité ne peut pas
    être appliquée par des contraintes d'intégrité.
    J'avoue que je ne comprends pas grand chose à cette phrase.
    Pouvez vous me dire pourquoi un trigger défini pour appliquer une règle d'intégrité ne vérifie pas les données chargées dans une table.
    N'est ce pas là le rôle d'une contrainte d'intégrité?
    Pouvez-vous me donner un exemple, je vous en remercie beaucoup, je pense que cela me parlera plus.

    Mercie beaucoup à vous.
    Cordialement.
    new_wave

  2. #2
    Expert confirmé Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Par défaut
    Difficile à dire ce que la personne qui a dit voulait dire et ce que la personne qui a noté a compris de ces affirmations. Probablement qu'il s'agit de ces propos:
    How Triggers and Constraints Differ

  3. #3
    Membre Expert

    Homme Profil pro
    Inscrit en
    Mars 2010
    Messages
    536
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 536
    Par défaut
    Utiliser un trigger pour valider une contrainte d'intégrité est une erreur fatale dans un environnement multi-user. Comme les selects ne bloquent pas les update/delete/insert/merge et vice versa (read consistency concept), lorsque vous vérifiez une contrainte d'intégrité dans un environnement concurrent les modifications de l'un peuvent ne pas être visibles par l'autre et la contrainte sera mal validée. Si vous insistez à utiliser le trigger dans ce contexte vous devriez alors sérialiser l'accès à votre table via un explicit "lock table". Cela rendrait votre application non performante et uni-user!!!

    Je vous invite à lire ce lien pour plus de détails:

    http://www.oracle.com/technetwork/is...om-101055.html

  4. #4
    Membre Expert Avatar de Yanika_bzh
    Homme Profil pro
    Responsable Applicatif et R&D
    Inscrit en
    Février 2006
    Messages
    1 144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Responsable Applicatif et R&D
    Secteur : Finance

    Informations forums :
    Inscription : Février 2006
    Messages : 1 144
    Par défaut
    Vrai pour les contraintes d'intégrité relationnelle, mais moins vrai pour les contraintes d'intégrité par condition booléenne (CHECK)

  5. #5
    Expert confirmé Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Par défaut
    Citation Envoyé par Mohamed.Houri Voir le message
    Utiliser un trigger pour valider une contrainte d'intégrité est une erreur fatale dans un environnement multi-user. Comme les selects ne bloquent pas les update/delete/insert/merge et vice versa (read consistency concept), lorsque vous vérifiez une contrainte d'intégrité dans un environnement concurrent les modifications de l'un peuvent ne pas être visibles par l'autre et la contrainte sera mal validée. Si vous insistez à utiliser le trigger dans ce contexte vous devriez alors sérialiser l'accès à votre table via un explicit "lock table". Cela rendrait votre application non performante et uni-user!!!

    Je vous invite à lire ce lien pour plus de détails:

    http://www.oracle.com/technetwork/is...om-101055.html
    Vous allez un peu trop vite et l’exemple du Tom Kyte parle de quelque chose d’assez particulière. Lisez aussi: Triggers for Ensuring Referential Integrity

  6. #6
    Membre Expert

    Homme Profil pro
    Inscrit en
    Mars 2010
    Messages
    536
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 536
    Par défaut
    Citation Envoyé par mnitu Voir le message
    Vous allez un peu trop vite et l’exemple du Tom Kyte parle de quelque chose d’assez particulière. Lisez aussi: Triggers for Ensuring Referential Integrity
    Marius,

    Preferez vous une simple contrainte étrangère

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    alter table emp add constraint emp_fk foreign key(deptno) references dept;
    create index emp_fk_ind on emp(deptno);
    à un trigger avec plusieurs lignes de code ou de toute façons nous sommes obligés de sérialiser les modifications

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    CURSOR Dummy_cursor (Dn NUMBER) IS
        SELECT Deptno FROM dept
        WHERE Deptno = Dn
        FOR UPDATE OF Deptno;
    C'est pour cela que je préfère toujours quand cela est possible d'utiliser les contraintes d'intégrité (check, fk, etc..) au lieu et place des triggers.

    http://asktom.oracle.com/pls/asktom/...53473305799476

  7. #7
    Membre chevronné
    Profil pro
    Inscrit en
    Février 2010
    Messages
    412
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 412
    Par défaut
    Citation Envoyé par Mohamed.Houri Voir le message
    C'est pour cela que je préfère toujours quand cela est possible d'utiliser les contraintes d'intégrité (check, fk, etc..) au lieu et place des triggers.
    De 1 c'est le role du SGBDR d'assurer ce genre de chose avec les contraintes. Sinon on peut prendre un NoSQL.
    Et pis oracle utilise les contraintes dans le CBO, donc c'est mieux de les utiliser.

  8. #8
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Citation Envoyé par Rams7s Voir le message
    Et pis oracle utilise les contraintes dans le CBO, donc c'est mieux de les utiliser.
    Pas toutes malheureusement, à ma connaissance et sur 11gR1 il n'utilise pas les contraintes CHECK (contrairement au concurrent de chez Microsoft) !

    Ou alors avec une astuce que je n'ai pas trouvée !

  9. #9
    Expert confirmé Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Par défaut
    Citation Envoyé par Mohamed.Houri Voir le message
    Marius,

    Preferez vous une simple contrainte étrangère

    ...
    Ce n’est pas ça que je vous ai dit mais simplement qu’il y des cases qui ne sont pas gérable avec les contraints.

  10. #10
    Expert confirmé
    Avatar de pachot
    Homme Profil pro
    Developer Advocate YugabyteDB
    Inscrit en
    Novembre 2007
    Messages
    1 822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Suisse

    Informations professionnelles :
    Activité : Developer Advocate YugabyteDB
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2007
    Messages : 1 822
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    Citation Envoyé par mnitu Voir le message
    Vous allez un peu trop vite et l’exemple du Tom Kyte parle de quelque chose d’assez particulière. Lisez aussi: Triggers for Ensuring Referential Integrity
    Oui, les triggers présentés dans Triggers for Ensuring Referential Integrity fonctionnent, mais c'est une catastrophe pour un système multi-user.
    L'exemple 'Foreign Key Trigger for Child Table' empêche de faire 2 inserts en même temps lorsqu'ils ont le même parent. Les inserts seront sérialisés.

    En fait, coder de l'intégrité qui fait référence à autre chose que l'enregistrement en cours obligera la plupart du temps à vérouiller très large.

    Cordialement,
    Franck.

  11. #11
    Rédacteur

    Homme Profil pro
    Consultant / formateur Oracle et SQL Server
    Inscrit en
    Décembre 2002
    Messages
    3 461
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant / formateur Oracle et SQL Server

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 461
    Par défaut
    Citation Envoyé par new_wave Voir le message
    ...
    Je viens delire ces propos à propos des triggers de base de données
    Et si veut on les lire nous aussi, de quel site Web ou livre s'agit-il ?

Discussions similaires

  1. Merise : Contrainte d'intégrite fonctionnelle
    Par new_wave dans le forum Décisions SGBD
    Réponses: 2
    Dernier message: 22/06/2022, 11h51
  2. [9.3] TRIGGER qui viole la contrainte d'intégrité
    Par stc074 dans le forum Requêtes
    Réponses: 2
    Dernier message: 27/06/2015, 01h58
  3. Contraintes d'Intégrité et Triggers
    Par ch.vankemseke dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 14/04/2008, 13h03
  4. [debutant] Contraintes d'intégrité définies sur un objet
    Par maysa dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 25/05/2004, 14h57
  5. Question sur les contraintes d'intégrités
    Par eGGyyS dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 27/04/2004, 13h51

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo