# Native database types (/docs/orm/prisma-migrate/workflows/native-database-types)

Location: ORM > Prisma Migrate > Workflows > Native database types

Prisma Migrate translates the model defined in your [Prisma schema](/orm/prisma-schema/overview) into features in your database.

<img alt="A diagram that shows a Prisma schema on the left (labeled: Prisma schema, models) and a database on the right (labeled: Database, tables). Two parallel arrows connect the schema and the database, showing how '@unique' maps to 'UNIQUE' and '@id' maps to 'PRIMARY KEY'." src="/img/orm/prisma-migrate/understanding-prisma-migrate/migrate-mapping.png" width="1174" height="392" />

Every¹ feature in your [data model](/orm/prisma-schema/data-model/models) maps to a corresponding feature in the underlying database. **If you can define a feature in the Prisma schema, it is supported by Prisma Migrate.**

For a complete list of Prisma schema features, refer to:

* [Database features matrix](/orm/reference/database-features) for a list of database features and what they map to in the Prisma schema.
* [Prisma schema reference](/orm/reference/prisma-schema-reference) for a list of all Prisma schema features, including field types, attributes, and functions.

Prisma Migrate also supports mapping each field to a [specific native type](#mapping-fields-to-a-specific-native-type), and there are ways to [include features without a Prisma schema equivalent in your database](#handling-unsupported-database-features).

> [!NOTE]
> Comments and Prisma ORM-level functions (`uuid()` and `cuid()`) do not map to database features.

Mapping fields to a specific native type [#mapping-fields-to-a-specific-native-type]

Each Prisma ORM type maps to a default underlying database type - for example, the PostgreSQL connector maps `String` to `text` by default. [Native database type attributes](/orm/prisma-schema/data-model/models#native-types-mapping) determines which *specific* native type should be created in the database.

> [!NOTE]
> Some Prisma ORM types only map to a single native type.

In the following example, the `name` and `title` fields have a `@db.VarChar(X)` type attribute:

```prisma title="schema.prisma" highlight=8,14;normal
datasource db {
  provider = "postgresql"
}

model User {
  id    Int    @id @default(autoincrement())
  name  String @db.VarChar(200)
  posts Post[]
}

model Post {
  id        Int     @id @default(autoincrement())
  title     String  @db.VarChar(150)
  published Boolean @default(true)
  authorId  Int
  author    User    @relation(fields: [authorId], references: [id])
}
```

Prisma Migrate uses the specified types when it creates a migration:

```sql title="migration.sql" highlight=4,10;normal
  -- CreateTable
CREATE TABLE "User" (
    "id" SERIAL,
    "name" VARCHAR(200) NOT NULL,
    PRIMARY KEY ("id")
);
  -- CreateTable
CREATE TABLE "Post" (
    "id" SERIAL,
    "title" VARCHAR(150) NOT NULL,
    "published" BOOLEAN NOT NULL DEFAULT true,
    "authorId" INTEGER NOT NULL,
    PRIMARY KEY ("id")
);

  -- AddForeignKey
ALTER TABLE "Post" ADD FOREIGN KEY("authorId") REFERENCES "User"("id") ON DELETE CASCADE ON UPDATE CASCADE;
```

Mappings by Prisma ORM type [#mappings-by-prisma-orm-type]

For type mappings organized by Prisma ORM type, refer to the [Prisma schema reference](/orm/reference/prisma-schema-reference#model-field-scalar-types) documentation.

Mappings by database provider [#mappings-by-database-provider]

For type mappings organized by database provider, see:

* [PostgreSQL mappings](/orm/core-concepts/supported-databases/postgresql#prisma-to-postgresql)
* [MySQL mappings](/orm/core-concepts/supported-databases/mysql#type-mapping-between-mysql-and-prisma-schema)
* [Microsoft SQL Server mappings](/orm/core-concepts/supported-databases/sql-server#type-mappings)
* [SQLite mappings](/orm/core-concepts/supported-databases/sqlite#type-mappings)

Handling unsupported database features [#handling-unsupported-database-features]

Prisma Migrate cannot automatically create database features that have no equivalent in Prisma Schema Language (PSL). For example, there is currently no way to define a stored procedure or a trigger in PSL. However, there are ways to add unsupported features to your database with Prisma Migrate:

* [Handle unsupported field types](/orm/prisma-schema/data-model/unsupported-database-features#unsupported-field-types) (like `circle`)
* [Handle unsupported features](/orm/prisma-schema/data-model/unsupported-database-features#unsupported-database-features), like stored procedures
* [How to use native database functions](/orm/prisma-schema/data-model/unsupported-database-features#native-database-functions)

## Related pages

- [`Baselining a database`](https://www.prisma.io/docs/orm/prisma-migrate/workflows/baselining): How to initialize a migration history for an existing database that contains important data.
- [`Customizing migrations`](https://www.prisma.io/docs/orm/prisma-migrate/workflows/customizing-migrations): How to edit a migration file before applying it to avoid data loss in production.
- [`Development and production`](https://www.prisma.io/docs/orm/prisma-migrate/workflows/development-and-production): How to use Prisma Migrate commands in development and production environments
- [`Generating down migrations`](https://www.prisma.io/docs/orm/prisma-migrate/workflows/generating-down-migrations): How to generate a down migration SQL file that reverses a given migration file
- [`Native database functions`](https://www.prisma.io/docs/orm/prisma-migrate/workflows/native-database-functions): How to enable PostgreSQL native database functions for projects that use Prisma Migrate.