Skip to content

视图访问

视图是数据库中的预定义查询,对外表现为一张虚拟表。数据墙DBW 支持将视图作为实体公开,通过 REST 和 GraphQL 访问。视图的配置方式与表几乎相同,关键区别在于必须手动指定主键。

数据库支持

数据库视图支持
SQL Server支持
PostgreSQL支持
MySQL支持

配置视图

视图的配置有两点与表不同:source.type 设为 "view",且必须在 fields 中通过 primary-key: true 标记主键字段:

json
{
  "BookDetail": {
    "source": {
      "type": "view",
      "object": "dbo.vw_books_details"
    },
    "fields": [
      { "name": "id", "primary-key": true },
      { "name": "title" },
      { "name": "author_name" }
    ],
    "permissions": [
      { "role": "anonymous", "actions": ["read"] }
    ]
  }
}

CLI 添加视图

bash
dab add BookDetail \
  --source "dbo.vw_books_details" \
  --source.type "view" \
  --fields.name "id" \
  --fields.primary-key "true" \
  --permissions "anonymous:read"

REST 访问

视图实体的 REST 端点与表实体完全相同:

bash
# 列表查询
curl http://localhost:5000/api/BookDetail

# 按主键查询
curl http://localhost:5000/api/BookDetail/id/42

# 筛选 + 排序 + 字段选择
curl "http://localhost:5000/api/BookDetail?\$filter=year%20ge%202000&\$orderby=title%20asc&\$select=id,title,authorName"

# 分页
curl "http://localhost:5000/api/BookDetail?\$first=20"

GraphQL 访问

视图在 GraphQL 架构中显示为独立的类型,用法与表查询一致:

graphql
{
  bookDetails {
    items {
      id
      title
      authorName
      year
    }
  }
}

按主键查询:

graphql
{
  bookDetail_by_pk(id: 42) {
    title
    authorName
  }
}

筛选和排序:

graphql
{
  bookDetails(
    filter: { year: { gte: 2000 } }
    orderBy: { title: ASC }
    first: 20
  ) {
    items { id title authorName year }
  }
}

主键的重要性

视图没有物理主键。如果没有在 fields 中指定 primary-key: true

  • REST 按主键查询(GET /api/View/id/1)会返回 400 错误。
  • GraphQL view_by_pk 查询会返回错误。

必须从视图的字段中选择一到多个能唯一标识每行的列作为主键。

可更新视图

如果数据库中的视图是可更新的(通常基于单表、没有聚合的简单视图),可以授予写权限:

json
{
  "BookSimple": {
    "source": {
      "type": "view",
      "object": "dbo.vw_books_simple"
    },
    "permissions": [
      {
        "role": "editor",
        "actions": ["read", "create", "update"]
      }
    ]
  }
}

可更新视图支持 POST(创建)、PUT/PATCH(更新)和 DELETE(删除),前提是底层数据库允许这些操作。

权限建议

视图类型推荐权限
只读视图(聚合、多表 JOIN)"actions": ["read"]
可更新视图(单表简单视图)按需求添加 createupdatedelete

只读视图配置 create/update/delete 权限不会报错,但操作执行时会被数据库拒绝。

限制

限制说明
必须指定主键引擎无法自动推断视图的主键
不支持关系视图实体不能配置 relationships
数据库依赖可更新性取决于底层数据库对视图的更新支持

除此之外,视图实体支持分页、筛选、排序、字段选择和缓存,与表实体的能力一致。

下一步

数据墙DBW 产品文档与开发指南。