diff --git a/content/200-orm/100-prisma-schema/20-data-model/40-views.mdx b/content/200-orm/100-prisma-schema/20-data-model/40-views.mdx
index c99befd7b4..45d502555a 100644
--- a/content/200-orm/100-prisma-schema/20-data-model/40-views.mdx
+++ b/content/200-orm/100-prisma-schema/20-data-model/40-views.mdx
@@ -12,17 +12,16 @@ Database views allow you to name and store queries. In relational databases, vie
The `views` preview feature allows you to represent views in your Prisma schema with the `view` keyword. To use views in Prisma ORM, follow these steps:
-- [Enable the `views` preview feature](#enable-the-views-preview-feature)
-- [Create a view in the underlying database](#create-a-view-in-the-underlying-database), either directly or as a [manual addition to a Prisma Migrate migration file](#use-views-with-prisma-migrate-and-db-push), or use an existing view
-- [Represent the view in your Prisma schema](#add-views-to-your-prisma-schema)
-- [Query the view in Prisma Client](#query-views-in-prisma-client)
+1. [Enable the `views` preview feature](#enable-the-views-preview-feature)
+1. [Create a view in the underlying database](#create-a-view-in-the-underlying-database), either directly or as a [manual addition to a Prisma Migrate migration file](#use-views-with-prisma-migrate-and-db-push), or use an existing view
+1. [Represent the view in your Prisma schema](#add-views-to-your-prisma-schema)
+1. [Query the view in Prisma Client](#query-views-in-prisma-client)
:::warning
Support for views is currently a [Preview](/orm/more/releases#preview) feature. You can add a view to your Prisma schema with the `view` keyword or introspect the views in your database schema with `db pull`. You cannot yet apply views in your schema to your database with Prisma Migrate and `db push` unless the changes are added manually to your migration file using the `--create-only` flag.
For updates on progress with this feature, follow [our GitHub issue](https://github.com/prisma/prisma/issues/17335).
-
:::
## Enable the `views` preview feature
@@ -37,11 +36,11 @@ generator client {
}
```
-Please leave feedback about this preview feature in our dedicated [preview feature feedback issue for `views`](https://github.com/prisma/prisma/issues/17335).
+Please leave feedback about this preview feature in our dedicated preview feature [feedback issue](https://github.com/prisma/prisma/issues/17335) for `views`.
## Create a view in the underlying database
-Currently, you cannot apply views that you define in your Prisma schema to your database with Prisma Migrate and `db push`. Instead, you must first create the view in the underlying database, either manually or [as part of a migration](#use-views-with-prisma-migrate-and-db-push).
+Currently, you cannot apply views that you define in your Prisma schema to your database with Prisma Migrate or `db push`. Instead, you must first create the view in the underlying database, either manually or [as part of a migration](#use-views-with-prisma-migrate-and-db-push).
For example, take the following Prisma schema with a `User` model and a related `Profile` model:
@@ -223,9 +222,10 @@ Each _field_ of a `view` block represents a column in the query results of the v
### Use introspection
-
- Currently only available for PostgreSQL, MySQL, SQL Server and CockroachDB.
-
+:::warning
+Currently views can only be introspected with PostgreSQL, MySQL, SQL Server and CockroachDB databases. If you are using another database provider, your views must be added manually.
+:::
+
If you have an existing view or views defined in your database, [introspection](/orm/prisma-schema/introspection) will automatically generate `view` blocks in your Prisma schema that represent those views.
@@ -247,9 +247,7 @@ view UserInfo {
```
:::warning
-
Please note for now `db pull` will only introspect views in your schema when using PostgreSQL, MySQL, SQL Server or CockroachDB. Support for this workflow will be extended to other database providers.
-
:::
#### The `views` directory
@@ -271,14 +269,6 @@ FROM
);
```
-### Limitations
-
-#### Introspection
-
-Currently, introspection of views is only available for PostgreSQL, MySQL, SQL Server and CockroachDB. If you are using another database provider, your views must be added manually.
-
-This is a temporary limitation and support for introspection will be extended to the other supported datasource providers.
-
## Query views in Prisma Client
You can query views in Prisma Client in the same way that you query models. For example, the following query finds all users with a `name` of `'Alice'` in the `UserInfo` view defined above.
@@ -293,7 +283,7 @@ const userinfo = await prisma.userInfo.findMany({
:::note
-`findUnique`, cursor-based pagination, and writes (create/update/delete) are not supported on `views`.
+Write queries (create/update/delete) are not supported on `views`.
:::
@@ -320,24 +310,26 @@ Currently, Prisma ORM does not support materialized views. However, when you [ma
In the future Prisma Client might support marking individual views as materialized and add a Prisma Client method to refresh the materialized view. Please comment on our [`views` feedback issue](https://github.com/prisma/prisma/issues/17335) with your use case.
-Here's a **revised `## Restrictions` section** with **clarity on *why*** these limitations exist:
-
## Restrictions
-Prisma ORM treats all `view` blocks as **read-only representations of database queries** rather than true tables. Because of this, several restrictions apply to ensure Prisma Client remains consistent with the behavior of the underlying database:
+Prisma ORM treats all `view` blocks as _read-only_ representations of database queries rather than true tables. Because of this, several restrictions apply to ensure Prisma Client remains consistent with the behavior of the underlying database:
+
+### No identifiers
+
+Views are virtual tables and do not have inherent primary keys. Hence, you cannot define `@id`, `@@id` attributes on a `view` block.
+
+### No indexes
-### No identifiers or constraints
+Because views are virtual tables, they cannot have indexes. Therefore, `@index` and `@@index` cannot be defined on `view` blocks.
-Views are virtual tables and do not have inherent primary keys or unique constraints. Adding artificial constraints would create invalid assumptions for Prisma Client and break queries like `findUnique`. Hence, you cannot define `@id`, `@unique`, `@@id`, `@@unique`, or `@index` attributes on a `view` block.
+### Unsafe `@unique` attributes
-### No relationships
+While Prisma ORM lets you place `@unique` and `@@unique` attributes on views, the underlying database and Prisma do not enforce those constraints. Multiple rows can therefore share the same value for a supposedly unique field.
-Relationships in Prisma rely on foreign keys and referential integrity, which views do not enforce. Defining relationships on a view could mislead developers into thinking data integrity is guaranteed. Hence, the `@relation` attributes are not supported for views.
+Neither the database nor Prisma ORM enforce the unique constraint expressed by that attribute.
-### Limited Prisma Client API
+The purpose of the `@unique` attribute in this case is only to enable relationships across views as well as `findUnique` queries and cursor-based pagination in Prisma Client.
-Views do not store data themselves, so writes and operations requiring unique identifiers cannot be supported. Also:
+### Disabled write queries
-- Only `findMany` (with filters, ordering, and skip/take pagination) is available.
-- `findUnique`, cursor-based pagination, and aggregate queries that depend on unique identifiers are **not supported**.
-- All write operations (`create`, `update`, `delete`, `upsert`) are disabled and not generated in the Prisma Client.
\ No newline at end of file
+All write operations (`create`, `update`, `delete`, `upsert`) are disabled and not generated in the Prisma Client.
\ No newline at end of file