> ## Documentation Index
> Fetch the complete documentation index at: https://docs.getkato.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Connect related records

> Show how people, clients, projects, and other items belong together.

export const DocImage = ({src, alt, caption, kind = "workspace", thumbnail = false, natural = false}) => {
  const paths = {
    objects: "m12 3 9 4.5v9L12 21l-9-4.5v-9L12 3Z M3 7.5l9 4.5 9-4.5 M12 12v9",
    attributes: "M4 5h16 M4 12h16 M4 19h16 M8 3v4 M16 10v4 M10 17v4",
    records: "M5 3h14v18H5z M8 7h8 M8 11h8 M8 15h5",
    relationships: "M8 8H4v8h4 M16 8h4v8h-4 M8 12h8 M10 10l-2 2 2 2 M14 10l2 2-2 2",
    views: "M3 4h18v16H3z M3 9h18 M9 9v11 M15 9v11",
    importing: "M12 3v12 M8 11l4 4 4-4 M4 16v5h16v-5",
    workspace: "M4 4h16v16H4z M4 9h16 M9 9v11",
    navigation: "m5 5 14 5-6 3-3 6-5-14Z",
    team: "M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2 M16 4a4 4 0 0 1 0 8 M22 21v-2a4 4 0 0 0-3-3.87 M13 7a4 4 0 1 1-8 0 4 4 0 0 1 8 0Z",
    tasks: "M9 6h11 M9 12h11 M9 18h11 M3 6l1 1 2-2 M3 12l1 1 2-2 M3 18l1 1 2-2",
    meetings: "M4 5h16v15H4z M4 10h16 M8 3v4 M16 3v4 M8 14h3 M8 17h6",
    ai: "m12 3 2.5 6.5L21 12l-6.5 2.5L12 21l-2.5-6.5L3 12l6.5-2.5L12 3Z",
    automation: "M9 3h6v6H9z M3 16h6v5H3z M15 16h6v5h-6z M12 9v4 M6 16v-3h12v3"
  };
  return <figure className={["kato-visual", thumbnail ? "kato-visual--thumbnail" : ""].filter(Boolean).join(" ")}>
    {src ? <div className={["kato-visual-frame", natural ? "kato-visual-frame--natural" : ""].filter(Boolean).join(" ")}>
        {thumbnail ? <img src={src} alt={alt || ""} loading="lazy" decoding="async" /> : <a className="kato-visual-fullsize" href={src} target="_blank" rel="noreferrer" aria-label={`Open full-size image: ${alt || caption || "Kato guide"}`}>
            <img src={src} alt={alt || ""} loading="lazy" decoding="async" />
          </a>}
      </div> : <div className="kato-visual-frame kato-placeholder" role={thumbnail ? undefined : "img"} aria-label={thumbnail ? undefined : `Image placeholder: ${alt || caption || "Kato workspace"}`} aria-hidden={thumbnail ? "true" : undefined}>
        <span className="kato-orbit kato-orbit--outer" />
        <span className="kato-orbit kato-orbit--inner" />
        <span className="kato-visual-icon"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="1.4" strokeLinecap="round" strokeLinejoin="round" aria-hidden="true"><path d={paths[kind] || paths.workspace} /></svg></span>
        {!thumbnail && <span className="kato-placeholder-label">Image placeholder</span>}
      </div>}
    {caption && !thumbnail && <figcaption>{caption}{src && <span className="kato-visual-hint">Select the image to view it full size.</span>}</figcaption>}
  </figure>;
};

Relationships make connections explicit. A client can have several projects;
a project can involve several people. Linking records helps your team follow
those connections without maintaining the same details in multiple places.

<DocImage kind="relationships" alt="A client record connected to several project records" caption="Connect records instead of duplicating their details." />

## Choose the kind of connection

Kato provides **Record** attributes for linking items and **Relationship**
attributes for a paired connection between objects. A relationship can have a
corresponding attribute on the other side, such as a project's Client and a
client's Projects.

## Decide how many records can connect

| Pattern      | Example structure                                    |
| ------------ | ---------------------------------------------------- |
| One to one   | One equipment item linked to one registration record |
| One to many  | One client linked to several projects                |
| Many to one  | Several projects linked to one client                |
| Many to many | Several people participating in several projects     |

These are design examples. Choose the pattern that matches your team's rules,
then configure the relationship and the objects it connects.

## Example: connect Projects to Clients

For this example, each project has one client and a client can have several
projects. Start from the Projects object, so the pattern is **many projects to
one client**.

1. Confirm that both objects exist and that you can edit their attributes.
2. In Projects' **Attributes** settings, choose **Create attribute**, then select
   **Relationship** as the type.
3. Name the Projects-side attribute **Client**.
4. Choose Clients as the related object and select **Many to one** from the
   relationship options. Read the preview to confirm the direction.
5. Name the corresponding attribute on Clients **Projects**, then save the configuration.
6. Open the Relio website project and link its Client attribute to Relio.
7. Open Relio and inspect the corresponding Projects relationship. Check that
   the website project appears there.

The names are from the perspective of each object: a project has a **Client**;
a client has **Projects**. Using the same vague label on both sides makes the
connection harder to interpret.

## Check the number of allowed links

Test with two projects linked to Relio. Both should fit the example's model.
If your business allows several clients on one project, that is a different
rule: review a many-to-many relationship instead of forcing extra client names
into a text attribute.

Changing which records are linked is different from changing the relationship
definition. The first changes one item's connections; the second changes the
structure used by the objects.

## If a link does not behave as expected

* **The expected object is not available:** check the configured target object
  or allowed object types for the attribute.
* **Only one linked record is allowed:** inspect the relationship's one/many
  setting for that side.
* **There is no corresponding link on the other object:** confirm that you
  created a paired Relationship, rather than assuming a Record attribute has
  the same reciprocal behavior.
* **Two similarly named records appear:** inspect them before linking; display
  names alone do not prove that records represent the same item.

## Make links useful

Use names that explain each side of the connection. **Client** and **Projects**
are easier to follow than **Related item** on both sides. When adding a link,
select the existing record that represents the item.

Test the structure with a few examples. Confirm that each side allows the number
of connections you expect before using it across the workspace.

<Card title="Create focused views" icon="table-columns" href="/documentation/data/views">
  Put the right records in front of your team.
</Card>


## Related topics

- [Work with records](/documentation/data/records.md)
- [Onboard a new client](/recipes/onboard-client.md)
- [Invoices](/integrations/invoices.md)
- [Turn a meeting into a plan](/recipes/meeting-follow-ups.md)
- [Changelog](/changelog.md)
