> For the complete documentation index, see [llms.txt](https://docs.dbnl.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.dbnl.com/v0.20.x/using-distributional/data/data-objects.md).

# Data Objects

The core object for recording and studying an app’s behavior is the run, which contains:

* a table where each row holds the outcomes from a single app usage,
* structural information about the components of the app and how they relate, and
* user-defined metadata for remembering the context of a run.

Runs live within a selected project, which serves as an organizing tool for the runs created for a single app.

The structure of a run is defined by its [Run Configuration](/v0.20.x/using-distributional/python-sdk/sdk-objects/runconfig.md), or **RunConfig**.  This informs dbnl about what information will be stored in each result (the columns) and how the app is organized (the components).  A **Component** is a mechanism for grouping columns based on their role within the app; this information is stored in the run configuration.

Using the [row\_id](/v0.20.x/using-distributional/python-sdk/sdk-objects/runconfig.md) functionality within the run configuration, you also have the ability to designate **Unique Identifiers** – specific columns which uniquely identify matching results between runs.  Adding this information enables specific tests of individual result behavior.

The data associated with each run is passed to dbnl [through the SDK](/v0.20.x/using-distributional/python-sdk.md) as a pandas dataframe.
