# Database and Data Lifecycle

```mermaid
erDiagram
 administrators ||--o{ admin_bot_access : accesses
 bots ||--o{ admin_bot_access : allows
 bots ||--o{ bot_users : contains
 bots ||--o{ workflows : owns
 workflows ||--o{ workflow_versions : publishes
 workflow_versions ||--o{ workflow_sessions : pins
 bot_users ||--o{ workflow_sessions : participates
 bots ||--o{ inbound_updates : receives
 bots ||--o{ outbound_jobs : sends
 bots ||--o{ messages : logs
 bot_users ||--o{ form_submissions : completes
 workflow_versions ||--o{ form_submissions : generates
 administrators ||--o{ audit_logs : creates
```

- `(bot_id, update_id)` یکتای دیتابیس برای idempotency ورودی است.
- `outbound_jobs(bot_id,dedupe_key)` از ساخت کار تکراری ناشی از اجرای دوباره رویداد جلوگیری می‌کند.
- `workflow_sessions(bot_id,chat_id)` نشانه ادامه گفتگوی جاری و `workflow_version_id` نسخه ثابت آن است.
- `bot_users(bot_id,bale_user_id)` از اختلاط کاربر میان ربات‌ها جلوگیری می‌کند.
- `draft_json` قابل ویرایش و `workflow_versions.graph_json` تغییرناپذیر است.
- `fields_json` برای فیلدهای متغیر پویا؛ هنگام ارتقا به جست‌وجوی گسترده می‌توان index/typed table ساخت.
- زمان‌ها در DB با UTC (DATETIME) نگهداری می‌شوند؛ تبدیل تاریخ شمسی در رابط این نسخه اجرا نشده است.

## Migration

اسکریپت `bin/install.php` تنها نصب اولیه است. نسخه‌های آینده باید Migration افزایشی با جدول `schema_migrations` و بکاپ قبل از اجرا داشته باشند. هرگز با `DROP TABLE` روی دیتابیس عملیاتی طرح را ارتقا ندهید.
