# 命名规范（精简版）

> 适用入口：`database-main`

## 表命名

- 实体表：名词复数（`users` / `departments`）
- 关联表：`表名_表名`（`user_roles`）
- 历史表：`表名_history`

## 字段命名

- 主键：`id`
- 外键：`表名_id`
- 布尔：`is_xxx` / `has_xxx`
- 时间：`xxx_at` / `xxx_date`

## 统一风格

- 全小写 + 下划线
- 禁止驼峰与大写

## 新建业务表强制字段（DataScope 对齐）

所有新建业务表必须包含：

| Prisma 字段 | DB 列 | 说明 |
|---|---|---|
| `id` | `id` | UUID 主键 |
| `createdAt` | `created_at` | TIMESTAMPTZ(3) |
| `updatedAt` | `updated_at` | TIMESTAMPTZ(3) |
| `createdById` | `created_by_id` | UUID，DataScope SELF 依据 |
| `organizationId` | `organization_id` | UUID，DataScope ORGANIZATION 依据，**单租户也建**；全局表允许 null |

按业务需要加 `departmentId` / `regionId`（对应 DataScope DEPARTMENT / REGION）。

**禁止同义词**：不得用 `creatorId` / `authorId` / `ownerId` / `submittedBy` / `userId` 代替 `createdById`；不得用 `orgId` / `tenantId` 代替 `organizationId`。

**索引**：为启用的 DataScope 字段加 `@@index`。

**存量表不强制改造**：用 `@DataScope({ fields: {...} })` 映射到现有列，仅在业务必须按部门/组织隔离且无法反推时才加列+回填。

> 详见 `docs/standards/04-database-architecture.md` 「标准字段」 与 `docs/standards/09-iam-security.md` Layer 4。
