Files
clinicpro/docs/phase2_taskes/task-10-staff/database.md
T

2.0 KiB

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

ایندکس‌ها

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 نمونه

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;