13 Copyright © Oracle Corporation, Tous droits réservés. Gérer l'intégrité des données
13-2 Copyright © Oracle Corporation, Tous droits réservés. Objectifs A la fin de ce chapitre, vous pourrez : implémenter des contraintes d'intégrité des données gérer des contraintes d'intégrité obtenir des informations sur les contraintes à partir du dictionnaire de données
13-3 Copyright © Oracle Corporation, Tous droits réservés. Intégrité des données Code d'application Table Données Contrainte d'intégrité Déclencheur de base de données
13-4 Copyright © Oracle Corporation, Tous droits réservés. Types de contrainte Contrainte NOT NULL UNIQUE CLE PRIMAIRE CLE ETRANGERE CHECK Description Indique qu'une colonne ne peut pas contenir de valeurs NULL. Désigne une colonne ou une combinaison de colonnes comme unique. Désigne une colonne ou une combinaison de colonnes comme clé primaire de la table. Désigne une colonne ou une combinaison de colonnes comme clé étrangère dans une contrainte d'intégrité référentielle. Indique une condition à laquelle doit répondre chaque ligne de la table.
13-5 Copyright © Oracle Corporation, Tous droits réservés. Etats des contraintes ENABLE NOVALIDATE Données existantes Nouvelles données DISABLE NOVALIDATE DISABLE VALIDATE = = ENABLE VALIDATE
13-6 Copyright © Oracle Corporation, Tous droits réservés. Vérification des contraintes Instruction LMD Vérifier la validité des contraintes non différées COMMIT Vérifier la validité des contraintes différées
13-7 Copyright © Oracle Corporation, Tous droits réservés. Définir des contraintes immédiates ou différées Utilisez l'instruction SET CONSTRAINTS pour définir des contraintes DEFERRED (différées) ou IMMEDIATE (immédiates). L'instruction ALTER SESSION dispose également d'une clause SET CONSTRAINTS permettant d'affecter la valeur DEFERRED ou IMMEDIATE aux contraintes.
13-8 Copyright © Oracle Corporation, Tous droits réservés. Application des contraintes UNIQUE et de clé primaire Un index est-il disponible ? Oui Non Oui Non Créez un index non-unique Créez un index unique N'utilisez pas d'index Utilisez l'index existant Clé activée ? Contrainte pouvant être différée ? S'agit-il d'un index non- unique ? Oui Non/Oui Non
13-9 Copyright © Oracle Corporation, Tous droits réservés. Remarques sur la clé étrangère Solution appropriéeAction souhaitée Supprimer la table parent Mise en cascade des contraintes Vider la table parent Désactiver ou supprimer la clé étrangère Exécuter l'instruction S'assurer que le LMD sur la table enfant tablespace contenant la clé parent est en ligne Utiliser la clause CASCADE CONSTRAINTS Supprimer le tablespace contenant la table parent
13-10 Copyright © Oracle Corporation, Tous droits réservés. Définir des contraintes lors de la création d'une table CREATE TABLE hr.employee( id NUMBER(7) CONSTRAINT employee_id_pk PRIMARY KEY DEFERRABLE USING INDEX STORAGE(INITIAL 100K NEXT 100K) TABLESPACE indx, last_name VARCHAR2(25) CONSTRAINT employee_last_name_nn NOT NULL, dept_id NUMBER(7)) TABLESPACE users;
13-11 Copyright © Oracle Corporation, Tous droits réservés. Instructions de définition des contraintes Contraintes UNIQUE et de clé primaire : –placent des index dans un tablespace distinct, –utilisent des index non-uniques si les chargements en masse sont fréquents. Les clés étrangères d'autoréférencement : –définissent ou activent les clés étrangères après le premier chargement de données, –diffèrent la vérification des contraintes.
13-12 Copyright © Oracle Corporation, Tous droits réservés. Activer les contraintes Table non verrouillée Les clés primaires et uniques doivent utiliser des index non-uniques ENABLE NOVALIDATE ALTER TABLE hr.departments ENABLE NOVALIDATE CONSTRAINT dept_pk;
13-13 Copyright © Oracle Corporation, Tous droits réservés. Activer les contraintes Table verrouillée Peut utiliser des index uniques ou non-uniques Requiert des données de table valides ENABLE VALIDATE ALTER TABLE hr.employees ENABLE VALIDATE CONSTRAINT emp_dept_fk;
13-14 Copyright © Oracle Corporation, Tous droits réservés. Utiliser la table EXCEPTIONS Exécutez le script utlexcpt1.sql pour créer la table EXCEPTIONS. Exécutez l'instruction ALTER TABLE avec l'option EXCEPTIONS. Lancez une sous-interrogation sur la table EXCEPTIONS pour identifier les lignes contenant des données non valides. Corrigez les erreurs. Réexécutez l'instruction ALTER TABLE pour activer la contrainte.
13-15 Copyright © Oracle Corporation, Tous droits réservés. Obtenir des informations sur les contraintes Interrogez les vues suivantes pour obtenir des informations sur les contraintes : DBA_CONSTRAINTS DBA_CONS_COLUMNS
13-16 Copyright © Oracle Corporation, Tous droits réservés. Synthèse Ce chapitre vous a permis d'apprendre à : implémenter l'intégrité des données utiliser une stratégie appropriée pour créer et gérer des contraintes obtenir des informations à partir du dictionnaire de données
13-17 Copyright © Oracle Corporation, Tous droits réservés. Présentation de l'exercice Dans cet exercice, vous allez : créer des contraintes activer des contraintes UNIQUE créer une table EXCEPTIONS identifier les cas de violation de contrainte détectés dans une table, corriger les erreurs et réactiver les contraintes