# پایگاه داده — تسک ۱۰: مدیریت پرسنل (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; ```