Crear clase de relación (Gestió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; solo 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_ID"
arcpy.CreateRelationshipClass_management(ownerTbl,
parcel,
relClass,
"SIMPLE",
forLabel,
backLabel,
"BACKWARD",
"ONE_TO_MANY",
"NONE",
primaryKey,
foreignKey)