# پایگاه داده — تسک ۱۰: مدیریت پرسنل (Staff)

## جدول: clinic_staff

| ستون | نوع | توضیح |
|------|-----|-------|
| id | INT UNSIGNED AUTO_INCREMENT PK | |
| uuid | CHAR(36) UNIQUE NOT NULL | |
| entity_type | VARCHAR(10) NOT NULL | `'doctor'` یا `'clinic'` |
| entity_id | INT NOT NULL | FK به doctors.id یا clinics.id (bسته به entity_type) |
| full_name | VARCHAR(200) NOT NULL | نام و نام‌خانوادگی — اجباری |
| phone | VARCHAR(20) NULL | |
| job_title | VARCHAR(100) NULL | عنوان شغل |
| address | TEXT NULL | |
| national_code | CHAR(10) NULL | |
| active | TINYINT(1) NOT NULL DEFAULT 1 | غیرفعال = soft delete |
| created_at | INT NOT NULL | Unix timestamp |
| updated_at | INT NOT NULL | Unix timestamp |

## ایندکس‌ها

```sql
CREATE INDEX idx_clinic_staff_entity
  ON clinic_staff(entity_type, entity_id, active);
```

## نکات مهم

- **هیچ FK خارجی** برای entity_id تعریف نمی‌شود — چون entity_type polymorphic است و می‌تواند doctor یا clinic باشد. مسئولیت یکپارچگی با لایه application است.
- `active = 0` به معنای حذف منطقی است — ردیف هرگز از جدول پاک نمی‌شود
- وقتی staff غیرفعال می‌شود، service_items و session_services قبلی دست‌نخورده می‌مانند

## Migration نمونه

```sql
CREATE TABLE clinic_staff (
    id          INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    uuid        CHAR(36) NOT NULL UNIQUE,
    entity_type VARCHAR(10) NOT NULL,
    entity_id   INT NOT NULL,
    full_name   VARCHAR(200) NOT NULL,
    phone       VARCHAR(20) NULL,
    job_title   VARCHAR(100) NULL,
    address     TEXT NULL,
    national_code CHAR(10) NULL,
    active      TINYINT(1) NOT NULL DEFAULT 1,
    created_at  INT NOT NULL,
    updated_at  INT NOT NULL,
    INDEX idx_clinic_staff_entity (entity_type, entity_id, active)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
```
