Acerca de la edición de relaciones en ArcMap
Este tema se aplica sólo a ArcEditor y ArcInfo.
Acerca de las relaciones
Las clases de relación le permiten mantener asociaciones entre los objetos de la geodatabase. Estas relaciones pueden ser simples y pasivas, o pueden ser compuestas. Las relaciones compuestas implican relaciones de padre-hijo, o una composición, y por lo tanto, tienen un comportamiento que se desencadena mediante cambios en los objetos de un lado de la relación a los objetos del otro lado. La anotación vinculada a entidad en la geodatabase utiliza relaciones compuestas.
Las relaciones en una clase de relación se pueden almacenar mediante claves primarias y externas en las clases de objeto del otro lado de la clase de relación. O bien, en el caso de las clases de relación de muchos a muchos (M-N) y con atributos, las relaciones son filas almacenadas en una tabla separada.
Puede utilizar la ventana Atributos o la tabla para buscar todos los objetos relacionados con un objeto seleccionado. Una vez que ha navegado al objeto relacionado, puede editar sus atributos. También puede utilizar las herramientas de edición en ArcMap para romper la relación entre dos objetos o crear nuevas relaciones entre los objetos. Cuando edita objetos y relaciones de esta manera, se mantiene toda la integridad referencial.
Agregar y eliminar relaciones
Puede utilizar la ventana Atributos para crear y eliminar relaciones entre dos objetos. Si la relación es administrada por claves primarias y externas (relaciones 1–1 o 1–M sin atributos), la clave externa en el objeto de destino se completa con el valor de la clave principal del objeto de origen. Si se elimina una relación entre dos objetos, el valor para la clave externa en el objeto de destino se reemplaza por un valor nulo. La clave externa en el objeto de destino debe tener campos que se puedan anular.
Si la clase de relación es M-N o con atributos, las relaciones se almacenan en una tabla separada en la base de datos. Cuando se crea una nueva relación entre dos objetos en este tipo de clase de relación, se agrega una nueva fila en esa tabla. Esta nueva fila se completa con los valores de las claves principales en los objetos de origen y de destino. Si se elimina una relación entre dos objetos, se elimina la fila que corresponde a esa relación en la tabla de relación.
Editar objetos en una clase de relación simple
Cuando un objeto que participa en relaciones con otros objetos se elimina de la geodatabase, también se eliminan todas sus relaciones. Si el objeto que se elimina es el objeto de origen, la clave externa en todos los objetos de destino relacionados se establece a nula. Si el objeto eliminado es un objeto de destino, el objeto de origen no se ve afectado.
Si las relaciones se mantienen como filas en una tabla de relación (relaciones M-N o relaciones con atributos), cuando se elimina un objeto de origen o de destino y sus relaciones, las filas correspondientes a esas relaciones se eliminan de la tabla de relación.
Debido a que las clases de relación simples establecen la clave externa a Nula cuando se elimina una entidad de origen, los objetos huérfanos pueden existir en la clase de destino de la relación. Esto está permitido porque las clases de relación simples están diseñadas para los objetos relacionados que pueden existir independientemente del otro. Para poder identificar los objetos de destino huérfanos en una clase de relación simple, se deben configurar las reglas de relación para evitar los objetos de destino huérfanos. Una vez que se configuran las reglas la herramienta Validar entidades identificará los objetos de destino huérfanos.
Para obtener más información sobre las reglas de relación, consulte: Creating_relationship_rules
Crear nuevos objetos relacionados
En ArcMap, puede seleccionar un objeto, y después utilizar el cuadro de diálogo Atributos para crear un nuevo objeto no espacial en una clase de relación. Cuando se crea este nuevo objeto, se completan todos sus atributos con los valores predeterminados correspondientes, y se vuelve a establecer una relación con el objeto a partir del cual se creó. Sólo puede crear objetos no espaciales de este modo; no puede crear nuevas entidades.
Si las relaciones se mantienen a través de claves principales y externas, la clave externa en el objeto de destino se completa con la clave primaria del objeto de origen, independientemente de si el objeto de origen o de destino se crea mediante el cuadro de diálogo Atributos. Si las relaciones se mantienen como filas en una tabla de relación (relaciones M-N, relaciones con atributos), se agrega una nueva fila a la tabla de la clase de relación.
El siguiente conjunto de tablas muestra que cuando utiliza la ventana Atributos para crear nuevos objetos relacionados, se vuelve a crear una relación con el objeto a partir del cual se creó. Si las relaciones se mantienen a través de claves principales y externas, la clave externa en el objeto de destino se completa con la clave primaria del objeto de origen.
Editar objetos en una clase de relación compuesta
Las relaciones compuestas tienen un comportamiento especializado. Cuando se editan los objetos que participan de una relación compuesta, este comportamiento se transfiere al proceso de edición. Las modificaciones realizadas al objeto de origen en una relación compuesta generalmente afectan de forma directa a sus objetos de destino relacionados. Este comportamiento depende en parte de cómo se envían los mensajes en la clase de relación.
Por defecto, las clases de relación compuestas tienen una mensajería de origen-destino; es decir que cuando se edita el objeto de origen en una relación compuesta, éste envía mensajes a sus objetos de destino relacionados. Los objetos relacionados responderán a ese mensaje de manera estándar: Si los objetos de destino son objetos no espaciales, no cambiarán. Sin embargo, si los objetos de destino son entidades, cuando el objeto de origen se mueve, los objetos de destino también se moverán a la misma distancia. Si el objeto de origen se rota, los objetos de destino se rotarán al mismo ángulo. La edición de vértices individuales de una geometría de entidad es considerada una actualización, y no un movimiento de la geometría de entidad. En ese caso, el objeto relacionado no se mueve.
Al igual que las relaciones simples, las relaciones compuestas también mantienen una integridad referencial cuando se eliminan los objetos, pero realizan esto de un modo diferente. Cuando se elimina el objeto de origen en una relación compuesta, también se eliminan todos los objetos relacionados con él a través de esa relación compuesta. Esta eliminación en cascada ocurrirá ya sea que la mensajería se establezca a origen-destino, destino-origen, a ambas o a ninguna de las dos.
En el ejemplo debajo, el polo seleccionado es el objeto de origen y el transformador es el objeto de destino.
El conjunto de tablas debajo muestra que cuando se elimina el objeto de origen en una relación compuesta, también se eliminan todos los objetos de destino relacionados con él a través de una relación compuesta.
Cuando se elimina un objeto de destino, se elimina la relación entre éste y el objeto de origen; el objeto de origen no se elimina ni se modifica.
Si bien los objetos de destino se eliminan cuando se elimina el objeto de origen relacionado en una relación compuesta, los objetos de destino huérfanos aun pueden existir en la clase de destino. Esto se debe a que el modelo de Geodatabase no evita que inserte nuevas entidades en una clase de objeto si es el destino en una relación compuesta. Si crea un objeto de destino pero no lo asoció a un objeto de origen, la herramienta Validar entidades le advertirá sobre este error.
Con una anotación vinculada a entidad, el vínculo entre cada anotación y la entidad que anota se modela como una relación compuesta. El padre (u origen) en la relación es la entidad regular, y el hijo (o destino) es la anotación asociada.
Si tiene relaciones de muchos a muchos que se modelan con la tabla Unión, puede utilizar la herramienta de geoprocesamiento De tablas a clase de relación para convertir la tabla que vincula valores entre otras dos tablas en una clase de relación con atributos.
Puede agregar su clase de relación con atributos en ArcMap como una tabla. Una vez que ésta está en ArcMap, puede abrir la tabla y editarla al igual que otras tablas. Pero no puede editar los campos de Clave externa ni agregar nuevas filas a menos que utilice el editor de atributos.
Dividir entidades que participan en las relaciones
Dividir una única entidad de geodatabase en dos entidades separadas mantendrá la entidad original (pero actualizará la geometría) y creará una nueva entidad. Cuando se divide una entidad, la parte más grande mantendrá la Object ID de la entidad original y la parte más pequeña será la nueva entidad. En el caso en el que la entidad se divide 50 y 50, el lado de la entidad con el punto de inicio de la línea permanecerá como la entidad original (Object ID original) y la segunda mitad se convertirá en la nueva entidad. Esto tiene consecuencias cuando la entidad que se divide posee relaciones con otros objetos en la base de datos.
Con las relaciones simples, cuando se divide una entidad de origen, se eliminan las relaciones entre la entidad original y sus objetos de destino relacionados. Cuando las nuevas entidades se crean a partir de la operación de división, ambas entidades tendrán el mismo valor de la clave principal y, por lo tanto, ambas se relacionan con los objetos o las entidades de destino asociados.
En el caso de una relación compuesta, el comportamiento es diferente. Cuando se divide la entidad de origen en una relación compuesta, no elimina los objetos relacionados con ella a través de la clase de relación compuesta ya que la entidad original aun está presente. Sólo se altera la geometría de la entidad original en la operación de división.
Cuando una entidad de destino se divide en una relación simple o compuesta, no se elimina la relación entre la entidad original y los objetos de origen relacionados. Se crean nuevas relaciones entre los objetos de origen y la nueva entidad que fue el resultado de la división.
El comportamiento de la división de objetos con las relaciones que se describe aquí es el comportamiento predeterminado. Puede invalidar este comportamiento al nivel de la clase al escribir una extensión de clase que implemente la interfaz IFeatureClassEdit. La interfaz IFeatureClassEdit tiene una propiedad denominada CustomSplitPolicyForRelationship que le permite especificar cómo se manejan las relaciones cuando se dividen las entidades.