Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Параметры конфигурации для сущностей базы данных.
Health
| Property | Description |
|---|---|
entities.entity-name.health.enabled |
Включает проверки работоспособности сущности (как конечные точки REST, так и GraphQL) |
entities.entity-name.health.first |
Количество строк, возвращаемых в запросе проверки работоспособности (диапазон: 1–500) |
entities.entity-name.health.threshold-ms |
Максимальная длительность в миллисекундах для запроса проверки работоспособности (min: One) |
Description
| Property | Description |
|---|---|
entities.entity-name.description |
Читаемое человеком описание сущности |
Fields
| Property | Description |
|---|---|
entities.entity-name.fields[].name |
Имя поля базы данных (обязательно) |
entities.entity-name.fields[].alias |
Имя, предоставляемое API (заменяет сопоставления) |
entities.entity-name.fields[].description |
Описание поля, доступного для чтения человеком |
entities.entity-name.fields[].primary-key |
Помечает поле как первичный ключ (заменяет поля ключей) |
Source
| Property | Description |
|---|---|
entities.entity-name.source.type |
Тип объекта: table, viewили stored-procedure |
entities.entity-name.source.object |
Имя объекта базы данных |
entities.entity-name.source.object-description |
Описание объекта базы данных, доступного для чтения человеком |
entities.entity-name.source.parameters |
Параметры хранимых процедур или функций |
entities.entity-name.source.key-fields |
|
entities.entity-name.mappings |
|
REST
| Property | Description |
|---|---|
entities.entity-name.rest.enabled |
Включает REST для этой сущности |
entities.entity-name.rest.path |
Пользовательский маршрут для конечной точки REST |
entities.entity-name.rest.methods |
Разрешенные методы REST: get, post, putpatchdelete |
GraphQL
| Property | Description |
|---|---|
entities.entity-name.graphql.type |
Имя типа или объект с singular и plural |
entities.entity-name.graphql.operation |
Тип операции: query или mutation |
entities.entity-name.graphql.enabled |
Включает GraphQL для этой сущности |
Permissions
| Property | Description |
|---|---|
entities.entity-name.permissions[].role |
Строка имени роли |
entities.entity-name.permissions[].actions |
Одно или несколько: create, read, updatedeleteexecute |
Relationships
| Property | Description |
|---|---|
entities.entity-name.relationships.relationship-name.cardinality |
one или many |
entities.entity-name.relationships.relationship-name.target.entity |
Имя целевой сущности |
entities.entity-name.relationships.relationship-name.source.fields |
Поля из этой сущности, используемой в связи |
entities.entity-name.relationships.relationship-name.target.fields |
Поля из целевой сущности |
entities.entity-name.relationships.relationship-name.linking.object |
Объект join, используемый для связей "многие ко многим" |
entities.entity-name.relationships.relationship-name.linking.source.fields |
Поля из исходной сущности, используемой в соединении |
entities.entity-name.relationships.relationship-name.linking.target.fields |
Поля из целевой сущности, используемой в соединении |
Cache
| Property | Description |
|---|---|
entities.entity-name.cache.enabled |
Включает кэширование ответов для сущности |
entities.entity-name.cache.ttl-seconds |
Время в кэше в секундах |
entities.entity-name.cache.level |
Уровень кэша: L1 (только в памяти) или L1L2 (в памяти + распределено) |
MCP
| Property | Description |
|---|---|
entities.entity-name.mcp |
Объект, который управляет участием протокола контекста модели (MCP) для сущности |
entities.entity-name.mcp.dml-tools |
Включает или отключает средства языка обработки данных (DML) для сущности |
entities.entity-name.mcp.custom-tool |
Регистрирует хранимую процедуру как именованное средство MCP (только сущности хранимой процедуры) |
Обзор формата
{
"entities": {
"{entity-name}": {
"description": <string>,
"rest": {
"enabled": <boolean> // default: true
"path": <string> // default: "{entity-name}"
"methods": ["GET", "POST"] // default: ["GET", "POST"]
},
"graphql": {
"enabled": <boolean> // default: true
"type": {
"singular": <string>,
"plural": <string>
},
"operation": "query" | "mutation" // default: "query"
},
"source": {
"object": <string>,
"object-description": <string>,
"type": "view" | "stored-procedure" | "table",
"key-fields": [<string>], // DEPRECATED: use fields[].primary-key
"parameters": [ // array format (preferred)
{
"name": "<parameter-name>",
"required": <boolean>,
"default": <value>,
"description": "<string>"
}
]
},
"fields": [
{
"name": "<database-field-name>",
"alias": "<api-exposed-name>",
"description": "<string>",
"primary-key": <boolean>
}
],
"mappings": { // DEPRECATED: use fields[].alias
"<database-field-name>": <string>
},
"relationships": {
"<relationship-name>": {
"cardinality": "one" | "many",
"target.entity": <string>,
"source.fields": [<string>],
"target.fields": [<string>],
"linking.object": <string>,
"linking.source.fields": [<string>],
"linking.target.fields": [<string>]
}
},
"permissions": [
{
"role": "anonymous" | "authenticated" | <custom-role>,
"actions": ["create", "read", "update", "delete", "execute", "*"],
"fields": {
"include": [<string>],
"exclude": [<string>]
},
"policy": {
"database": <string>
}
}
],
"cache": {
"enabled": <boolean>,
"ttl-seconds": <integer>,
"level": "L1" | "L1L2" // default: "L1L2"
},
"mcp": {
"dml-tools": <boolean>, // default: true
"custom-tool": <boolean> // stored-procedure only; default: false
}
}
}
}
Источник (сущности с именем сущности)
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
entities.{entity-name} |
source |
object | ✔️ Да | None |
Сведения об источнике базы данных сущности.
Вложенные свойства
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
entities.{entity-name}.source |
object |
string | ✔️ Да | None |
entities.{entity-name}.source |
object-description |
string | ❌ Нет | None |
entities.{entity-name}.source |
type |
перечисление (table, , viewstored-procedure) |
✔️ Да | None |
entities.{entity-name}.source |
key-fields |
массив строк | ❌ Нет* | None |
entities.{entity-name}.source |
parameters |
массив или объект | ❌ Нет** | None |
*
key-fieldsтребуется только в том случае, type если viewfields массив не используется. Значение представляет первичные ключи.
Предупреждение
Свойство key-fields устарело в DAB 2.0.
fields Вместо этого используйте массивprimary-key: true. Схема применяет это fields и key-fields не может сосуществовать с одной сущностью.
**
parameters требуется только в том случае, если type для параметров используется stored-procedure только значения по умолчанию. Тип данных параметра выводится. Параметры без значения по умолчанию могут быть опущены.
object-description — необязательное описание объекта базы данных, доступного для чтения человеком. Это значение отображается во время обнаружения инструментов MCP, помогая агентам ИИ понять назначение сущности.
Tip
Если объект принадлежит схеме dbo, указание схемы является необязательным. Кроме того, квадратные скобки вокруг имен объектов (например, dbo.Users vs. [dbo].[Users]) можно использовать при необходимости.
Format
{
"entities": {
"{entity-name}": {
"source": {
"object": <string>,
"object-description": <string>,
"type": <"view" | "stored-procedure" | "table">,
"key-fields": [ <string> ], // DEPRECATED: use fields[].primary-key
"parameters": [ // array format (preferred)
{
"name": "<parameter-name>",
"required": <boolean>,
"default": <value>,
"description": "<string>"
}
]
}
}
}
}
Формат массива параметров
В предварительной версии parameters DAB 2.0 поддерживает структурированный формат массива с большими метаданными. Каждый параметр является объектом со следующими свойствами:
| Property | Type | Required | Description |
|---|---|---|---|
name |
string | ✔️ Да | Имя параметра (без @ префикса) |
required |
boolean | ❌ Нет | Является ли параметр обязательным (true) или необязательным () (false) |
default |
any | ❌ Нет | Значение по умолчанию, используемое, если параметр не указан |
description |
string | ❌ Нет | Удобочитаемое пользователем описание параметра |
Пример (формат массива— предпочтительный)
{
"entities": {
"GetBookById": {
"source": {
"type": "stored-procedure",
"object": "dbo.get_book_by_id",
"parameters": [
{
"name": "id",
"required": true,
"default": null,
"description": "The unique identifier of the book"
}
]
}
}
}
}
Предупреждение
Формат parameters словаря (например, { "id": 0 }не рекомендуется) в DAB 2.0. Используйте предыдущий формат массива. Старый формат по-прежнему принимается для обратной совместимости, но будет удален в будущем выпуске.
Note
Функции построителя данных 2.0, описанные в этом разделе, находятся в предварительной версии и могут измениться до общедоступной доступности. Дополнительные сведения см. в статье "Новые возможности" версии 2.0.
Разрешения (сущности с именем сущности)
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
entities.permissions |
role |
string | ✔️ Да | None |
Указывает имя роли, к которому применяются разрешения. Используйте системные роли (Anonymous, или пользовательские роли, Authenticatedопределенные в поставщике удостоверений).
Tip
Подробные сведения об оценке ролей, системных ролях и заголовке см. в обзореX-MS-API-ROLE авторизации.
Format
{
"entities": {
"{entity-name}": {
"permissions": [
{
"role": <"Anonymous" | "Authenticated" | "custom-role">,
"actions": [ <string> ]
}
]
}
}
}
Example
{
"entities": {
"User": {
"permissions": [
{
"role": "reader",
"actions": ["read"]
}
]
}
}
}
Наследование ролей
DAB 2.0 представляет наследование ролей для разрешений сущностей. Если роль не настроена явно для сущности, она наследует разрешения от более широкой роли, используя следующую цепочку:
named-role → authenticated → anonymous
- Если
authenticatedсущность не настроена, она наследуется отanonymous. - Если именованной роли не настроена, она наследуется от
authenticatedили отanonymousauthenticatedотсутствия.
Это означает, что вы можете определить разрешения один раз и anonymous каждая более широкая роль автоматически получает одинаковый доступ без дублирования.
Note
Функции построителя данных 2.0, описанные в этом разделе, находятся в предварительной версии и могут измениться до общедоступной доступности. Дополнительные сведения см. в статье "Новые возможности" версии 2.0.
Example
{
"entities": {
"Book": {
"source": "dbo.books",
"permissions": [
{ "role": "anonymous", "actions": [ "read" ] }
]
}
}
}
С помощью этой конфигурации anonymous, и authenticatedлюбой ненастройной именованной роли можно считать Bookвсе. Используется dab configure --show-effective-permissions для просмотра разрешенных разрешений для каждой сущности после применения наследования.
Действия (сущности entity-name в строковом массиве разрешений)
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
entities.permissions |
actions |
oneOf [string, array] | ✔️ Да | None |
Строковый массив, содержащий сведения о том, какие операции разрешены для связанной роли.
| Action | Операция SQL |
|---|---|
* |
Все действия |
create |
Вставка одной или нескольких строк* |
read |
Выберите одну или несколько строк |
update |
Изменение одной или нескольких строк* |
delete |
Удаление одной или нескольких строк* |
execute |
Запускает хранимую процедуру |
* В настоящее время в GraphQL поддерживаются несколько операций.
Note
Для хранимых процедур действие подстановочного знака (*) расширяется только на действие execute. Для таблиц и представлений он расширяется до create, read, updateи delete.
Format
{
"entities": {
"{entity-name}": {
"permissions": [
{
"actions": [ <string> ]
}
]
}
}
}
Example
{
"entities": {
"{entity-name}": {
"permissions": [
{
"actions": [ "*" ] // equivalent to create, read, update, delete
}
]
}
}
}
Альтернативный формат (только строка, если type=stored-procedure)
{
"entities": {
"{entity-name}": {
"permissions": [
{
"actions": <string>
}
]
}
}
}
Example
{
"entities": {
"{entity-name}": {
"permissions": [
{
"actions": "*" // equivalent to execute
}
]
}
}
}
Действия (сущности entity-name для разрешения массива объектов)
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
entities.{entity-name}.permissions |
actions |
массив строк | ✔️ Да | None |
Массив объектов, содержащий сведения о том, какие операции разрешены для связанной роли.
Note
Для хранимых процедур действие подстановочного знака (*) расширяется только до execute. Для таблиц и представлений он расширяется до create, read, updateи delete.
Вложенные свойства
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
entities.{entity-name}.permissions.actions[] |
action |
string | ✔️ Да | None |
entities.{entity-name}.permissions.actions[] |
fields |
object | ❌ Нет | None |
entities.{entity-name}.permissions.actions[] |
policy |
object | ❌ Нет | None |
entities.{entity-name}.permissions.actions[].policy |
database |
string | ✔️ Да | None |
Format
{
"entities": {
"{entity-name}": {
"permissions": [
{
"role": <string>,
"actions": [
{
"action": <string>,
"fields": <array of strings>,
"policy": <object>
}
]
}
]
}
}
Example
При этом предоставляется readauditor разрешение на User сущность с ограничениями полей и политик.
{
"entities": {
"User": {
"permissions": [
{
"role": "auditor",
"actions": [
{
"action": "read",
"fields": {
"include": ["*"],
"exclude": ["last_login"]
},
"policy": {
"database": "@item.IsAdmin eq false"
}
}
]
}
]
}
}
}
Заметки о политике
Политики баз данных фильтруют результаты запросов с помощью предикатов в стиле OData. Используется @item.<field> для ссылки на поля сущности и @claims.<type> внедрения утверждений пользователей, прошедших проверку подлинности.
| Аспект | Сведения |
|---|---|
| Синтаксис | Предикаты OData (eq, , neand, or, gt) lt |
| Справочник полей |
@item.<field> (при необходимости используйте сопоставленное имя) |
| Справочник по утверждению | @claims.<claimType> |
| Поддерживаемые действия |
read
update
delete
|
| Не поддерживается |
create, execute |
Tip
Подробные рекомендации по политикам базы данных, включая подстановку утверждений и устранение неполадок, см. в разделе "Настройка политик базы данных".
Тип (сущности-имя сущности GraphQL)
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
entities.{entity-name}.graphql |
type |
object | ❌ Нет | {entity-name} |
Задает соглашение об именовании сущности в схеме GraphQL.
Format
{
"entities": {
"{entity-name}": {
"graphql": {
"type": {
"singular": "<string>",
"plural": "<string>"
}
}
}
}
}
Вложенные свойства
| Parent | Property | Required | Type | Default |
|---|---|---|---|---|
entities.{entity-name}.graphql.type |
singular |
✔️ Да* | string | None |
entities.{entity-name}.graphql.type |
plural |
❌ Нет | string | N/A (по умолчанию используется единственное значение) |
*
singular требуется при type указании в качестве объекта. Если type это обычная строка, эта строка используется в качестве единственного имени.
Example
Configuration
{
"entities": {
"User": {
"graphql": {
"type": {
"singular": "User",
"plural": "Users"
}
}
}
}
}
Запрос GraphQL
{
Users {
items {
id
name
age
isAdmin
}
}
}
Ответ GraphQL
{
"data": {
"Users": {
"items": [
{
"id": 1,
"name": "Alice",
"age": 30,
"isAdmin": true
},
{
"id": 2,
"name": "Bob",
"age": 25,
"isAdmin": false
}
// ...
]
}
}
}
Операция (сущности-имена сущностей GraphQL)
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
entities.{entity-name}.graphql |
operation |
строка перечисления | ❌ Нет | mutation |
Указывает, отображается ли stored-procedure операция под Query или Mutation.
Note
Если {entity-name}.type задано значение stored-procedure, создается автоматически новый тип executeXXX GraphQL. Это operation свойство управляет размещением этого типа в схеме GraphQL. Нет функционального влияния, просто гигиена схемы.
Format
{
"entities": {
"{entity-name}": {
"graphql": {
"operation": "query" | "mutation"
}
}
}
}
Пример: операция
Если operation задано значение query
type Query {
executeGetUserDetails(userId: Int!): GetUserDetailsResponse
}
Если operation задано значение mutation
type Mutation {
executeGetUserDetails(userId: Int!): GetUserDetailsResponse
}
Включено (сущности с именем сущности GraphQL)
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
entities.{entity-name}.graphql |
enabled |
boolean | ❌ Нет | True |
Позволяет разработчикам выборочно включать сущности в схему GraphQL.
Format
{
"entities": {
"{entity-name}": {
"graphql": {
"enabled": <true> (default) | <false>
}
}
}
}
REST (сущности с именем сущностей)
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
entities.{entity-name}.rest |
enabled |
boolean | ❌ Нет | True |
entities.rest |
path |
string | ❌ Нет | /{entity-name} |
entities.{entity-name}.rest |
methods |
массив строк | ❌ Нет* | POST |
* Свойство methods предназначено только для stored-procedure конечных точек.
Note
Функции построителя данных 2.0, описанные в этом разделе, находятся в предварительной версии и могут измениться до общедоступной доступности. Дополнительные сведения см. в статье "Новые возможности" версии 2.0.
Format
{
"entities": {
"{entity-name}": {
"rest": {
"enabled": <true> (default) | <false>,
"path": <string; default: "{entity-name}">
}
}
}
}
Описание (сущности с именем сущности)
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
entities.{entity-name} |
description |
string | ❌ Нет | None |
Необязательное описание сущности, доступной для чтения человеком. Это значение отображается в созданной документации ПО API и в качестве комментария в схеме GraphQL.
Note
Функции построителя данных 2.0, описанные в этом разделе, находятся в предварительной версии и могут измениться до общедоступной доступности. Дополнительные сведения см. в статье "Новые возможности" версии 2.0.
Format
{
"entities": {
"{entity-name}": {
"description": "<string>"
}
}
}
Example
{
"entities": {
"Book": {
"description": "Represents a book in the catalog with title, author, and pricing information.",
"source": {
"object": "dbo.books",
"type": "table"
}
}
}
}
Поля (сущности с именем сущности)
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
entities.{entity-name} |
fields |
массив | ❌ Нет | None |
Определяет метаданные для отдельных полей базы данных, включая псевдонимы, описания и обозначения первичного ключа. Массив fields заменяет как mappings свойство, так alias и source.key-fields (через primary-key свойство) в одной единой единой структуре.
Note
Функции построителя данных 2.0, описанные в этом разделе, находятся в предварительной версии и могут измениться до общедоступной доступности. Дополнительные сведения см. в статье "Новые возможности" версии 2.0.
Вложенные свойства
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
entities.{entity-name}.fields[] |
name |
string | ✔️ Да | None |
entities.{entity-name}.fields[] |
alias |
string | ❌ Нет | None |
entities.{entity-name}.fields[] |
description |
string | ❌ Нет | None |
entities.{entity-name}.fields[] |
primary-key |
boolean | ❌ Нет | false |
Format
{
"entities": {
"{entity-name}": {
"fields": [
{
"name": "<database-field-name>",
"alias": "<api-exposed-name>",
"description": "<string>",
"primary-key": <boolean>
}
]
}
}
}
Example
{
"entities": {
"Book": {
"source": {
"object": "dbo.books",
"type": "table"
},
"fields": [
{
"name": "id",
"description": "Unique book identifier",
"primary-key": true
},
{
"name": "sku_title",
"alias": "title",
"description": "The display title of the book"
},
{
"name": "sku_status",
"alias": "status"
}
]
}
}
}
В этом примере id используется первичный ключ (замена необходимостиsource.key-fields), а sku_titlesku_status также псевдоним title как и status (замена необходимости).mappings
Important
Схема применяется, которая fields не может сосуществовать с mappings одной и той же сущностью.source.key-fields
fields Выполните миграцию и удалите устаревшие свойства.
Сопоставления (сущности с именем сущности)
Предупреждение
Свойство mappings устарело в DAB 2.0.
fields Вместо этого используйте массив со свойствомalias. Схема применяет это fields и mappings не может сосуществовать с одной сущностью.
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
entities.{entity-name} |
mappings |
object | ❌ Нет | None |
Включает настраиваемые псевдонимы или предоставленные имена для полей объекта базы данных.
Important
Для сущностей с поддержкой GraphQL настроенное имя должно соответствовать требованиям к имени GraphQL.
Format
{
"entities": {
"{entity-name}": {
"mappings": {
"<field-1-name>": "<field-1-alias>",
"<field-2-name>": "<field-2-alias>",
"<field-3-name>": "<field-3-alias>"
}
}
}
}
Examples
Таблица базы данных
CREATE TABLE Books
(
id INT,
sku_title VARCHAR(50),
sku_status VARCHAR(50),
)
Configuration
{
"entities": {
"Books": {
...
"mappings": {
"sku_title": "title",
"sku_status": "status"
}
}
}
}
Кэш (сущности с именем сущностей)
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
entities.{entity-name} |
cache |
object | ❌ Нет | None |
Включает и настраивает кэширование для сущности.
Вложенные свойства
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
entities.{entity-name}.cache |
enabled |
boolean | ❌ Нет | False |
entities.{entity-name}.cache |
ttl-seconds |
integer | ❌ Нет | - |
entities.{entity-name}.cache |
level |
перечисление (L1 | L1L2) |
❌ Нет | L1L2 |
Format
{
"entities": {
"{entity-name}": {
"cache": {
"enabled": <true> (default) | <false>,
"ttl-seconds": <integer; default: 5>,
"level": <"L1" | "L1L2"> (default: "L1L2")
}
}
}
}
Свойство level определяет, какие уровни кэша используются:
| Ценность | Description |
|---|---|
L1 |
Только кэш в памяти. Самый быстрый, но не общий доступ между экземплярами. |
L1L2 |
Кэш в памяти и распределенный (Redis) кэш. Общий доступ между масштабируемыми экземплярами. По умолчанию. |
Note
Функции построителя данных 2.0, описанные в этом разделе, находятся в предварительной версии и могут измениться до общедоступной доступности. Дополнительные сведения см. в статье "Новые возможности" версии 2.0.
Note
Если он не указан, ttl-seconds наследует глобальный набор значений в разделе runtime.cache.
Example
{
"entities": {
"Author": {
"cache": {
"enabled": true,
"ttl-seconds": 30,
"level": "L1"
}
}
}
}
Связи (сущности с именем сущности)
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
entities.{entity-name} |
relationships |
object | ❌ Нет | None |
Настраивает, как сущности GraphQL связаны с другими предоставляемыми сущностями. Дополнительные сведения см. в разделе связи построителя данных.
Note
Свойство relationship-name для каждой связи должно быть уникальным для всех связей для этой сущности.
Вложенные свойства
Эти свойства используются в разных сочетаниях в зависимости от кратности связей.
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
entities.{entity-name}.relationships |
cardinality |
string | ✔️ Да | None |
entities.{entity-name}.relationships |
target.entity |
string | ✔️ Да | None |
entities.{entity-name}.relationships |
target.fields |
массив строк | ❌ Нет | None |
entities.{entity-name}.relationships |
source.fields |
массив строк | ❌ Нет | None |
entities.{entity-name}.relationships |
linking.object |
string | ❌ Нет | None |
entities.{entity-name}.relationships |
linking.source.fields |
массив строк | ❌ Нет | None |
entities.{entity-name}.relationships |
linking.target.fields |
массив строк | ❌ Нет | None |
Format
{
"entities": {
"{entity-name}": {
"relationships": {
"<relationship-name>": {
"cardinality": "one" | "many",
"target.entity": "<string>",
"source.fields": ["<string>"],
"target.fields": ["<string>"],
"linking.object": "<string>",
"linking.source.fields": ["<string>"],
"linking.target.fields": ["<string>"]
}
}
}
}
}
| Relationship | Cardinality | Example |
|---|---|---|
| one-to-many | many |
Одна сущность категории может относиться ко многим сущностям todo |
| many-to-one | one |
Многие сущности todo могут относиться к одной сущности категории |
| many-to-many | many |
Одна сущность todo может относиться ко многим пользовательским сущностям, и одна сущность пользователя может относиться ко многим сущностям todo |
Пример: кратность "один к одному"
Каждая Profile связана с одной User, и каждая User имеет ровно одну связанную Profile.
{
"entities": {
"User": {
"relationships": {
"user_profile": {
"cardinality": "one",
"target.entity": "Profile",
"source.fields": [ "id" ],
"target.fields": [ "user_id" ]
}
}
},
"Profile": {
...
}
}
}
Схема GraphQL
type User
{
id: Int!
...
profile: Profile
}
Command-line
dab update User \
--relationship profile \
--target.entity Profile \
--cardinality one \
--relationship.fields "id:user_id"
Пример: кратность "один ко многим"
Может Category иметь одну или несколько связанных Book сущностей, в то время как каждая из них Book может иметь одну связанную Category.
{
"entities": {
"Book": {
...
},
"Category": {
"relationships": {
"category_books": {
"cardinality": "many",
"target.entity": "Book",
"source.fields": [ "id" ],
"target.fields": [ "category_id" ]
}
}
}
}
}
Схема GraphQL
type Category
{
id: Int!
...
books: [BookConnection]!
}
Командная строка
dab update Category \
--relationship category_books \
--target.entity Book \
--cardinality many \
--relationship.fields "id:category_id"
Пример: кратность "многие ко одному"
Многие Book сущности могут иметь одну связанную Category, в то время как Category может иметь одну или несколько связанных Book записей.
{
"entities": {
"Book": {
"relationships": {
"books_category": {
"cardinality": "one",
"target.entity": "Category",
"source.fields": [ "category_id" ],
"target.fields": [ "id" ]
}
},
"Category": {
...
}
}
}
}
Схема GraphQL
type Book
{
id: Int!
...
category: Category
}
Командная строка
dab update Book \
--relationship books_category \
--target.entity "Category" \
--cardinality one \
--relationship.fields "category_id:id"
Пример: кратность "многие ко многим"
Многие Book сущности могут иметь множество связанных Author сущностей, в то время как многие Author сущности могут иметь множество связанных Book записей.
Note
Эта связь возможна с третьей таблицей, dbo.books_authorsкоторую мы называем объектом связывания.
{
"entities": {
"Book": {
"relationships": {
...,
"books_authors": {
"cardinality": "many",
"target.entity": "Author",
"source.fields": [ "id" ],
"target.fields": [ "id" ],
"linking.object": "dbo.books_authors",
"linking.source.fields": [ "book_id" ],
"linking.target.fields": [ "author_id" ]
}
},
"Category": {
...
},
"Author": {
...
}
}
}
}
Схема GraphQL
type Book
{
id: Int!
...
authors: [AuthorConnection]!
}
type Author
{
id: Int!
...
books: [BookConnection]!
}
Командная строка
dab update Book \
--relationship books_authors \
--target.entity "Author" \
--cardinality many \
--relationship.fields "id:id" \
--linking.object "dbo.books_authors" \
--linking.source.fields "book_id" \
--linking.target.fields "author_id"
Работоспособности (сущности с именем сущностей)
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
entities.{entity-name} |
health |
object | ❌ Нет | None |
Включает и настраивает проверки работоспособности сущности.
Вложенные свойства
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
entities.{entity-name}.health |
enabled |
boolean | ❌ Нет | true |
entities.{entity-name}.health |
first |
integer | ❌ Нет | 100 |
entities.{entity-name}.health |
threshold-ms |
integer | ❌ Нет | 1000 |
Example
{
"entities": {
"Book": {
"health": {
"enabled": true,
"first": 3,
"threshold-ms": 500
}
}
}
}
Note
Значение first должно быть меньше или равно параметру runtime.pagination.max-page-size . Меньшие значения помогают быстрее выполнять проверки работоспособности.
Important
Хранимые процедуры автоматически исключаются из проверок работоспособности сущностей, так как они требуют параметров и не могут быть детерминированными.
MCP (сущности с именем сущности)
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
entities.{entity-name} |
mcp |
object | ❌ Нет | включен по умолчанию при опущении |
Управляет участием MCP для сущности. Если MCP включен глобально, сущности участвуют по умолчанию. Используйте это свойство, чтобы отказаться от использования или включения пользовательских средств MCP для сущностей хранимой процедуры.
Note
Функции построителя данных 2.0, описанные в этом разделе, находятся в предварительной версии и могут измениться до общедоступной доступности. Дополнительные сведения см. в статье "Новые возможности" версии 2.0.
Формат объекта
Используйте формат объекта для детализированного элемента управления:
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
entities.{entity-name}.mcp |
dml-tools |
boolean | ❌ Нет | true |
entities.{entity-name}.mcp |
custom-tool |
boolean | ❌ Нет | false |
{
"entities": {
"Book": {
"mcp": {
"dml-tools": true
}
}
}
}
Пользовательское средство (только хранимые процедуры)
Для сущностей хранимой процедуры установите custom-tooltrue для регистрации процедуры в качестве именованного инструмента MCP:
{
"entities": {
"GetBookById": {
"source": {
"type": "stored-procedure",
"object": "dbo.get_book_by_id"
},
"mcp": {
"custom-tool": true
},
"permissions": [
{
"role": "anonymous",
"actions": ["execute"]
}
]
}
}
}
Important
Свойство custom-tool допустимо только для сущностей хранимой процедуры. Задание в таблице или представлении сущности приводит к ошибке конфигурации.
Примеры интерфейса командной строки
dab add Book --source books --permissions "anonymous:*" --mcp.dml-tools true
dab add GetBookById --source dbo.get_book_by_id --source.type stored-procedure --permissions "anonymous:execute" --mcp.custom-tool true