Importante

La traducción es un esfuerzo comunitario puede unirse. Esta página está actualmente traducida en |progreso de traducción|.

16.4. Conexión y edición de datos entre capas

Una de las funciones de los programas informáticos de SIG es conectar datos de distintas capas. Dicha conexión puede basarse en la relación espacial entre los objetos espaciales o en sus atributos compartidos. QGIS proporciona herramientas para manejar cualquiera de estas asociaciones, tales como:

  • Algoritmos de procesamiento que pueden crear una nueva capa como resultado de la conexión, a saber Unir atributos por localización, Unir atributos por proximidad, Unir atributos por valor de campo, …

  • Consultas SQL para crear una nueva capa a partir del Gestor BD o como capa virtual

  • Propiedades de las uniones o configuración de las relaciones que amplían temporalmente los atributos de los objetos espaciales de una capa determinada, con los de objetos espaciales de otra capa en función de algún atributo o atributos coincidentes.

    Las uniones y relaciones son conceptos técnicos tomados de las bases de datos para sacar el máximo partido de los datos almacenados en tablas combinando sus contenidos. La idea es que objetos espaciales (filas) de distintas capas (tablas) puedan asociarse entre sí. El número de filas que coinciden entre sí puede ser de cualquier valor (cero, uno, muchos).

16.4.1. Unir objetos espaciales entre dos capas

La uniones en QGIS permiten asociar objetos espaciales de la capa actual a objetos espaciales de otra capa vectorial cargada. No importa si están habilitadas espacialmente ni el tipo de geometría. La unión se basa en un atributo compartido por las capas, en una relación de uno a uno.

Para crear una unión en una capa (identificada a continuación como capa destino):

  1. Vaya a la pestaña de la capa Propiedades ► join Uniones

  2. Click en el botón symbologyAdd Add new join. El diálogo Add vector join aparece.

  3. Seleccione la Join layer que quiera conectar con la capa vectorial de destino

  4. Especifique el campo Unir (de la capa unir) y el campo Destino (de la capa destino). Estos son los campos que se utilizan para encontrar objetos espaciales coincidentes en ambas capas, por lo que deben tener valores comunes.

  5. Presione OK y se agrega un resumen de los parámetros seleccionados al panel Join.

../../../_images/join_attributes.png

Figura 16.101 Unir una tabla de atributos a una capa vectorial existente

Los pasos anteriores crearán una unión en la que TODOS los atributos de la primer objeto espacial coincidente de la capa de unión se añadirán a la característica de la capa de destino. La siguiente lógica se utiliza para emparejar objetos espaciales durante un proceso de unión:

  • Se devuelven todas los objetos espaciales de la capa de destino, independientemente de que coincidan

  • Si el campo de destino contiene valores duplicados, a estos objetos espaciales se les asigna el mismo objeto espacial de la capa de unión.

  • Si el campo de unión contiene valores coincidentes duplicados, sólo se selecciona el primero objeto espacial obtenido.

Nota

Las uniones en QGIS se basan en la coincidencia de un solo campo, por lo que la mayoría de las veces, usted querrá asegurarse de que los valores en los campos coincidentes son únicos.

QGIS ofrece algunas opciones más para ajustar la unión:

  • checkbox Cache join layer in virtual memory: le permite almacenar valores en la memoria caché (sin geometrías) de la capa unida para acelerar las búsquedas.

  • unchecked Crear índice de atributos en el campo join para acelerar las búsquedas

  • unchecked Dynamic form: ayuda a sincronizar campos de unión sobre la marcha, de acuerdo con el Target field. De esta forma, las restricciones para los campos de unión también se actualizan correctamente. Tenga en cuenta que está desactivado de forma predeterminada porque puede llevar mucho tiempo si tiene muchas funciones o una gran cantidad de combinaciones.

  • Si la capa de destino es editable, se mostrarán algunos iconos en la tabla de atributos al lado de los campos, para informar sobre su estado:

    • joinNotEditable: la capa de unión no está configurada para ser editable. Si desea poder editar características de unión desde la tabla de atributos de destino, debe marcar la opción checkbox Editable join layer.

    • joinedLayerNotEditable: la capa de unión está bien configurada para ser editable, pero su estado actual es de solo lectura.

    • joinHasNotUpsertOnEdit: la capa de unión es editable, pero los mecanismos de sincronización no están activados. Si desea añadir automáticamente una prestación en la capa de unión cuando se cree una prestación en la capa de destino, deberá activar la opción checkbox Agregar al editar. Simétricamente, la opción checkbox Eliminar en cascada puede activarse si desea eliminar automáticamente los objetos espaciales de unión.

  • unchecked Joined fields: en lugar de agregar todos los campos de la capa unida, puede especificar un subconjunto.

  • unchecked Custom field name prefix para campos unidos, para evitar la colisión de nombres

16.4.2. Establecer relaciones entre varias capas

A diferencia de las uniones, que definen un vínculo de uno a uno entre objetos espaciales de dos capas, las relaciones le ayudan a crear interconexiones entre múltiples prestaciones de dos o más capas. Como tales, las relaciones son ajustes a nivel de proyecto y se establecen en la pestaña Proyecto ► Propiedades ► |relaciones| Relaciones. Desde ahí, puede:

  • symbologyAdd Añadir relación cuyo tipo puede ser:

    Nota

    Todavía no existe una forma sencilla de editar una relación no polimórfica una vez creada. Sólo se puede editar el nombre con un doble clic. Para cualquier otro parámetro de dicha relación tendrás que eliminarla y volver a crearla.

  • symbologyAdd Descubrir relaciones: QGIS es capaz de descubrir relaciones existentes desde los formatos de base de datos soportados (PostgreSQL, GeoPackage, ESRI File Geodatabase, …). Esta puede ser una buena forma de facilitar la definición de relaciones.

  • symbologyRemove Eliminar relación

../../../_images/project_relations.png

Figura 16.102 Pestaña Relaciones

16.4.2.1. Relaciones uno a muchos (1-N)

Por ejemplo, se tiene una capa con todas las regiones de Alaska (polígono) que proporciona algunos atributos sobre su nombre y tipo de región y un identificador único (que actúa como clave primaria).

Luego, obtiene otra capa de puntos o tabla con información sobre los aeropuertos que se encuentran en las regiones y también desea realizar un seguimiento de estos. Si desea agregarlos a la capa de regiones, debe crear una relación de uno a muchos utilizando claves externas, porque hay varios aeropuertos en la mayoría de las regiones.

../../../_images/regions_with_airports.png

Figura 16.103 Región de Alaska con aeropuertos

Capas y llaves

QGIS no diferencia entre una tabla y una capa vectorial. Básicamente, una capa vectorial es una tabla con una geometría. Así que puede añadir su tabla como una capa vectorial. Para demostrar la relación 1-n, puede cargar las capas regions y airports en el conjunto de datos de ejemplo. En la práctica, cada aeropuerto pertenece exactamente a una región, mientras que cada región puede tener cualquier número de aeropuertos (una relación típica de uno a muchos).

que tiene un campo de llave foránea (fk_region) para las regiones de capa.

Además de los atributos que describen los aeropuertos, la capa airports tiene otro campo fk_region que actúa como clave externa (si tienes una base de datos, probablemente querrás definir una restricción sobre él). Este campo fk_region siempre contendrá el id de una región. Puede verse como un puntero a la región a la que pertenece.

Todo lo que tienes que hacer es decirle a QGIS la relación entre las capas para que puedas diseñar un formulario de edición personalizado para la edición y QGIS se encarga de la configuración. Funciona con diferentes proveedores (por lo que también puedes usarlo con archivos shape y csv).

Definir relaciones 1-N

La primera cosa que vamos a hacer es informar a QGIS de las relaciones entre las capas. Esto se hace en Proyecto ► Propiedades…. Abre la pestaña Relaciones y haz click en symbologyAdd Agregar Relación.

  • Name se utilizará como título. Debe ser una cadena legible que describa para qué se utiliza la relación. En este caso, diremos airport_relation.

  • Capa de Referencia (Parental) también considerada como capa padre, es la única con la clave primaria, a la que se señala, así que aquí la capa es regions. Debe definir la clave primaria de la capa a la que se hace referencia, así que es ID.

  • Capa Referenciada (Hija) también considerada como capa hija, es la única con la clave externa en ella. En nuestro caso, es la capa airports. Para esta capa, debe agregar un campo de referencia que apunte a la otra capa, por lo que es fk_region.

    Nota

    A veces se necesita más de un campo para identificar de forma exclusiva los objetos espaciales de una capa. La creación de una relación con una capa de este tipo requiere una clave compuesta, es decir, más de un único par de campos coincidentes. Utilice el botón symbologyAdd Añadir un nuevo par de campos como parte de una clave externa compuesta para añadir tantos pares como sean necesarios.

  • Id se utilizará para fines internos y debe ser único. Puede que lo necesite para construir formularios personalizados. Si lo deja vacío, se generará uno para usted, pero puede asignar uno usted mismo para obtener uno que sea más fácil de manejar.

  • Intensidad de la relación establece la intensidad de la relación entre la capa principal y la secundaria. El tipo Association por defecto significa que la capa principal está simplemente vinculada a la secundaria, mientras que el tipo Composition le permite duplicar también las funciones secundarias al duplicar las principales y al eliminar una función los hijos también se eliminan, lo que da como resultado una cascada en todos los niveles (significa que los hijos de los hijos de… también se eliminan).

../../../_images/regions_airports_mapping.png

Figura 16.104 Agregar una relación entre las capas regions y airports

En la pestaña Relaciones, puede también presionar el botón symbologyAdd Descubrir relación para obtener las relaciones disponibles de los proveedores de las capas cargadas. Esto es posible para capas almacenadas en proveedores de datos como PostgreSQL o SpatiaLite.

Formularios para relaciones 1-N

Ahora que QGIS conoce la relación, la utilizará para mejorar los formularios que genera. Como no hemos cambiado el método de formulario predeterminado (autogenerado), simplemente añadirá un nuevo widget en nuestro formulario. Así que seleccionemos la región de la capa en la leyenda y utilicemos la herramienta identificar. Dependiendo de su configuración, el formulario podría abrirse directamente o tendrá que elegir abrirlo en el diálogo de identificación bajo acciones.

../../../_images/airport_relation_dataview.png

Figura 16.105 Regiones de diálogo de identificación con relación a aeropuertos

Como puede ver, los aeropuertos asignados a esta región en particular se muestran en una tabla. Y también hay algunos botones disponibles. Repasemos en breve:

  • El botón toggleEditing es para alternar el modo de edición. Tenga en cuenta que cambia el modo de edición de la capa de aeropuerto, aunque estamos en la forma de entidad de una entidad de la capa de región. Pero la tabla representa entidades de la capa del aeropuerto.

  • El botón saveEdits es para guardar todas las ediciones en la capa secundaria (aeropuerto).

  • El botón capturePoint permite digitalizar la geometría del aeropuerto en el lienzo del mapa y asigna el nuevo objeto espacial a la región actual predeterminada. Tenga en cuenta que el icono cambiará según el tipo de geometría.

  • El botón newTableRow agrega un nuevo registro a la tabla de atributos de la capa del aeropuerto y asigna la nueva entidad a la región actual de forma predeterminada. La geometría se puede dibujar posteriormente con la herramienta de digitalización Añadir pieza.

  • El botón duplicateFeature permite copiar y pegar una o más entidades secundarias dentro de la capa secundaria. Posteriormente, se pueden asignar a una función principal diferente o se pueden modificar sus atributos.

  • El botón deleteSelectedFeatures elimina los aeropuerto(s) seleccionados de forma permanente

  • El símbolo link abre un nuevo cuadro de diálogo donde puede seleccionar cualquier aeropuerto existente que luego se asignará a la región actual. Esto puede ser útil si creó el aeropuerto en la región equivocada por accidente.

  • El símbolo unlink desvincula los aeropuerto(s) seleccionados de la región actual, dejándolos sin asignar (la clave externa se establece en NULL) de manera efectiva.

  • Con el botón zoomToSelected puede acercar el mapa a las entidades secundarias seleccionadas.

  • Los dos botones formView y openTable a la derecha cambia entre la table view and form view de las funciones secundarias relacionadas.

Si utiliza el Diseñador de arrastrar y soltar para el objeto espacial de las regiones, puede seleccionar qué herramientas están disponibles. Incluso puede decidir si se abre un nuevo formulario cuando se añade un nuevo objeto espacial utilizando la opción Forzar la ocultación del formulario en la función de añadir. Tenga en cuenta que esta opción implica que los atributos no nulos deben tomar un valor válido por defecto para funcionar correctamente.

../../../_images/airport_relation_formproperties.png

Figura 16.106 Diseñador de arrastrar y soltar para configurar las herramientas de relación entre regiones y aeropuertos

En el ejemplo anterior, la capa de referencia tiene geometrías (por lo que no es solo una tabla alfanumérica), por lo que los pasos anteriores crearán una entrada en la tabla de atributos de capa que no tiene una característica geométrica correspondiente. Para agregar la geometría:

  1. Elige openTable Abrir Tabla de Atributos para la capa de referencia.

  2. Selecciona el registro que se ha agregado previamente dentro de la forma de entidad de la capa referenciada.

  3. Usa la herramienta de digitalización addPart Añadir parte para adjuntar una geometría al registro de la tabla de atributos seleccionado.

Si trabajas en la tabla del aeropuerto, el widget Relation Reference se configura automáticamente para el campo fk_region (el que se usa para crear la relación), consulta Relation Reference widget.

En el formulario del aeropuerto verás el formView en el lado derecho del campo fk_region: si haces click en el botón, se abrirá el formulario de la capa de la región. Este widget te permite abrir fácil y rápidamente los formularios de las funciones principales vinculadas.

../../../_images/airport_attributes.png

Figura 16.107 Diálogo de identificación de aeropuerto con relación a las regiones

El widget Relation Reference también tiene una opción para incrustar la forma de la capa principal dentro de la secundaria. Está disponible en el menú Propiedades ► Formulario de atributos de la capa del aeropuerto: seleccione el campo fk_region y marca la opción Mostrar formulario incrustado.

Si mira ahora el cuadro de diálogo del objeto espacial, verá que el formulario de la región está incrustado dentro del formulario de los aeropuertos e incluso tendrá un combobox, que le permitirá asignar el aeropuerto actual a otra región.

../../../_images/airport_attributes_expanded.png

Además, si cambias el modo de edición de la capa del aeropuerto, el campo fk_region también tiene una función de autocompletar: mientras escribes, verás todos los valores del campo `` id “” de la capa de la región. Aquí es posible digitalizar un polígono para la capa de región usando el botón symbologyAdd si elegiste la opción Permitir agregar nuevas entidades en la Propiedades -> Formulario de atributos de la capa del aeropuerto.

La capa secundaria también se puede utilizar en la herramienta Seleccionar objetos por valor para seleccionar entidades de la capa principal según los atributos de sus hijos.

En Figura 16.108, se seleccionan todas las regiones donde la altitud media de los aeropuertos es superior a 500 metros sobre el nivel del mar.

Encontrarás que hay muchas funciones de agregación diferentes disponibles en el formulario.

../../../_images/relation_select_by_value.png

Figura 16.108 Seleccionar entidades principales con valores secundarios

16.4.2.2. Relaciones de muchos a muchos (N-M)

Las relaciones N-M son relaciones de muchos a muchos entre dos tablas. Por ejemplo, las capas de airports y airlines: un aeropuerto recibe varias compañías aéreas y una compañía aérea vuela a varios aeropuertos.

Este código SQL crea las tres tablas que necesitamos para una relación N-M en un esquema PostgreSQL/PostGIS llamado locations. Puedes ejecutar el código usando la Database ► DB Manager… para PostGIS o herramientas externas como pgAdmin. La tabla airports almacena la capa airports y la tabla airline almacena la capa airlines. En ambas tablas se utilizan pocos campos para mayor claridad. La parte tricky es la tabla airports_airlines. La necesitamos para listar todas las aerolíneas para todos los aeropuertos (o viceversa). Este tipo de tabla se conoce como tabla dinámica. Las restricciones de esta tabla obligan a asociar un aeropuerto con una línea aérea sólo si ambos existen ya en sus capas.

CREATE SCHEMA locations;

CREATE TABLE locations.airports
(
   id serial NOT NULL,
   geom geometry(Point, 4326) NOT NULL,
   airport_name text NOT NULL,
   CONSTRAINT airports_pkey PRIMARY KEY (id)
);

CREATE INDEX airports_geom_idx ON locations.airports USING gist (geom);

CREATE TABLE locations.airlines
(
   id serial NOT NULL,
   geom geometry(Point, 4326) NOT NULL,
   airline_name text NOT NULL,
   CONSTRAINT airlines_pkey PRIMARY KEY (id)
);

CREATE INDEX airlines_geom_idx ON locations.airlines USING gist (geom);

CREATE TABLE locations.airports_airlines
(
   id serial NOT NULL,
   airport_fk integer NOT NULL,
   airline_fk integer NOT NULL,
   CONSTRAINT airports_airlines_pkey PRIMARY KEY (id),
   CONSTRAINT airports_airlines_airport_fk_fkey FOREIGN KEY (airport_fk)
      REFERENCES locations.airports (id)
      ON DELETE CASCADE
      ON UPDATE CASCADE
      DEFERRABLE INITIALLY DEFERRED,
   CONSTRAINT airports_airlines_airline_fk_fkey FOREIGN KEY (airline_fk)
      REFERENCES locations.airlines (id)
      ON DELETE CASCADE
      ON UPDATE CASCADE
      DEFERRABLE INITIALLY DEFERRED
 );

En lugar de PostgreSQL, también puedes utilizar GeoPackage. En este caso, las tres tablas se pueden crear manualmente usando Base de datos ► Administrador de Bases de datos…. En GeoPackage no hay esquemas, por lo que el prefijo locations no es necesario.

Las restricciones de clave externa en la tabla `` Airports_airlines`` no se pueden crear usando Tabla ► Crear Tabla… o Tabla ► Editar Tabla… por lo que deben crearse usando Base de datos ► Ventana SQL…. GeoPackage no admite declaraciones ADD CONSTRAINT, por lo que la tabla airports_airlines debe crearse en dos pasos:

  1. Configura la tabla solo con el campo id usando Tabla ► Crear tabla …

  2. Usando Base de Datos ► Ventana SQL…, escribe y ejecuta este código SQL:

    ALTER TABLE airports_airlines
       ADD COLUMN airport_fk INTEGER
       REFERENCES airports (id)
       ON DELETE CASCADE
       ON UPDATE CASCADE
       DEFERRABLE INITIALLY DEFERRED;
    
    ALTER TABLE airports_airlines
       ADD COLUMN airline_fk INTEGER
       REFERENCES airlines (id)
       ON DELETE CASCADE
       ON UPDATE CASCADE
       DEFERRABLE INITIALLY DEFERRED;
    

Luego, en QGIS, debe configurar dos una-a-muchas relaciones como se explicó anteriormente:

  • una relación entre la tabla de airlines y la tabla dinámica;

  • y una segunda entre la tabla airports y la tabla dinámica.

Una forma más fácil de hacerlo (solo para PostgreSQL) es usando Descubrir Relaciones en Proyecto ► Propiedades ► Relacione. QGIS leerá automáticamente todas las relaciones en su base de datos y solo tiene que seleccionar las dos que necesita. Recuerde cargar primero las tres tablas en el proyecto QGIS.

../../../_images/airports_airlines_relation.png

Figura 16.109 Relaciones y descubrimiento automático

En caso de que desee eliminar un `` airport`` o una airline, QGIS no eliminará los registros asociados en la tabla Airports_airlines. Esta tarea la realizará la base de datos si especificamos las * restricciones * correctas en la creación de la tabla dinámica como en el ejemplo actual.

Nota

** Combinando relación N-M con grupo de transacciones automáticas **

Debes habilitar el modo de transacción en Propiedades del proyecto ► Fuentes de datos ► cuando trabajes en dicho contexto. QGIS debería poder agregar o actualizar fila(s) en todas las tablas (airlines, airports y las tablas dinámicas).

Finalmente tenemos que seleccionar la cardinalidad correcta en Layer Properties ► Attributes Form para las capas airports y airlines. Para el primero debemos elegir la opción aerolíneas (id) y para el segundo la opción aeropuertos (id).

../../../_images/airports_airlines_relation_formproperties.png

Figura 16.110 Establecer cardinalidad de relación

Ahora puede asociar un airport con una airline (o una airline con un airport ) usando Agregar función secundaria o Vincular función secundaria existente en los subformularios. Se insertará automáticamente un registro en la tabla Airports_airlines.

../../../_images/add_airport_airline.png

Figura 16.111 Relación N-M entre aeropuertos y aerolíneas

Nota

Uso de cardinalidad ** relación muchos a uno **

A veces, ocultar la tabla dinámica en una relación N-M no es deseable. Principalmente porque hay atributos en la relación que sólo pueden tener valores cuando se establece una relación. Si sus tablas tienen un campo de geometría, podría ser interesante activar la opción Identificación en mapa (Propiedades de capa ► Formulario de atributos ► Widgets disponibles ► Campos) para los campos de clave externa en la tabla pivote.

Nota

** Clave principal de la tabla dinámica **

Evite utilizar múltiples campos en la clave primaria de una tabla pivotante. QGIS asume una única clave primaria por lo que una restricción como constraint airports_airlines_pkey primary key (airport_fk, airline_fk) no funcionará.

16.4.2.3. Relaciones polimórficas

El propósito

Las relaciones polimórficas son un caso especial de las relaciones 1-N, donde una única capa de referencia (documento) contiene las características de varias capas de referencia. Esto difiere de las relaciones normales que requieren una capa de referencia diferente para cada capa referenciada. Se logra una sola capa de referencia (documento) agregando una columna layer_field adicional en la capa de referencia (documento) que almacena información para identificar la capa referenciada. En su forma más simple, la capa de referencia (documento) simplemente insertará el nombre de la capa a la que se hace referencia en este campo.

Para ser más precisos, una relación polimórfica es un conjunto de relaciones normales que tienen la misma capa de referencia pero que tienen la capa de referencia definida dinámicamente. La configuración polimórfica de la capa se resuelve mediante el uso de una expresión que debe coincidir con algunas propiedades de la capa a la que se hace referencia, como el nombre de la tabla, la identificación de la capa, el nombre de la capa.

Imagina que vamos al parque y queremos hacer fotos de diferentes especies de plantas y animales que vemos allí. Cada planta o animal tiene varias imágenes asociadas, por lo que si usamos las relaciones 1:N normales para almacenar imágenes, necesitaríamos dos tablas separadas, animal_images y plant_images. Esto podría no ser un problema para 2 mesas, pero imagina si queremos tomar fotos separadas para hongos, pájaros, etc.

Las relaciones polimórficas resuelven este problema ya que todos los objetos espaciales referenciados se almacenan en la misma tabla documentos. Para cada objeto espacia, la capa referenciada se almacena en el campo referenced_layer y el id del objeto espacial referenciado en el campo referenced_fk.

Definición de relaciones polimórficas

Primero, informe a QGIS sobre las relaciones polimórficas entre las capas. Esto se hace en Proyecto ► Propiedades…. Abra la pestaña Relaciones y haga clic en la pequeña flecha hacia abajo junto a symbologyAdd| Agregar relación, para que pueda seleccionar la opción Agregar relación polimórfica del menú desplegable recién aparecido.

../../../_images/polymorphic_relation_properties.png

Figura 16.112 Agregar una relación polimórfica usando la capa documents como referencia y animals y plantas como capas referenciadas.

  • Id se utilizará para fines internos y debe ser único. Puede que lo necesite para construir formularios personalizados. Si lo deja vacío, se generará uno para usted, pero puede asignar uno usted mismo para obtener uno que sea más fácil de manejar.

  • Capa de Referencia (Niño) también considerada como capa secundaria, es aquella que tiene el campo de clave foránea. En nuestro caso, esta es la capa documentos. Para esta capa, debe agregar un campo de referencia que apunte a la otra capa, por lo que es referenced_fk.

    Nota

    A veces se necesita más de un campo para identificar de forma exclusiva los objetos espaciales de una capa. La creación de una relación con una capa de este tipo requiere una clave compuesta, es decir, más de un único par de campos coincidentes. Utilice el botón symbologyAdd Añadir un nuevo par de campos como parte de una clave externa compuesta para añadir tantos pares como sean necesarios.

  • Campo de capa es el campo de la tabla de referencia que almacena el resultado de la expresión de capa evaluada, que es la tabla de referencia a la que pertenece esta entidad. En nuestro ejemplo, este sería el campo referenced_layer.

  • Expresión de capa se evalúa como un identificador único de la capa. Este puede ser el nombre de la capa @layer_name, la identificación de la capa @layer_id, el nombre de la tabla de la capa decode_uri(@layer, 'table') o cualquier cosa que pueda identificar de manera única una capa.

  • Intensidad de la relación establece la intensidad de las relaciones generadas entre la capa principal y la secundaria. El tipo Asociación por defecto significa que la capa principal está simplemente vinculada a la secundaria, mientras que el tipo Composición le permite duplicar también las funciones secundarias al duplicar las principales y al eliminar una función los hijos también se eliminan, lo que da como resultado una cascada en todos los niveles (significa que los hijos de los hijos de… también se eliminan).

  • Capas referenciadas también consideradas como capas padre, son aquellas que tienen la clave primaria apuntada, por lo que aquí serían capas plantas y animales. Debe definir la clave principal de las capas a las que se hace referencia desde el menú desplegable, por lo que es fid. Tenga en cuenta que la definición de una clave primaria válida requiere que todas las capas referenciadas tengan un campo con ese nombre. Si no existe tal campo, no puede guardar una relación polimórfica.

Una vez añadida, la relación polimórfica se puede editar a través de la entrada de menú Editar relación polimórfica.

../../../_images/polymorphic_relations.png

Figura 16.113 Vista previa de la relación polimórfica recién creada y sus relaciones hijas para animales y plantas.

El ejemplo anterior utiliza el siguiente esquema de base de datos:

CREATE SCHEMA park;

CREATE TABLE park.animals
(
   fid serial NOT NULL,
   geom geometry(Point, 4326) NOT NULL,
   animal_species text NOT NULL,
   CONSTRAINT animals_pkey PRIMARY KEY (fid)
);

CREATE INDEX animals_geom_idx ON park.animals USING gist (geom);

CREATE TABLE park.plants
(
   fid serial NOT NULL,
   geom geometry(Point, 4326) NOT NULL,
   plant_species text NOT NULL,
   CONSTRAINT plants_pkey PRIMARY KEY (fid)
);

CREATE INDEX plants_geom_idx ON park.plants USING gist (geom);

CREATE TABLE park.documents
(
   fid serial NOT NULL,
   referenced_layer text NOT NULL,
   referenced_fk integer NOT NULL,
   image_filename text NOT NULL,
   CONSTRAINT documents_pkey PRIMARY KEY (fid)
);