Crear clase de relación (Administración de datos)

Resumen

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 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 podría 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 la clase de destino hasta 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".

Parámetros

EtiquetaExplicaciónTipo de datos
Tabla de origen

Tabla o clase de entidad asociada a la tabla de destino.

Table View
Tabla de destino

Tabla asociada a la tabla de origen.

Table View
Clase de Relación de salida

Clase de relación que se creará.

Relationship Class
Tipo de relación

Especifica el tipo de relación que se creará entre las tablas de origen y de destino.

  • SimpleLas tablas de origen y destino tendrán una relación simple. Esta es la opción predeterminada.
  • CompuestaLas tablas de origen y destino tendrán una relación compuesta.
String
Etiqueta de ruta origen-destino

Un nombre para identificar la relación de manera unívoca al navegar de la tabla de origen a la tabla de destino.

String
Etiqueta de ruta destino-origen

Un nombre para identificar la relación de manera unívoca al navegar de la tabla de destino a la tabla de origen.

String
Dirección del mensaje

Especifica la dirección en la que se transmitirán los mensajes entre las tablas de origen y de destino. Por ejemplo, en una relación entre postes y transformadores, cuando se elimine el poste, se enviará un mensaje a sus objetos transformadores relacionados indicando que fue eliminado.

  • Hacia delante (de origen a destino)Los mensajes se transmitirán desde la tabla de origen hacia la de destino.
  • Hacia atrás (de destino a origen)Los mensajes se transmitirán desde la tabla de destino hacia la de origen.
  • Ambas direccionesLos mensajes se transmitirán desde la tabla de origen hacia la de destino y desde la tabla de destino hacia la de origen.
  • Ninguna (no se propagan mensajes)No se transmitirá ningún mensaje. Esta es la opción predeterminada.
String
Cardinalidad

Especifica cuántas relaciones existirán entre las filas o entidades en la tabla de origen y las filas o entidades en la tabla de destino.

  • Uno a uno (1:1)Cada fila o entidad de la tabla de origen se puede relacionar con una o ninguna fila o entidad en la tabla de destino. Esta es la opción predeterminada.
  • Uno a muchos (1:M)Cada fila o entidad de la tabla de origen se puede relacionar con una o varias filas o entidades en la tabla de destino.
  • Muchos a muchos (M:N)Varias filas o entidades en la tabla de origen se pueden relacionar con una o varias filas o entidades en la tabla de destino.
String
Clase de relación con atributos

Especifica si la clase de relación tendrá atributos.

  • Activado: la clase de relación tendrá atributos.
  • Desactivado: la clase de relación no tendrá atributos. Esta es la opción predeterminada.
Boolean
Clave principal de origen

En las clases de relación de muchos a muchos o con atributos, este es el campo de la tabla de origen que estable el vínculo al campo Clave externa de origen de la tabla de clase de relación.

En las clases de relación de uno a uno o de uno a muchos sin atributos, este es el campo de la tabla de origen que estable el vínculo al campo Clave externa de origen de la tabla de destino.

String
Clave externa de origen

En las clases de relación de muchos a muchos o con atributos, este es el campo de la tabla de clases de relación que estable el vínculo al campo Clave principal de origen de la tabla de origen.

En las clases de relación de uno a uno o de uno a muchos sin atributos, este es el campo de la tabla de destino que estable el vínculo al campo Clave principal de origen de la tabla de origen.

String
Clave principal de destino
(Opcional)

Campo de la tabla de destino que establece el vínculo al campo Clave externa de destino de la tabla de clase de relación. Este valor es obligatorio en las clases de relación de muchos a muchos o con atributos, pero debería dejarse vacío en el caso de las clases de relación de uno a uno o de uno a muchos que no tienen atributos.

String
Clave externa de destino
(Opcional)

Campo de la tabla de clase de relación que establece el vínculo al campo Clave principal de destino de la tabla de destino. Este valor es obligatorio en las clases de relación de muchos a muchos o con atributos, pero debería dejarse vacío en el caso de las clases de relación de uno a uno o de uno a muchos que no tienen atributos.

String

arcpy.management.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})
NombreExplicaciónTipo 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 que se creará.

Relationship Class
relationship_type

Especifica el tipo de relación que se creará entre las tablas de origen y de destino.

  • SIMPLELas tablas de origen y destino tendrán una relación simple. Esta es la opción predeterminada.
  • COMPOSITELas tablas de origen y destino tendrán una relación compuesta.
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

Especifica la dirección en la que se transmitirán los mensajes entre las tablas de origen y de destino. Por ejemplo, en una relación entre postes y transformadores, cuando se elimine el poste, se enviará un mensaje a sus objetos transformadores relacionados indicando que fue eliminado.

  • FORWARDLos mensajes se transmitirán desde la tabla de origen hacia la de destino.
  • BACKWARDLos mensajes se transmitirán desde la tabla de destino hacia la de origen.
  • BOTHLos mensajes se transmitirán desde la tabla de origen hacia la de destino y desde la tabla de destino hacia la de origen.
  • NONENo se transmitirá ningún mensaje. Esta es la opción predeterminada.
String
cardinality

Especifica cuántas relaciones existirán entre las filas o entidades en la tabla de origen y las filas o entidades en la tabla de destino.

  • ONE_TO_ONECada fila o entidad de la tabla de origen se puede relacionar con una o ninguna fila o entidad en la tabla de destino. Esta es la opción predeterminada.
  • ONE_TO_MANYCada fila o entidad de la tabla de origen se puede relacionar con una o varias filas o entidades en la tabla de destino.
  • MANY_TO_MANYVarias filas o entidades en la tabla de origen se pueden relacionar con una o varias filas o entidades en la tabla de destino.
String
attributed

Especifica si la clase de relación tendrá atributos.

  • NONELa clase de relación no tendrá atributos. Esta es la opción predeterminada.
  • ATTRIBUTEDLa clase de relación tendrá atributos.
Boolean
origin_primary_key

En las clases de relación de muchos a muchos o con atributos, este es el campo de la tabla de origen que estable el vínculo al campo origin_foreign_key de la tabla de clase de relación.

En las clases de relación de uno a uno o de uno a muchos sin atributos, este es el campo de la tabla de origen que estable el vínculo al campo origin_foreign_key de la tabla de destino.

String
origin_foreign_key

En las clases de relación de muchos a muchos o con atributos, este es el campo de la tabla de clases de relación que estable el vínculo al campo origin_primary_key de la tabla de origen.

En las clases de relación de uno a uno o de uno a muchos sin atributos, este es el campo de la tabla de destino que estable el vínculo al campo origin_primary_key de la tabla de origen.

String
destination_primary_key
(Opcional)

Campo de la tabla de destino que establece el vínculo al campo destination_foreign_key de la tabla de clase de relación. Este valor es obligatorio en las clases de relación de muchos a muchos o con atributos, pero debería dejarse vacío en el caso de las clases de relación de uno a uno o de uno a muchos que no tienen atributos.

String
destination_foreign_key
(Opcional)

Campo de la tabla de clase de relación que establece el vínculo al campo destination_primary_key de la tabla de destino. Este valor es obligatorio en las clases de relación de muchos a muchos o con atributos, pero debería dejarse vacío en el caso de las clases de relación de uno a uno o de uno a muchos que no tienen atributos.

String

Muestra de código

Ejemplo de CreateRelationshipClass (ventana de Python)

El siguiente script de la ventana de Python muestra cómo utilizar la función 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")
Ejemplo 1 de CreateRelationshipClass (secuencia de comandos independiente)

Cree 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)
Ejemplo 2 de CreateRelationshipClass (secuencia de comandos independiente)

Cree 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)

Temas relacionados