Cet article présente le concept des enregistrements liés et de l'intégrité référentielle, et décrit comment ActivityInfo applique cette intégrité référentielle.
Introduction
Les champs de référence vous permettent de référencer un enregistrement à partir d'un autre enregistrement dans un formulaire différent. Par exemple, un enregistrement décrivant une école peut référencer un formulaire "Province", indiquant son emplacement. Cela crée une relation entre les formulaires École et Province.
Lorsque vous commencez à ajouter des enregistrements aux formulaires École et Province, vous créez également des relations entre les enregistrements des écoles et des provinces.
Dans le diagramme ci-dessus, chaque école référence une seule province. Lorsqu'un enregistrement référence un autre enregistrement, on dit que les deux enregistrements sont liés.
L'intégrité référentielle est une propriété des données qui stipule que toutes les références sont valides. Cela signifie que chaque fois qu'un enregistrement référence une valeur, il doit exister un enregistrement de référence qui contient cette valeur. Dans le diagramme ci-dessus, nous pouvons voir que chaque école a une référence valide à une province. Ainsi, les deux formulaires ont une intégrité référentielle.
Les champs de sous-formulaire créent également des relations entre les enregistrements parents et enfants.
Modifier les enregistrements
La modification d'un enregistrement dans ActivityInfo n'affecte pas l'intégrité référentielle. Par exemple, renommer la province "Nord" en "Nordique" n'affecte pas la relation avec les écoles "Kirby" et "Wellsboro". En effet, ActivityInfo utilise un ID d'enregistrement interne, auto-généré et immuable pour stocker la relation entre les enregistrements.
Ces identifiants internes sont généralement cachés à l'utilisateur. Au lieu de cela, ActivityInfo affiche l'enregistrement référencé en utilisant les champs clés de ce formulaire. Cependant, vous pouvez afficher l'ID d'enregistrement dans la vue Tableau en cliquant sur Sélectionner les colonnes et en cochant "ID d'enregistrement".
Supprimer les enregistrements parents
Lorsque vous supprimez un enregistrement d'un formulaire qui a un sous-formulaire, tous les enregistrements enfants sont automatiquement supprimés, préservant ainsi l'intégrité référentielle.
Lorsque vous restaurez un enregistrement parent supprimé, tous ses enregistrements enfants sont également restaurés.
Supprimer les enregistrements référencés
La suppression d'un enregistrement qui est référencé par d'autres enregistrements compromettrait l'intégrité référentielle. Si vous supprimiez la province "Sud", alors l'école Dalton n'aurait plus de référence valide à une province. Vos données seraient incomplètes et vous ne pourriez plus savoir où se trouvent les écoles.
Pour cette raison, ActivityInfo n'autorisera généralement pas la suppression d'un enregistrement lorsqu'il est référencé par d'autres enregistrements.
D'autre part, la province "Est" n'est référencée par aucune des écoles, elle peut donc être supprimée sans compromettre l'intégrité référentielle des deux formulaires.
Exceptions
Il existe quelques cas où ActivityInfo ne peut pas ou n'applique pas l'intégrité référentielle.
Travailler hors ligne
ActivityInfo n'est pas en mesure d'appliquer pleinement l'intégrité référentielle lorsque les données sont collectées ou supprimées hors ligne.
Par exemple, si un agent de terrain ajoute un nouvel enregistrement d'école qui référence la province "Est" alors qu'il est déconnecté du serveur, un administrateur peut supprimer la province "Est" en même temps. Puisqu'il n'y a pas d'enregistrements sur le serveur qui référencent la province "Est", ActivityInfo autorise la suppression de l'enregistrement.
Cependant, lorsque l'agent de terrain revient au bureau après une semaine sur le terrain et synchronise, le nouvel enregistrement arrivera sur le serveur avec une référence supprimée à la province "Est" supprimée, violant l'intégrité référentielle.
Dans ce cas, l'intégrité référentielle peut être restaurée en restaurant la province "Est" supprimée.
Références entre des bases de données appartenant à des comptes de facturation différents
ActivityInfo permet aux formulaires de référencer des formulaires dans d'autres bases de données, même dans des bases de données appartenant à d'autres organisations avec des comptes de facturation différents. Il s'agit d'une fonctionnalité clé qui soutient la coordination humanitaire : de nombreuses organisations différentes travaillant dans la même zone géographique peuvent chacune référencer des ensembles de données opérationnels communs pour soutenir la coordination.
Par exemple, une organisation, l'Organisation A, pourrait collecter des données sur les écoles dans une région. Une organisation partenaire B pourrait alors ajouter sa propre base de données ActivityInfo et mener une évaluation de ces écoles. Puisque les organisations travaillent ensemble, l'Organisation B référence le formulaire Écoles appartenant à l'Organisation A :
Dans ce cas, le formulaire d'évaluation des écoles et le formulaire École appartiennent à deux organisations différentes. L'intégrité référentielle reste importante, mais le droit du propriétaire des données à contrôler ses propres données l'est aussi.
Si un administrateur de l'Organisation A essaie de supprimer l'école "Dalton", il sera averti des conséquences sur les données de l'Organisation B, mais il sera toujours autorisé à procéder à la suppression.
Propriétaires de base de données
Les propriétaires de base de données sont exceptionnellement autorisés à supprimer des enregistrements qui sont référencés par d'autres enregistrements, même si cela compromet l'intégrité référentielle.
API
L'API d'ActivityInfo n'applique pas actuellement l'intégrité référentielle pour les enregistrements référencés.
La suppression d'un enregistrement parent via l'API supprime automatiquement ses sous-enregistrements également.