Crear clase de relación (Administración de datos)
Resumen
Esta herramienta crea una clase de relación para almacenar una asociación entre campos o entidades en la tabla de origen y en la tabla de destino.
Uso
-
Pueden existir relaciones entre objetos espaciales (entidades en clases de entidad), objetos no espaciales (filas en una tabla) u objetos espaciales y no espaciales.
-
Una vez creada, una clase de relación no se puede modificar; sólo puede agregar, eliminar o restringir sus reglas. Las clases de relación se pueden eliminar y renombrar utilizando ArcCatalog de la misma forma que se hace con cualquier otro objeto de la base de datos.
-
Para las clases de relaciones muchos a muchos, se crea una tabla nueva en la base de datos para almacenar las claves externas utilizadas para vincular las clases de origen y de destino. Esta tabla también puede tener otros campos para almacenar atributos de la relación misma que no son atribuidos ni a la clase de origen ni a la de destino. Por ejemplo, en una base de datos de parcela, puede tener una clase de relación entre las parcelas y los propietarios en la cual los propietarios "son dueños" de las parcelas y las parcelas "pertenecen" a los propietarios. Un atributo de esa relación puede ser el porcentaje de la propiedad. Las clases de relación uno a uno y uno a muchos también pueden tener atributos; en este caso, se crea una tabla para almacenar las relaciones.
-
Las relaciones simples o punto a punto comprenden dos o más objetos de la base de datos que existen de forma independiente uno de otro. Por ejemplo, en una red de ferrocarriles puede haber cruces de ferrocarril que tengan una o más lámparas de señal relacionadas. Sin embargo, puede existir un cruce de ferrocarril sin una lámpara de señal y puede haber lámparas de señal en la red de ferrocarriles donde no hay cruces de ferrocarril. Las relaciones simples pueden tener una cardinalidad de uno a uno, de uno a muchos o de muchos a muchos.
-
Una relación compuesta es aquella en la cual la duración de un objeto controla la duración de sus objetos relacionados. Por ejemplo, los polos de energía sostienen los transformadores y los transformadores están montados en los polos. Una vez eliminado un polo, se propaga un mensaje de eliminación a sus transformadores relacionados, que se eliminan de la clase de entidad de los transformadores. Las relaciones compuestas son siempre de uno a muchos.
-
Las etiquetas de ruta destino-origen y origen-destino describen la relación al navegar de un objeto a otro. La etiqueta de ruta origen-destino describe la relación al navegar desde la clase de origen a la clase de destino. En el ejemplo de polos y transformadores, una etiqueta de ruta origen-destino podría ser "Los polos sostienen los transformadores". La etiqueta de ruta destino-origen describe la relación al navegar desde el destino a la clase de origen. En el ejemplo de polos y transformadores, una etiqueta de ruta destino-origen podría ser "Los transformadores están montados en los polos".
-
Las clases de relación también se pueden crear en ArcCatalog. Seleccione el comando Nuevo > Clase de relación del menú contextual de una geodatabase.
Sintaxis
Parámetro | Explicación | Tipo de datos |
origin_table |
Tabla o clase de entidad asociada a la tabla de destino. | Table View |
destination_table |
Tabla asociada a la tabla de origen. | Table View |
out_relationship_class |
Clase de relación creada. | Relationship Class |
relationship_type |
Tipo de relación que se creará entre las tablas de origen y de destino.
| String |
forward_label |
Un nombre para identificar la relación de manera unívoca al navegar de la tabla de origen a la tabla de destino. | String |
backward_label |
Un nombre para identificar la relación de manera unívoca al navegar de la tabla de destino a la tabla de origen. | String |
message_direction |
Dirección en la que se transmiten los mensajes entre las tablas de origen y de destino. Por ejemplo, en una relación entre polos y transformadores, cuando se elimina el polo, envía un mensaje a sus objetos transformadores relacionados y les informa que fue eliminado.
| String |
cardinality |
Determina cuántas relaciones existen entre las filas o entidades en la tabla de origen y las filas o entidades en la tabla de destino.
| String |
attributed |
Especifica si la relación tendrá atributos.
| Boolean |
origin_primary_key |
Campo de la tabla de origen, generalmente el campo OID, que lo vincula al campo Clave externa de origen de la tabla de clase de relación. | String |
origin_foreign_key |
Campo de la tabla de clase de relación que lo vincula al campo Clave principal de origen de la tabla de origen. | String |
destination_primary_key (Opcional) |
Campo de la tabla de destino, generalmente el campo OID, que lo vincula al campo Clave externa de destino de la tabla de clase de relación. | String |
destination_foreign_key (Opcional) |
Campo de la tabla de clase de relación que lo vincula al campo Clave principal de destino de la tabla de destino. | String |
Ejemplo de código
La siguiente secuencia de comandos de la ventana de Python muestra cómo utilizar la herramienta Crear clase de relación.
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")
Crear una clase de relación entre la clase de entidad de vegetación y una tabla con información de vegetación adicional.
# 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)
Crear una clase de relación entre la clase de entidad de parcela y una tabla con información del propietario.
# 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)