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

# Entities and Relationships

The Annotate SDK revolves around three major concepts: Projects, Datasets, and Ontologies. Each of these concepts is linked to a `class` that allows you to interact with them using the Annotate SDK. For example, the *Project* has an associated [Project](/sdk-documentation/sdk-references/project#project) class and the *Dataset* has an associated [Dataset](/sdk-documentation/sdk-references/dataset) class.

<Note>Install the Annotate SDK by following the [Installation](/sdk-documentation/getting-started-sdk/installation-sdk) guide or go to the [Authentication](/sdk-documentation/general-sdk/authentication-sdk) page to get started with the Encord Annotate SDK.</Note>

## Entity Relationships

The following diagram shows how entities in Encord are organized.

```mermaid theme={"dark"}
erDiagram
    Project {
        string project_hash
    }
    DataUnit {
        string data_hash
        string data_title
        string client_metadata
    }
    Dataset {
        string dataset_hash
        string dataset_title
    }
    Ontology {
        string ontology_hash
        string ontology_name
        string ontology_description
    }
    Workflow {
        string workflow_hash
    }
    Collaborator {
        string user
    }

    Project ||--o| Dataset : "attaches"
    Project ||--o| Ontology : "attaches"
    Project ||--o| Workflow : "follows"
    Project ||--o{ Collaborator : "includes"
    Dataset ||--o{ DataUnit : "composed of"
```

## SDK Data Structure

The following diagram shows how data in the Encord SDK is structured for each labeled Data Unit.

<div class="flex justify-center">
  ```mermaid theme={"dark"}
  erDiagram
      LabelRow {
          string label_hash
          string data_unit_hash
          string status
      }
      Branch {
          string branch_name
          string user
      }
      Labels {
          string objectHash
          string classificationHash
          string label_type
      }

      LabelRow ||--o{ Branch : "can have multiple"
      Branch ||--o{ Labels : "contains multiple"
  ```
</div>

***

## Users

Users are people authenticated to interact with the Encord platform. Users can access resources and capabilities that are also available on the platform.

<Tip>For collaborative teams using our SDK, we recommend creating shared service accounts and creating access keys for those shared accounts. For example, to have several people create ontologies, datasets, and projects programmatically, create an email account for use with Encord (for example, [encord-admins@mycompany.com](mailto:encord-admins@mycompany.com)) and generate an SSH for that email account.</Tip>

***

## Projects

The space where labels, annotations, and reviews live.
Projects can be linked to multiple datasets. For a Web-app specific introduction,
go to the [Projects](/platform-documentation/GettingStarted/gettingstarted-create-project) page.

<div class="flex justify-center">
  <img src="https://storage.googleapis.com/docs-media.encord.com/static/img/sdk/project-id.png" width="600" />
</div>

***

## Datasets

Datasets are subsets of data you upload to Encord. Datasets are attached to, and can be reused across multiple Projects.

Learn more about Datasets in Encord [here](/platform-documentation/Annotate/annotate-datasets/annotate-datasets).

Each Dataset is identified using a unique `"<dataset_hash>"` - a unique ID that can be found within the dataset's *Settings*, or the URL in the Encord platform when the dataset is being viewed, as shown below.

<div class="flex justify-center">
  <img src="https://storage.googleapis.com/docs-media.encord.com/static/img/sdk/dataset-id.png" width="600" />
</div>

### Data units

Datasets are composed of data units - packages of data that constitute a single annotation task. For example, a video, a single image, an image group, or a DICOM series. Data units are identified using their `<data_hash>`, which is found in the URL when the data unit is open in your browser, as shown below.

`app.encord.com/label_editor/\<data_hash>&\<project_hash>/0/0` or `app.us.encord.com/label_editor/\<data_hash>&\<project_hash>/0/0`

<Note>The `<data_unit_hash>` and the `<project_hash>` are both shown in the URl when a data unit is open in the browser. They are separated by the '&' symbol.</Note>

***

## Label Row

Label Rows are collections of labels belonging to a particular data unit in a Project.

***

## Branches

All labels are created on a branch. In **Consensus Projects**, each annotator works on their own separate branch to create labels. In **Non-Consensus Projects**, all labels are created on the `main` branch.

Learn more about Consensus Projects [here](/platform-documentation/Annotate/annotate-projects/annotate-workflows-consensus).

***

## Ontology

Ontologies are hierarchical structures that define the top-level concepts and categories in your data, along with nested attributes for detailed annotations. They consist of *Classes* at the top level, which can be either *Objects* or *Classifications*.

Learn more about Ontologies [here](/platform-documentation/Annotate/annotate-ontologies/annotate-ontologies).
