I think a more generic implementation is also possible: Any object you move should topologically move the objects that reference it, but not the objects that it references.
Example:
cross_section_location.channel_id references channel.id --> when editing channel geometry, the cross_section_location should also be moved. When editing the cross_section_location geometry, the channel geometry should be left untouched
I think a more generic implementation is also possible: Any object you move should topologically move the objects that reference it, but not the objects that it references.
Example: