# pb_tbl_attachments

> 来源：线上 PocketBase collection 回读、`script/pocketbase.documents.js`
> 类型：`base`
> 读写规则：公开可读；原生写权限与 hooks 管理权限仅管理员 / 管理角色允许

## 表用途

统一存储项目中的真实上传文件。业务表只保存 `attachments_id`，文件本体仅保存在本表 `attachments_link` 中。

## 字段清单

| 字段名 | 类型 | 必填 | 说明 |
| :--- | :--- | :---: | :--- |
| `id` | `text` | 是 | PocketBase 记录主键 |
| `attachments_id` | `text` | 是 | 附件业务 ID |
| `attachments_link` | `file` | 否 | 文件本体，数据库限制已放宽到约 4GB |
| `attachments_filename` | `text` | 否 | 原始文件名 |
| `attachments_filetype` | `text` | 否 | 文件类型 / MIME |
| `attachments_size` | `number` | 否 | 文件大小 |
| `attachments_owner` | `text` | 否 | 上传者业务标识 |
| `attachments_md5` | `text` | 否 | 文件 MD5 |
| `attachments_ocr` | `text` | 否 | OCR 识别结果 |
| `attachments_status` | `text` | 否 | 附件状态 |
| `attachments_remark` | `text` | 否 | 备注 |
| `is_delete` | `number` | 否 | 软删除标记，`0` 表示未删除，`1` 表示已删除，默认 `0` |

## 索引

| 索引名 | 类型 | 说明 |
| :--- | :--- | :--- |
| `idx_tbl_attachments_attachments_id` | `UNIQUE INDEX` | 保证 `attachments_id` 唯一 |
| `idx_tbl_attachments_attachments_owner` | `INDEX` | 加速按上传者查询 |
| `idx_tbl_attachments_attachments_status` | `INDEX` | 加速按附件状态查询 |

## 补充约定

- 图片、视频、普通文件都统一走本表。
- `is_delete` 用于软删除控制，附件删除时建议先标记为 `1`，并由后续归档/清理任务处理物理文件。
- 集合默认查询规则已内置 `is_delete = 0`，附件列表/详情默认不返回已软删除数据。
- 业务访问控制不放在本表，而由引用它的业务表与 hooks 接口控制。
- PocketBase 系统字段 `created`、`updated` 仍然存在，只是不在 collection 字段清单里单独声明。
