Skip to content

Visual canvas: connect specific attributes (columns), not just whole entities #5

Closed

Description

@matejnovak29

The problem

Summary

In the visual canvas, relationships are drawn between whole entity boxes. It
is not visible which columns are actually joined. With more than one
relationship between two entities, or with composite keys, the diagram no
longer says anything useful.

What you have in mind

Expected behaviour

  • Each relationship line is anchored to the concrete attribute rows on both
    sides (orders.customer_id -> customer.customer_id), not to the entity
    header.
  • Multiple relationships between the same pair of entities are drawn as
    separate lines, each on its own attribute row.
  • Composite keys are drawn as one relationship covering the whole column set
    (or as grouped lines), not as unrelated single lines.
  • Hovering an attribute highlights the relationships it takes part in and dims
    the rest; hovering a line highlights both endpoint attributes.
  • Ideally: drawing a line from one attribute to another creates the
    relationship in the model (drag from column to column).

Actual behaviour

Lines connect entity boxes only. The attribute pairing has to be looked up in
the YAML files.

Notes

  • Depends on attribute-level relationship metadata in the model — see the
    primary key / foreign key issue (role: foreign_key +
    references: {entity, attribute}). Without that metadata there is nothing
    to anchor the lines to.
  • For entities with many attributes it helps to keep the referenced attributes
    visible (pin key/FK columns to the top) when the box is collapsed, so the
    endpoints stay meaningful.

Context

No response

Activity

  1. dbose commented on Sep 10, 2026

    @dbose
    Owner
    Image

    Relationships in the ER canvas now anchor to concrete attribute rows instead of entity boxes — verified end-to-end in the browser against the ibor demo. All of the issue's asks landed:

    Column-anchored lines — price.instrument_id → instrument.instrument_id, instrument.counterparty_id → counterparty.counterparty_id, etc., each leaving/entering the correct row (confirmed visually).
    Multiple relationships between the same pair separate onto their own rows via distinct per-attribute handles.
    Composite keys draw as one line anchored to the first member with a (N) count (IDEF1X-style), not N overlapping crow's-feet.
    Hover highlighting — hovering instrument.counterparty_id lit up just that relationship and dimmed everything else; hovering an edge emphasizes both endpoint rows (confirmed).
    Drag column→column prefills the relationship modal with both attributes, reusing the existing create_relationship payload.
    Key/FK pinning — endpoint attributes float below the business keys so anchors stay visible.
    Unmapped relationships cleanly fall back to header-to-header (nothing regresses).

  2. added a commit that references this issue on Sep 10, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions