INTEGRITE DES DONNEES ET BASE DE DONNEES L'application de l'intégrité des données garantit la qualité des données stockées dans la base. Par exemple, si un employé est défini avec un ID d'employé égal à 123, la base de données ne doit pas autoriser qu'un autre employé ait la même valeur d'ID. Si une colonne employe_evaluation est destinée à accueillir des valeurs comprises entre 1 et 5, la base de données ne doit pas accepter de valeur en dehors de cette plage. Si la table contient une colonne dept_id qui stocke le numéro de service de l'employé, la base de données ne doit accepter que des valeurs correspondant bien aux identificateurs de service de la société. Lors de la planification des tables, deux étapes importantes consistent d'une part à identifier les valeurs valides pour une colonne et d'autre part à décider de la façon d'appliquer l'intégrité des données dans cette colonne. L'intégrité des données se répartit entre les catégories suivantes : Intégrité d'entité Intégrité de domaine Intégrité référentielle * Intégrité d'entité ou de relation : L'intégrité d'entité définit une ligne comme étant une entité unique pour une table particulière. Elle garantit l'intégrité des colonnes d'identification ou de la clé primaire d'une table, par le biais d'index UNIQUE, de contraintes UNIQUE ou de contraintes PRIMARY KEY. * Intégrité de domaine : L'intégrité de domaine fait référence à la fourchette (au domaine) des entrées valides pour une colonne spécifique. Vous pouvez mettre en application l'intégrité de domaine pour restreindre le type, à l'aide des types de données, le format, à l'aide des contraintes CHECK et des règles, ou la fourchette des valeurs possibles, à l'aide des contraintes FOREIGN KEY et CHECK, des définitions DEFAULT et NOT NULL, et des règles. * Intégrité référentielle : L'intégrité référentielle préserve les relations définies entre les tables lors de l'insertion ou de la suppression de lignes. Dans SQL Server 2005, l'intégrité référentielle est fondée sur les relations entre les clés étrangères et les clés primaires ou entre les clés étrangères et les clés uniques, via les contraintes FOREIGN KEY et CHECK. Elle garantit la cohérence des valeurs de clés entre les tables. Ce type de cohérence impose qu'il n'y ait aucune référence à des valeurs inexistantes et que, si la valeur d'une clé change, toutes les références qui y sont faites soient modifiées en conséquence dans l'ensemble de la base de données. Lorsque vous mettez en application l'intégrité référentielle, SQL Server interdit aux utilisateurs d'effectuer les opérations suivantes : ajouter ou modifier des lignes dans une table connexe lorsqu'il n'y a aucune ligne associée dans la table primaire ; changer des valeurs dans une table primaire qui engendreraient des lignes orphelines dans une table connexe ; supprimer des lignes dans une table primaire si des lignes connexes correspondantes existent. Page 1 sur 2 INTEGRITE DES DONNEES ET BASE DE DONNEES Les options de l’intégrité référentielle : Sans intégrité référentielle les deux tables ne sont pas liées par une contrainte. Exemple : Attention ! le SGBD refusera d'appliquer l'intégrité référentielle si les deux champs liés par la relation ne possèdent pas le même type de données. Seule exception : si le champ côté 1 est du type NuméroAuto, il doit être du type numérique (entier long) du côté n. De même, le SGBD refusera d'appliquer l'intégrité référentielle si les tables contiennent déjà des données, dont certaines ont des valeurs empêchant l'intégrité référentielle de s'appliquer. Exemple : un nom de commune dans la table "Personnes" ne figure pas dans la table "Communes". Si nous demandons l'intégrité référentielle (et il est très fortement conseillé de le faire !), le système nous propose deux autres choix. Le premier, "Mettre à jour en cascade les champs correspondants", signifie que si nous modifions l'écriture du nom d'une commune du côté 1 de la relation, cette modification sera reportée partout du côté n. D'une manière générale, il est recommandé d'activer cette mise à jour en cascade. Si nous ne le faisons pas, et si nous tentons de modifier un nom de commune (pour corriger une faute d'orthographe, par exemple), le système nous arrêtera, avec le message suivant : "Impossible de supprimer ou de modifier l'enregistrement car la table 'Personnes' comprend des enregistrements connexes". C'est clair, n'est-ce pas ? Le second choix, "Effacer en cascade les enregistrements correspondants", signifie que si nous supprimons une donnée du côté 1 de la relation, tous les enregistrements utilisant cette donnée du côté n seront supprimés. Cela implique que, si nous supprimons par erreur un nom de commune dans la table "Communes", nous supprimons en même temps de la table "Personnes" toutes les personnes habitant cette commune. Il ne faut donc pas activer cette option, sauf momentanément et en cas de besoin spécifique. Supposons par exemple que des noms de fournisseurs se trouvent du côté 1 de la relation, et des noms de produits du côté n. Si un fournisseur disparaît, nous pouvons activer l'effacement en cascade. Quand nous supprimons le nom du fournisseur côté 1, tous ses produits disparaissent du côté n. Nous effectuons ainsi la mise à jour de la base. Ensuite, nous décochons l'effacement en cascade pour éviter tout risque d'effacement involontaire Page 2 sur 2