> For the complete documentation index, see [llms.txt](https://dzhelezov.gitbook.io/hydra/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://dzhelezov.gitbook.io/hydra/docs/schema-spec/entities.md).

# Entities

Entities is the backbone of the data model and translate into the db schema

Entities are the top-level type definitions in the input schema marked with the `@entity` directive. Entity fields are normally built-in scalar types but can also be

* an array of primitive types
* an [enum](/hydra/docs/schema-spec/enums.md),
* an [entity reference](/hydra/docs/schema-spec/entity-relationship.md)
* an [algebraic type ](/hydra/docs/schema-spec/variant-types.md)

All entities have an auto-generated `ID` field which is reserved and cannot be used in the input schema.

## Primitive types

The following scalar types are supported:

* `Boolean`
* `String`
* `Int`
* `Float`
* `BigInt` supports arbitrarily large numbers and is useful for representing e.g. large numbers `uint256`
* `Bytes`

Arrays follow the GraphQL [spec](https://spec.graphql.org/June2018/).

## Modifiers and decorators

By default, each field is nullable. To indicate a no-null constraint mark the field with `!`

If a property must be unique across all entities of the given type, mark it with a built-in `@unique` directive

Schema comments are natively supported and are propagated to the output schema

## Example

```graphql
"It is just a boring nine-five person"
type Person @entity {
    name: String!
    married: Boolean
    age: Int
    "one person, one account, one life"
    account: Bytes! @unique
    salary: BigInt
    interests: [String]
}
```
