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

# Esquemas de entidad

> Define estructuras de datos personalizadas usando un JSON Schema con reglas de validación y tipos de campo

<div className="dev-docs-banner">
  <div className="dev-docs-banner-content">
    <div className="dev-docs-banner-title">
      Estás viendo la documentación para desarrolladores
    </div>

    <div className="dev-docs-banner-text">
      Esta documentación es para desarrolladores que trabajan con la plataforma para desarrolladores de Base44. Para información sobre la gestión de los datos de tu app desde el editor de apps, consulta <a href="/Building-your-app/Managing-your-app-data">Gestionar los datos de la app</a>.
    </div>
  </div>
</div>

Las entidades se definen usando un JSON Schema que describe la estructura de datos y las reglas de validación.

## Estructura básica del esquema

Los esquemas de entidad se definen en archivos JSON en el directorio de entidades de tu proyecto. Por defecto es `base44/entities/`, pero puedes personalizar la ruta en tu [configuración del proyecto](/developers/backend/overview/project-structure#config-jsonc). El nombre del archivo determina el nombre de la entidad. Por ejemplo, `Task.json` crea una entidad `Task`.

Aquí tienes una plantilla de esquema de entidad:

```json theme={null}
{
  "name": "my_entity",
  "type": "object",
  "title": "My Entity",
  "description": "Description of what this entity represents",
  "properties": {
    "<field_name>": {
      "type": "<field_type>",
      "<option>": "<value>"
    }
  },
  "required": ["<field_name>"]
}
```

## Campos integrados

Cada registro de entidad incluye automáticamente los siguientes campos. No definas campos con estos nombres en tu esquema.

| Campo                    | Tipo     | Descripción                                    |
| ------------------------ | -------- | ---------------------------------------------- |
| `id`                     | string   | Identificador único del registro               |
| `created_date`           | datetime | Cuándo se creó el registro                     |
| `updated_date`           | datetime | Cuándo se actualizó el registro por última vez |
| `created_by`             | string   | Email del usuario que creó el registro         |
| `created_by_id`          | string   | ID del usuario que creó el registro            |
| `is_deleted` (interno)   | boolean  | Flag de eliminación lógica                     |
| `deleted_date` (interno) | datetime | Cuándo se eliminó el registro                  |
| `is_sample` (interno)    | boolean  | Si el registro es de datos de muestra          |
| `entity_name` (interno)  | string   | Nombre del tipo de entidad                     |
| `app_id` (interno)       | string   | App ID                                         |
| `environment` (interno)  | string   | `prod` o `dev`                                 |

Los campos internos no se devuelven en las respuestas de la API, pero se pueden referenciar en las [reglas de seguridad](/developers/backend/resources/entities/security).

## Campos del esquema

<ResponseField name="name" type="string">
  Identificador en cadena de texto de la entidad.
</ResponseField>

<ResponseField name="type" type="string" required>
  Debe ser `"object"`.
</ResponseField>

<ResponseField name="title" type="string">
  Nombre para mostrar amigable.
</ResponseField>

<ResponseField name="description" type="string">
  Descripción de lo que representa la entidad.
</ResponseField>

<ResponseField name="properties" type="object" required>
  Objeto que contiene las definiciones de tus campos. Cada campo tiene un `type` y reglas
  opcionales de validación.
</ResponseField>

## Tipos de campo

Las entidades admiten varios tipos de campo para definir los distintos tipos de datos que puedes almacenar: `string`, `integer`, `number`, `boolean`, `array` y `object`.
Cada campo dentro de `properties` requiere un `type`. Según el tipo, puedes añadir opciones de validación.

### Campos string

Los campos string admiten estas opciones:

* **`minLength`** / **`maxLength`**: Controlan el número mínimo y máximo de caracteres.
* **`pattern`**: Expresión regular para validación personalizada.
* **`format`**: Formatos predefinidos. Valores admitidos:
  * `"date"`
  * `"date-time"`
  * `"time"`
  * `"email"`
  * `"uri"`
  * `"hostname"`
  * `"ipv4"`
  * `"ipv6"`
  * `"uuid"`
* **`enum`**: Restringe a valores específicos permitidos. Defínelo como un array: `["value1", "value2", "value3"]`.
* **`default`**: Valor predeterminado si no se proporciona ninguno.

### Campos integer

Los campos integer admiten estas opciones:

* **`minimum`** / **`maximum`**: Establecen límites inferior/superior inclusivos.
* **`default`**: Valor predeterminado si no se proporciona ninguno.

### Campos number

Los campos number admiten estas opciones:

* **`minimum`** / **`maximum`**: Establecen límites inferior/superior inclusivos.
* **`default`**: Valor predeterminado si no se proporciona ninguno.

### Campos boolean

Los campos boolean admiten estas opciones:

* **`default`**: Valor predeterminado si no se proporciona ninguno.

### Campos array

Los campos array admiten estas opciones:

* **`items`**: Define el tipo/esquema para los elementos del array.
* **`default`**: Valor de array predeterminado si no se proporciona ninguno.

### Campos object

Los campos object admiten estas opciones:

* **`properties`**: Define los campos dentro del objeto.
* **`required`**: Lista de nombres de propiedades obligatorios.

## Campos obligatorios

Especifica qué campos deben proporcionarse:

```json theme={null}
{
  "required": ["title", "email"]
}
```

## Ejemplo completo

Aquí tienes un esquema de entidad completo:

```json theme={null}
{
  "name": "Task",
  "type": "object",
  "title": "Task",
  "description": "A task item with priority, due date, and completion status",
  "properties": {
    "title": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200
    },
    "description": {
      "type": "string",
      "maxLength": 1000
    },
    "priority": {
      "type": "string",
      "enum": ["low", "medium", "high"],
      "default": "medium"
    },
    "completed": {
      "type": "boolean",
      "default": false
    },
    "due_date": {
      "type": "string",
      "format": "date"
    },
    "tags": {
      "type": "array",
      "items": { "type": "string" }
    },
    "internal_notes": {
      "type": "string",
      "rls": {
        "read": {"user_condition": {"role": "admin"}},
        "write": {"user_condition": {"role": "admin"}}
      }
    }
  },
  "required": ["title"],
  "rls": {
    "create": true,
    "read": {"created_by": "{{user.email}}"},
    "update": {"created_by": "{{user.email}}"},
    "delete": {"created_by": "{{user.email}}"}
  }
}
```

## Desplegar entidades

Después de definir tu esquema de entidad, despliégalo en Base44 usando [`entities push`](/developers/references/cli/commands/entities-push). Las entidades también se despliegan automáticamente cuando ejecutas el comando [`deploy`](/developers/references/cli/commands/deploy) para desplegar todo tu proyecto.

Una vez desplegado, puedes interactuar con tus entidades usando el [módulo `entities` del SDK](/developers/references/sdk/docs/type-aliases/entities). El nombre de la entidad en tu esquema debe coincidir exactamente con cómo accedes a ella en el SDK, incluida la capitalización. Por ejemplo, si tu esquema tiene `"name": "Task"`, debes acceder a ella como `base44.entities.Task.list()`.

Los esquemas de entidad desplegados se pueden visualizar en el panel en la sección **Data**.

## Ver también

* [Esquema de usuario](/developers/backend/resources/entities/user-schema): Entidad integrada especial para la autenticación de usuarios
* [Seguridad](/developers/backend/resources/entities/security): Configura reglas de seguridad a nivel de fila para entidades
* [Estructura del proyecto](/developers/backend/overview/project-structure): Cómo encajan los esquemas de entidad en tu proyecto

<Note>Esta página se tradujo con IA. Para información más precisa y actualizada, consulta la [versión en inglés](/). </Note>
