# What is a Run?

_Code runs that transform data._

[DObjects](https://lamin.ai/docs/lnschema-core/lnschema_core.dobject) represent atomic datasets in object storage: jointly measured observations of variables (features). They are generated by running code, instances of [Run](https://lamin.ai/docs/lnschema-core/lnschema_core.run).

A data transformation (run) is _any_ transformation of a dobject.

For instance:

- Jupyter notebooks (notebook)
- Pipeline runs of software (workflows) and scripts (run).
- Physical instruments making measurements (needs to be configured).
- Human decisions based on data visualizations (needs to be configured).

It typically has inputs and outputs:

- References to outputs are stored in the dobject table in the run_id column, which stores a foreign key into the run table. This is possible as every given dobject has a unique data source: the run that produced the dobject. Note that a given run may output several dobjects.
- References to input dobjects are stored in the run_in table, a many-to-many link table between the dobject and run tables. Any dobject might serve as an input for many run. Similarly, any run might have many dobjects as inputs.
