Créer une classe de relations (Gestion des données)
Récapitulatif
Cet outil crée une classe de relations pour stocker une association entre des champs ou des entités de la table d'origine et de la table de destination.
Utilisation
-
Les relations existent entre objets spatiaux (entités dans les classes d'entités), entre objets non spatiaux (lignes dans une table) ou entre des objets spatiaux et non spatiaux.
-
Une fois créée, une classe de relations ne peut pas être modifiée ; vous pouvez uniquement ajouter, supprimer ou affiner ses règles. Les classes de relations peuvent être supprimées et renommées à l'aide d'ArcCatalog de la même manière que tout autre objet dans la base de données.
-
Pour les classes de relations plusieurs vers plusieurs, une nouvelle table est créée dans la base de données pour stocker les clés étrangères utilisées pour lier les classes d'origine et de destination. Cette table peut également avoir d'autres champs pour stocker des attributs de la relation elle-même qui ne sont attribués ni à la classe d'origine, ni à la classe de destination. Par exemple, une base de données de parcelles peut contenir une classe de relations entre des parcelles et des propriétaires dans laquelle des propriétaires possèdent des parcelles et des parcelles appartiennent à des propriétaires. Un attribut de cette relation peut représenter des parts de copropriété. Les classes de relations un vers un et un vers plusieurs peuvent également avoir des attributs ; dans ce cas, une table est créée pour stocker les relations.
-
Les relations simples, ou point à point, impliquent deux objets ou plus dans la base de données qui existent indépendamment les uns des autres. Par exemple, un réseau ferroviaire peut comporter des intersections avec un ou plusieurs signaux lumineux. Cependant, une intersection de voie ferrée peut exister sans signal lumineux et des signaux lumineux exister sur le réseau ferroviaire là où il n'y a pas d'intersection. Les relations simples peuvent avoir des cardinalités de type un vers un, un vers plusieurs et plusieurs vers plusieurs.
-
Une relation composite décrit une relation dans laquelle l'existence d'un objet régit l'existence des objets qui lui sont liés. Par exemple, les pylônes électriques supportent les transformateurs et les transformateurs sont montés sur des pylônes. Une fois qu'un pylône est supprimé, un message de suppression est transmis aux transformateurs qui lui sont liés, lesquels sont supprimés de la classe d'entités des transformateurs. Les relations composites décrivent toujours des relations un vers plusieurs.
-
Les dénominations de parcours avant et arrière décrivent la relation née de la navigation d'un objet à un autre. La dénomination de parcours avant décrit la relation née de la navigation depuis la classe d'origine jusqu'à la classe de destination. Dans notre exemple pylône-transformateur, la dénomination de parcours avant serait "Les pylônes supportent les transformateurs". La dénomination de parcours arrière décrit la relation née de la navigation depuis la classe de destination jusqu'à la classe d'origine. Dans notre exemple pylône-transformateur, la dénomination de parcours arrière serait "Les transformateurs sont montés sur les pylônes".
-
Il est également possible de créer des classes de relations dans ArcCatalog. Sélectionnez la commande Nouveau > Classe de relations dans le menu contextuel d'une géodatabase.
Syntaxe
Paramètre | Explication | Type de données |
origin_table |
Table ou classe d'entités à associer à la table de destination. | Table View |
destination_table |
Table à associer à la table d'origine. | Table View |
out_relationship_class |
Classe de relations à créer. | Relationship Class |
relationship_type |
Type de relation à créer entre les tables d'origine et de destination.
| String |
forward_label |
Nom permettant d'identifier de façon unique la relation lors de la navigation depuis la table d'origine vers la table de destination. | String |
backward_label |
Nom permettant d'identifier de façon unique la relation lors de la navigation depuis la table de destination vers la table d'origine. | String |
message_direction |
Sens dans lequel les messages sont transmis entre les tables d'origine et de destination. Par exemple, dans une relation entre des pylônes et des transformateurs, lorsqu'un pylône est supprimé, un message est transmis aux objets transformateurs auxquels il est lié pour indiquer que le pylône a été supprimé.
| String |
cardinality |
Détermine le nombre de relations existant entre les lignes ou entités dans l'origine et les lignes ou entités de la table de destination.
| String |
attributed |
Spécifie si la relation a des attributs.
| Boolean |
origin_primary_key |
Le champ de la table d'origine, généralement le champ OID, qui le lie au champ Clé étrangère d'origine de la table de classe de relations. | String |
origin_foreign_key |
Le champ dans la table de classe de relations qui le lie au champ Clé primaire d'origine dans la table d'origine. | String |
destination_primary_key (Facultatif) |
Le champ de la table de destination, généralement le champ OID qui le lie au champ Clé étrangère de destination de la table de classe de relations. | String |
destination_foreign_key (Facultatif) |
Le champ de la table de classe de relations qui le lie au champ Clé primaire de destination de la table de destination. | String |
Exemple de code
Le script de fenêtre Python ci-dessous illustre l'utilisation de l'outil CreateRelationshipClass.
import arcpy
arcpy.env.workspace = "C:/data/Habitat_Analysis.gdb"
arcpy.CreateRelationshipClass_management("vegtype", "vegtable", "veg_RelClass", "SIMPLE", "Attributes from vegtable", "Attributes and Features from vegtype", "NONE", "ONE_TO_ONE", "NONE", "HOLLAND95", "HOLLAND95")
Créer une classe de relations entre une classe d'entités de végétation et une table avec des informations de végétation supplémentaires.
# Name: CreateRelationshipClass.py
# Description: Create a relationship class between vegetation feature
# class and table with additional vegetation information
# Author: ESRI
# import system modules
import arcpy
from arcpy import env
# Set environment settings
env.workspace = "C:/data"
# Copy vegtable.dbf to file gdb table, since both tables to be related
# must be in the same database
vegDbf = "vegtable.dbf"
vegTbl = "Habitat_Analysis.gdb/vegtable"
arcpy.CopyRows_management(vegDbf, vegTbl)
# Create simple relationship class between 'vegtype' vegetation layer
# and 'vegtable' table with additional vegetation information
veg = "Habitat_Analysis.gdb/vegtype"
relClass = "Habitat_Analysis.gdb/veg_RelClass"
forLabel = "Attributes from vegtable"
backLabel = "Attributes and Features from vegtype"
primaryKey = "HOLLAND95"
foreignKey = "HOLLAND95"
arcpy.CreateRelationshipClass_management(veg, vegTbl, relClass, "SIMPLE", forLabel,
backLabel, "NONE", "ONE_TO_ONE",
"NONE", primaryKey, foreignKey)
Créer une classe de relations entre une classe d'entités parcelles et une table avec des informations sur les propriétaires.
# Name: CreateRelationshipClass.py
# Description: Create a relationship class between parcels feature
# class and table with owner information
# Author: ESRI
# import system modules
import arcpy
from arcpy import env
# Set environment settings
env.workspace = "C:/data"
# Copy owners.dat to file gdb table, since both tables to be related
# must be in the same database
ownerDat = "owners.dat"
ownerTbl = "Montgomery.gdb/owners"
arcpy.CopyRows_management(ownerDat, ownerTbl)
# Create simple relationship class between 'parcel' parcel layer
# and 'owner' table with additional parcel owner information
parcel = "Montgomery.gdb/Parcels"
relClass = "Montgomery.gdb/parcelowners_RelClass"
forLabel = "Owns"
backLabel = "Is Owned By"
primaryKey = "PROPERTY_ID"
foreignKey = "PROPERTY_I"
arcpy.CreateRelationshipClass_management(ownerTbl, parcel, relClass, "SIMPLE", forLabel,
backLabel, "BACKWARD", "ONE_TO_MANY",
"NONE", primaryKey, foreignKey)