## [ERR-20260425-009] IAM schema 表名 / 列名命名约定不一致

**日期**: 2026-04-25
**类别**: Database / Prisma 命名映射

### 问题
查 IAM 表时连续两次报错：
- `relation "platform_iam.user_roles" does not exist` → 实际表名是 `user_role_rel`
- `column ur.userId does not exist` → 实际列名是 `user_id`

### 根本原因
`platform_iam` schema 下：
- 关联表统一用 `_rel` 后缀（`user_role_rel`、`role_permission_rel`、`role_data_scope_rel`、`workflow_role_user_rel`、`ai_tool_grants_user`），不是 `_roles` / `_permissions`。
- 列名是 **snake_case**（`user_id`、`role_id`、`created_at`），不是 Prisma 模型里的 camelCase（`userId`）。

Prisma 模型用 `@@map("user_role_rel")` 和 `@map("user_id")` 把 camelCase 映射到 snake_case，所以代码里写 camelCase 没问题，但**手工跑 SQL 必须用 snake_case + 实际表名**。

### 排查/解决
- 先 `\dt platform_iam.*` 列出所有表
- 再 `\d platform_iam.<table>` 看真实列名
- 不要凭 Prisma model 名直接拼 SQL

### 预防
- 写裸 SQL 之前先 `\d` 一次目标表
- 或用 Prisma Client / `prisma studio` 替代裸 SQL

---
