Les tables de géodatabase et les classes d’entités stockent des objets de même type, à savoir des objets qui ont le même comportement et les mêmes attributs. Par exemple, une classe d’entités appelée WaterMains peut stocker des canalisations hydrauliques pressurisées. Toutes les canalisations hydrauliques ont le même comportement et possèdent les attributs ReferenceID, Depth, Material, GroundSurfaceType, Size et PressureRating.
Bien que tous les objets d’une classe d’entités ou d’une table doivent avoir le même comportement et les mêmes attributs, tous les objets ne partagent pas les mêmes domaines attributaires. Par exemple, il peut arriver que dans un réseau hydraulique seules les canalisations hydrauliques de transmission présentent une pression comprise entre 40 et 100 psi, alors que le sous-type des canalisations hydrauliques de distribution peut présenter une valeur comprise entre 50 et 75 psi. Vous allez utiliser un domaine attributaire pour appliquer cette restriction. Pour implémenter ce type de règle de validation, vous n’avez pas besoin de créer des classes d’entités distinctes pour les canalisations hydrauliques de transmission et de distribution, mais vous souhaitez faire la distinction entre ces types de canalisations hydrauliques pour définir un ensemble distinct de domaines et de valeurs par défaut. Pour ce faire, vous pouvez utiliser des sous-types.
Quand utiliser des sous-types
Un important problème de conception de géodatabase se pose lorsque vous devez décider s’il convient d’utiliser des sous-types et où des classes d’entités supplémentaires sont requises. Lorsque vous distinguez des objets par leurs valeurs par défaut, domaines attributaires, règles de connectivité et règles de relation, il est recommandé de créer des sous-types distincts pour une classe d’entités ou une table unique.
Lorsque vous distinguez des objets en fonction de comportements, attributs ou privilèges d’accès différents, ou si les objets sont multi-versionnés, vous devez créer plusieurs classes d’entités.
Workflow de sous-type
La procédure suivante permet de créer des sous-types pour une classe d’entités ou une table :
- Définir le champ de sous-type : définit le champ dans la table ou la classe d’entités en entrée qui stocke les codes de sous-type.
- Ajouter un sous-type : ajoute un nouveau sous-type à l’ensemble de sous-types d’une classe d’entités ou d’une table.
- Définir un sous-type par défaut : définit la valeur par défaut unique d’un sous-type, également appelée code.
Dans l’exemple suivant, des sous-types sont créés pour représenter différents types d’ajustement dans la classe d’entités des ajustements d’un conduit hydraulique.
La première étape consiste à définir le champ utilisé pour stocker les informations relatives au sous-type :
import arcpy
arcpy.env.workspace = "C:/data/Montgomery.gdb"
arcpy.management.SetSubtypeField("Water/Fittings", "TYPECODE")
Une fois le champ de sous-type défini, les codes de sous-type sont ajoutés à la liste des sous-types :
arcpy.management.AddSubtype("Water/Fittings", "0", "unknown")
arcpy.management.AddSubtype("Water/Fittings", "1", "bend")
arcpy.management.AddSubtype("Water/Fittings", "2", "cap")
arcpy.management.AddSubtype("Water/Fittings", "3", "cross")
arcpy.management.AddSubtype("Water/Fittings", "4", "coupling")
arcpy.management.AddSubtype("Water/Fittings", "5", "expansion joint")
arcpy.management.AddSubtype("Water/Fittings", "6", "offset")
arcpy.management.AddSubtype("Water/Fittings", "7", "plug")
arcpy.management.AddSubtype("Water/Fittings", "8", "reducer")
arcpy.management.AddSubtype("Water/Fittings", "9", "saddle")
arcpy.management.AddSubtype("Water/Fittings", "10", "sleeve")
arcpy.management.AddSubtype("Water/Fittings", "11", "tap")
arcpy.management.AddSubtype("Water/Fittings", "12", "tee")
arcpy.management.AddSubtype("Water/Fittings", "13", "weld")
arcpy.management.AddSubtype("Water/Fittings", "14", "riser")
L’étape finale consiste à définir le code de sous-type par défaut :
arcpy.management.SetDefaultSubtype("Water/Fittings", "2")
Rubriques connexes
Vous avez un commentaire à formuler concernant cette rubrique ?