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.
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 postes de electricidad sostienen los transformadores y los transformadores están montados en los postes. Una vez eliminado un poste, 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 postes y transformadores, una etiqueta de ruta origen-destino podría ser "Los postes 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 postes y transformadores, una etiqueta de ruta destino-origen podría ser "Los transformadores están montados en los postes".
Sintaxis
CreateRelationshipClass(origin_table, destination_table, out_relationship_class, relationship_type, forward_label, backward_label, message_direction, cardinality, attributed, origin_primary_key, origin_foreign_key, {destination_primary_key}, {destination_foreign_key})
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 postes y transformadores, cuando se elimina el poste, 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 | El campo de la tabla de origen, normalmente el campo OID, que lo vincula al campo Clave externa de origen de la tabla de clase de relación. | String |
origin_foreign_key | El 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) | El campo de la tabla de destino, normalmente 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) | El campo de la tabla de clase de relación que lo vincula al campo Clave principal de destino de la tabla de destino. | String |
Muestra 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_ID"
arcpy.CreateRelationshipClass_management(ownerTbl,
parcel,
relClass,
"SIMPLE",
forLabel,
backLabel,
"BACKWARD",
"ONE_TO_MANY",
"NONE",
primaryKey,
foreignKey)
Entornos
Información de licenciamiento
- Basic: No
- Standard: Sí
- Advanced: Sí