# 短语词典 (Dictionary)

词典是与团队达成共识的基础知识库：**某词代表什么**（语义/定义层面），不是物理形式。短语定了，字段命名、外键命名就都有依据——全项目只说同一种话。

- 是基础知识库，很少变更。
- **能引用就引用**：魔法字符串只在首次出现时使用，之后一律引用词典条目。

## 规范位置：schema/_dictionary.ts

**所有短语统一定义在 `schema/_dictionary.ts`**，一个文件一处定义；`*.table.ts` 从该文件 import 短语，禁止在表文件里内联定义短语。

## 两种短语，两种命名规则

短语分两类，参与不同的字段命名校验：

| 类型 | 定义函数 | 含义 | 命名规则 | 例子 |
|---|---|---|---|---|
| `entity` | `defineEntityPhrase` | 实体缩写 | 字段名**首段**（实体领先） | `mer_id`、`bd_rate` |
| `business` | `defineBusinessPhrase` | 实体的属性 | 字段名**末段**（属性收尾） | `bd_rate`、`acquiring_rate` |

## 口径：name 即短语

两个定义函数返回的条目**就是短语本身**，不是"全名 + 缩写"两套——`name` 即短语词干（列名前缀），`label`/`description` 解释语义。**变量名与 name 一致**（小写）。短语要短（mer / bd / amt 三字母左右），**不要用长语**：引用商户实体的字段叫 `mer_id`，不叫 `merchant_id`。

## 定义

```ts
// schema/_dictionary.ts
import { defineEntityPhrase, defineBusinessPhrase } from '@pylonts/dsl';

const bd  = defineEntityPhrase({ name: 'bd',  label: 'BD推广员', description: '线下拓展商户、辅助入驻的推广人员' });
const mer = defineEntityPhrase({ name: 'mer', label: '商户', description: '入驻平台的商户' });
const amt = defineBusinessPhrase({ name: 'amt', label: '金额', description: '交易金额，单位分' });
const rate = defineBusinessPhrase({ name: 'rate', label: '费率', description: '结算费率' });
```

## 使用

- **表链接实体**：`TableSchema.phrase` 引用**实体短语**条目，声明本表归属哪个实体（见 [table.md](./table.md) 的外键检查链）。关联表等多实体场景不需要。
- 业务短语供字段命名/文档使用，跨团队对齐。
- 未收录短语的实体保留全名作词干（不臆造缩写），评审时再裁决收录。
- 字段命名校验按类型区分：实体短语必须首段、业务短语必须末段（见 [field-check.md](../../lint/docs/field-check.md)）。
