L'intégrité référentielle est discutée dans ce tutoriel dans le contexte de la base de données relationnelle. L'intégrité référentielle est une propriété de données, indiquant que toutes ses références sont valides. Deux tables sont concernées ici. L'un est appelé la table référencée ou parentale. Ce tableau référencé a une clé primaire, qui peut être composée d'une ou plusieurs colonnes. L'autre tableau a une clé étrangère dont les valeurs sont les mêmes que celles de la clé principale du tableau référencé. L'autre table est appelée table d'enfants à la table parentale.
Le nombre de colonnes qui composent la clé étrangère dans la table des enfants sont les mêmes que celles qui composent la clé principale du tableau référencé (parent). Toutes les valeurs de clé étrangère se trouvent dans la colonne de la clé primaire. Cependant, les valeurs dans la colonne de clé étrangère peuvent se répéter dans le tableau des enfants.
La table enfant a sa propre clé principale qui est différente de la colonne de clé étrangère qu'il a. La table des enfants est également appelée le tableau référencé.
«Toutes ses références sont valables» signifie qu'une clé étrangère dans le tableau des enfants pointe vers une ligne dans le tableau référencé. Cette clé étrangère dans la table enfant et la clé principale du tableau (parent) référencé sont la même valeur. Plus d'une clé étrangère dans le tableau des enfants peut indiquer une seule ligne dans le tableau référencé.
Cet article explique les contraintes qui sont naturellement associées à la clé étrangère du tableau des enfants et la même clé principale du tableau référencé. Si les contraintes sont respectées, les données (lignes correspondantes) dans les deux tableaux forment l'intégrité, sans erreurs, tout étant égal; D'où le terme intégrité référentielle."
Illustration avec deux tables
La notation du tableau des deux tables peut être:
Ventes (SaleID, Datesold, CustomerID, Employé)
et
Clients (CustomerId, CustomName, téléphone, adresse, ville, région, code postal, pays)
CustomerId dans le tableau des ventes est une clé étrangère avec un tableau de bord souligne. CustomerId dans le tableau client est une clé principale avec un seul soulignement. La clé principale pour le tableau des ventes est SaleID, avec un seul soulignement. SaleID dans le tableau des ventes dépend de CustomerId ainsi que cela dépend de l'attribut Datesold et de l'attribut des employés (colonne).
Les tables avec des données sont les suivantes:
Table de vente
Saleid | datesold | N ° de client | employé |
1 | 07/06/23 | 1 | John Jones |
2 | 07/07/23 | 2 | Barbara Baker |
3 | 07/07/23 | 2 | Peter Lewis |
4 | 07/08/23 | 1 | John Jones |
5 | 07/09/23 | 3 | Barbara Baker |
6 | 07/10/23 | 1 | Barbara Baker |
7 | 07/11/23 | 1 | Barbara Baker |
8 | 07/12/23 | 1 | John Jones |
9 | 13/07/23 | 2 | Peter Lewis |
Table des clients
Pour les deux tables, les clients (individus) vont dans un magasin et achètent différents produits à différents jours. Les produits achetés ne sont pas affichés. Le tableau des clients a les adresses des clients de la même ville. Le tableau des ventes a les noms des employés qui ont servi les clients individuels et ont d'autres données.
Dans le tableau des ventes, CustomerId est une clé étrangère. Dans le tableau des clients, CustomerId est une clé principale. Chaque clé étrangère du tableau des ventes se produit dans le tableau des clients une fois. Autrement dit, chaque clé étrangère du tableau de vente fait référence à une clé primaire et fait donc référence à une ligne distincte dans le tableau des clients. L'intégrité des données (référentielle) échoue si ce n'est pas le cas.
Valeur nulle et clés étrangères
Une clé étrangère dans le tableau des enfants doit faire référence à une ligne, via la clé primaire, du tableau parent. Toutes les clés principales de la table parent sont uniques. Les clés étrangères de la colonne des clés étrangères de la table des enfants, qui se trouvent toutes dans la table parentale, n'ont pas à être unique. Des répétitions de clés étrangères devraient être attendues. Ci-dessus, le tableau des ventes est une table d'enfants et la table des clients est une table parentale. Considérez ces deux tables comme appartenant à la base de données d'un magasin de commodité. Les clients sont des personnes qui achètent dans la boutique.
Imaginez que le client avec CustomerID 2 vous a offensé, le propriétaire de la boutique; Par exemple, il a essayé de voler, et vous l'avez interdit de venir à nouveau pour acheter dans votre boutique. Cela signifie que son nom doit être supprimé de votre liste de clients. Son achat dans le tableau des ventes est dans le passé, s'est produit sans aucun problème, et doit donc rester.
Dans ce cas, tous les clients de 2 dans le tableau de vente doivent être remplacés par null (rien), ce qui signifie aucune référence au tableau d'une ligne des clients qui a été supprimé. Pour la table des clients ci-dessus, deux lignes resteront après sa rangée (CustomerId et le reste de ses informations d'identification) a été supprimée.
Il existe deux façons d'annuler la ligne dans la table des clients, par l'ordinateur (système de gestion de la base de données) comme suit:
Quelle que soit la façon dont la valeur nul reste dans le tableau des ventes comme la clé étrangère pour les lignes correspondantes du client supprimées. Les références de valeur nulle (pointe vers) aucune ligne dans le tableau des clients.
Ainsi, pour de telles raisons, une clé étrangère peut avoir une valeur nulle. C'est à voir avec l'intégrité référentielle!
Mise à jour des tables enfants et parents
Mise à jour signifie modifier. La modification de toute cellule du tableau des enfants (ventes) (même le SaleID), à l'exception de la clé étrangère, ne cause pas vraiment de mal à la table des enfants ou aux correspondances du tableau parent (clients). Par exemple, si la date a été tapée à tort par erreur, la date correcte doit être tapée.
La modification de toute cellule dans le tableau parent (clients), à l'exception de la clé principale, ne cause pas vraiment de mal au tableau parent (clients) ou aux correspondances du tableau des enfants (ventes). Par exemple, si le client a changé sa rue mais est toujours dans le quartier, le changement de son adresse dans le tableau des clients ne nuise pas aux correspondances de la table de l'enfant et des parents.
Cependant, la modification de la valeur de la clé étrangère dans le tableau des enfants signifie que toutes les mêmes valeurs de clé étrangère dans la table enfant doivent être modifiées à cette valeur particulière, et la valeur de clé primaire correspondante dans la table parent doit également être modifiée , à cette même valeur aussi. C'est en cascade.
Une clé étrangère de valeur nulle peut-elle être modifiée? - Eh bien, oui: si le client ci-dessus revient après six mois et s'excuse, et que vous, le propriétaire, lui pardonnez, et si seulement ses lignes dans la table de vente avaient des valeurs nulles, alors son nom et ses références seront entrés dans le Tableau des clients, en bas, avec un nouveau clientId; Et toutes les valeurs nulles en tant que clés étrangères dans le tableau enfant (ventes), seront remplacées par ce nouveau clientId. Cependant, s'il y avait d'autres lignes dans la table des enfants avec des valeurs nulles qui ne lui appartiennent pas, alors toutes les valeurs nulles, y compris la sienne, resteront; Et toutes ses nouvelles ventes seront entrées dans le tableau des ventes à nouveau, au bas du tableau des ventes.
Suppression des tables enfants et parents
Il n'a pas de sens de supprimer une valeur de cellule de colonne dans la table enfant ou parent, sauf si c'est pour une colonne dont la valeur cellulaire peut être vide. Vide ne signifie pas null. Vide signifie vide.
Cependant, une ligne entière dans la table enfant ou la table parent peut être supprimée. Supposons qu'il y a de fausses lignes dans le tableau enfant (ventes); Si ces lignes sont supprimées (y compris entièrement leurs soldats et clés étrangères), il n'y aura pas de problème. Les clients ont soit d'autres lignes réelles dans la table des enfants ou n'ont tout simplement pas montré leur volonté d'acheter dans la boutique et n'ont jamais rien acheté. - Ils achèteront un jour dans un avenir proche.
D'un autre côté, s'il y a un faux client avec de fausses ventes lorsque sa ligne dans la table des clients est supprimée, toutes ses fausses lignes de vente dans la table de vente doivent être supprimées. C'est en cascade. Cela peut se produire lorsqu'un employé réalise de vraies ventes, enregistre de fausses informations et signe comme un autre employé dans le même tableau. Étant donné que les clés étrangères correspondantes dans la table enfant sont les mêmes que la clé principale de la table parent, alors cette même valeur relie les deux tables.
Pour résoudre ce problème, chaque employé devrait avoir son propre livre d'exercices de vente si l'ordinateur n'est pas utilisé. Si l'ordinateur est utilisé, chaque employé doit avoir un nom d'utilisateur et un mot de passe de connexion à l'application du système de gestion de la base de données, qui enregistre automatiquement le nom de l'employé contre toutes ses actions.
Citations
Les trois paragraphes suivants sont des citations de Wikipedia:
«L'intégrité référentielle est une propriété de données, indiquant que toutes ses références sont valides.
Dans le contexte des bases de données relationnelles, il faut que si une valeur d'un attribut (colonne) d'une relation (tableau) fait référence à une valeur d'un autre attribut (dans la même relation ou une relation différente), alors la valeur référencée doit exister.
L'intégrité référentielle est un concept de base de données qui garantit que les relations entre les tables restent cohérentes. Lorsqu'un tableau a une clé étrangère à un autre tableau, le concept d'intégrité référentiel indique que vous ne pouvez pas ajouter un enregistrement au tableau qui contient la clé étrangère à moins qu'il n'y ait un enregistrement correspondant dans le tableau lié."
Actions référentielles
Sans l'ordinateur, il est difficile d'appliquer l'intégrité référentielle. Cela conduit à des erreurs comptables. Avec l'ordinateur, l'intégrité référentielle peut être appliquée en appliquant la cascade et d'autres actions en programmant le système de gestion de la base de données.
CASCADE
Cela signifie: mettre à jour ou supprimer la cascade.
LIMITER
Cela signifie: ne mettez pas à jour ou ne supprimez pas les lignes connectées dans la table de l'enfant et des parents.
PAS D'ACTION
Restreindre vérifie les connexions des lignes dans les deux tables avant d'essayer de mettre à jour ou de supprimer. Aucune action n'est similaire à restreindre mais essaie de mettre à jour ou de supprimer avant de vérifier les connexions dans les deux tables.
Restrection publiera un message d'erreur selon lequel une tentative de mise à jour ou de supprimer une ligne a été faite, malgré le fait qu'il y a une ligne correspondante dans l'autre tableau qui n'aurait pas été mis à jour ou supprimé. Aucune action ne mettrait à jour ou supprimerait la ligne, puis ne remettrait un message d'erreur selon lequel la ligne a été mise à jour ou supprimée, malgré le fait qu'il existe une ligne correspondante dans l'autre tableau. Bien sûr, cela conduirait à une mauvaise comptabilité à moins que l'utilisateur ne soit en train de gérer les deux changements de table manuellement.
Si aucune ligne correspondante n'existe dans l'autre tableau, alors mettez à jour ou supprimez la ligne, que l'application était ou non restreinte ou aucune action.
Régler null
Avec cette action appliquée, si une ligne dans la table parent est supprimée, toutes les clés étrangères des lignes correspondantes dans la table d'enfants seraient définies sur NULL.
DÉFINIR PAR DEFAUT
Avec cette action appliquée, si une ligne dans la table parent est supprimée, toutes les clés étrangères des lignes correspondantes dans la table enfant seraient définies sur la valeur par défaut choisie par l'utilisateur de la base de données.
Conclusion
L'intégrité référentielle est un concept de base de données qui garantit que les relations entre les tables restent cohérentes. Lorsqu'un tableau a une clé étrangère à un autre tableau, le concept d'intégrité référentiel indique que vous ne pouvez pas ajouter un enregistrement au tableau qui contient la clé étrangère à moins qu'il n'y ait un enregistrement correspondant dans le tableau lié.
Lorsque les tables sont conservées dans les livres, il devient difficile de faire respecter l'intégrité référentielle. Cependant, lorsqu'un SGBD conserve les tables dans un ordinateur, ces actions référentielles sont appliquées par un programmeur.