Ajout ou suppression de clés étrangères
Une clé étrangère est un champ dans une table de base de données qui référence la clé primaire d'une autre table. La clé étrangère est définie comme une contrainte sur la colonne associée dans la table de base de données.
Lorsque la contrainte de clé étrangère est en place, le champ doit être vide, ou la valeur doit pointer vers une valeur existante pour la clé primaire dans la table référencée. Par exemple, le champ SiteUID d'une équipe est une clé étrangère qui fait référence à l'UID d'un site. Par conséquent, la valeur de SiteUID pour une équipe doit être vide ou correspondre à une valeur d'UID existante pour un site.
La contrainte de clé étrangère empêche également la suppression des lignes de la table de base de données qui sont référencées par des champs de clé étrangère. Par exemple, si une équipe à une valeur de SiteUID de 5, alors, étant donné que la contrainte de clé étrangère sur le champ SiteUID fait référence à l'UID sur un site, le site ayant la valeur d'UID de 5 ne peut pas être supprimé.
Ajout d'une clé étrangère
Pour ajouter une clé étrangère à une table de base de données existante :
1. Créez un nouveau bloc de construction qui s'étend du bloc de construction PTC contenant le gestionnaire de l'entité associée jusqu'à la table de base de données. Ces gestionnaires sont spécifiés dans le tableau DefaultGlobalManagerConfiguration de la page Configuration de l'objet PTC.Base.Manager. Par exemple, pour ajouter une clé étrangère à un ordre de travail, accédez à l'objet PTC.JobOrderImpl.Manager.
Pour plus d'informations, consultez la rubrique Créer un nouveau bloc de construction.
2. Accédez à l'objet de gestionnaire de votre nouveau bloc de construction.
3. Sous Services, remplacez le service GetDBInfo pour l'entité à laquelle vous ajoutez la clé étrangère. Par exemple, pour ajouter une clé étrangère à une table de base de données pour des ordres de travail, remplacez le service GetDBInfo sur l'objet PTC.JobOrderImpl.Manager.
4. Dans l'éditeur de script, faites défiler vers le bas jusqu'à l'entrée correspondant à la forme de données à laquelle vous souhaitez ajouter la clé étrangère.
5. Ajoutez un tableau foreignKeys pour la forme de données, avec les propriétés suivantes :
identifier : nom de l'entité dans la base de données. Si cette valeur n'est pas spécifiée, le système la génère automatiquement au format <nom_de_table>_<nom_de_colonne>_fk. Si cette valeur est spécifiée, elle doit être unique pour les valeurs spécifiées et pour toutes les valeurs générées automatiquement. La longueur maximale autorisée pour la valeur est celle autorisée par la base de données pour les identificateurs.
name : nom du champ de la forme de données actuelle à utiliser comme clé étrangère. Le type de base du champ de clé étrangère doit correspondre au type de base du champ référencé. Par exemple, si le champ référencé présente le type de base STRING, le champ de clé étrangère doit également comporter le type de base STRING.
referenceDataShapeName : forme de données de la table de base de données référencée.
referenceFieldName : nom du champ contenant la valeur référencée.
onDelete : impact sur les instances de la forme de données actuelle lorsque des instances de la forme de données référencées sont supprimées.
deleteReference : impact sur les instances de la forme de données référencées lorsque des instances de la forme de données courante sont supprimées.
Pour plus d'informations sur les comportements en cas de suppression, consultez la rubrique Définition du comportement de l'action Supprimer avec des clés étrangères.
6. Cliquez sur Enregistrer pour enregistrer les modifications apportées au service.
7. Accédez à l'objet PTC.DBConnection.Manager.
8. Synchroniser les informations de base de données avec le schéma de base de données. Pour plus d'informations, consultez la rubrique Synchronisation des informations et du schéma de base de données.
Suppression d'une clé étrangère
Pour supprimer une clé étrangère :
* 
Ne supprimez pas les clés étrangères qui sont définies en standard. Supprimez uniquement les clés étrangères que vous avez ajoutées précédemment, par exemple lors des opérations Ajout de propriétés personnalisées à des entités de modèle de données ou Ajout d'entités personnalisées au modèle de données.
1. Créez un nouveau bloc de construction qui s'étend du bloc de construction PTC contenant le gestionnaire de l'entité associée jusqu'à la table de base de données. Ces gestionnaires sont spécifiés dans le tableau DefaultGlobalManagerConfiguration de la page Configuration de l'objet PTC.Base.Manager. Par exemple, pour supprimer une clé étrangère d'un ordre de travail, accédez à l'objet PTC.JobOrderImpl.Manager.
Pour plus d'informations, consultez la rubrique Créer un nouveau bloc de construction.
2. Accédez à l'objet de base de données configuré pour votre système, par exemple PTC.DBConnection.MSSQLDatabase.
3. Sous Services, exécutez le service RemoveForeignKey avec les entrées suivantes :
dataShapeName : forme de données de la table de base de données à partir de laquelle vous supprimez la contrainte de clé étrangère.
fieldName : champ de la forme de données sur laquelle vous supprimez la contrainte de clé étrangère.
dbInfo : description JSON de la clé étrangère à supprimer. Vous devez fournir les mêmes informations de identifier (le cas échéant), name, referenceDataShapeName et refereceFieldName que celles spécifiées dans le service GetDBInfo où la clé étrangère est définie. Si les valeurs onDelete ou deleteReference sont incluses, elles sont ignorées par le service.
4. Cliquez sur Exécuter.
5. Sur l'objet de gestionnaire du bloc de construction créé à l'étape 1, accédez au service GetDBInfo sur lequel la clé étrangère est définie, puis supprimez la définition de clé étrangère des services. Si ce n'est pas le cas, la clé étrangère est rajoutée à la base de données lors de la prochaine exécution des services de synchronisation.
Par exemple, pour supprimer une contrainte de clé étrangère sans identifier d'un champ nommé WorkDefinitionUID sur la forme de données MyObject, spécifiez les paramètres d'entrée suivants :
dataShapeName : MyObject
fieldName : WorkDefinitionUID
dbInfo :
{
"name":"WorkDefinitionUID",
"referenceDataShapeName":"PTC.SCA.SCO.WorkDefinition",
"referenceFieldName":"UID"
}
Est-ce que cela a été utile ?