Files
clinicpro/docs/phase2_taskes/task-13-clinic-services/database.md
T

2.6 KiB

پایگاه داده — تسک ۱۳: سرویس‌های کلینیک

جدول: service_sections

ستون نوع توضیح
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
name VARCHAR(200) NOT NULL نام بخش
active TINYINT(1) NOT NULL DEFAULT 1
created_at INT NOT NULL Unix timestamp
updated_at INT NOT NULL Unix timestamp

ایندکس:

INDEX idx_service_sections_entity ON service_sections(entity_type, entity_id)

جدول: service_items

ستون نوع توضیح
id INT UNSIGNED AUTO_INCREMENT PK
uuid CHAR(36) UNIQUE NOT NULL
section_id INT NOT NULL FK→service_sections.id ON DELETE CASCADE
staff_id INT NULL FK→clinic_staff.id ON DELETE SET NULL پرسنل انجام‌دهنده (اختیاری)
name VARCHAR(200) NOT NULL نام سرویس
price_rials INT NOT NULL DEFAULT 0
active TINYINT(1) NOT NULL DEFAULT 1
created_at INT NOT NULL
updated_at INT NOT NULL

Migration نمونه

CREATE TABLE service_sections (
    id          INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    uuid        CHAR(36) NOT NULL UNIQUE,
    entity_type VARCHAR(10) NOT NULL,
    entity_id   INT NOT NULL,
    name        VARCHAR(200) NOT NULL,
    active      TINYINT(1) NOT NULL DEFAULT 1,
    created_at  INT NOT NULL,
    updated_at  INT NOT NULL,
    INDEX idx_service_sections_entity (entity_type, entity_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE service_items (
    id         INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    uuid       CHAR(36) NOT NULL UNIQUE,
    section_id INT NOT NULL,
    staff_id   INT NULL,
    name       VARCHAR(200) NOT NULL,
    price_rials INT NOT NULL DEFAULT 0,
    active     TINYINT(1) NOT NULL DEFAULT 1,
    created_at INT NOT NULL,
    updated_at INT NOT NULL,
    FOREIGN KEY (section_id) REFERENCES service_sections(id) ON DELETE CASCADE,
    FOREIGN KEY (staff_id)   REFERENCES clinic_staff(id) ON DELETE SET NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

نکات مهم

  • section_id ON DELETE CASCADE — حذف بخش، همه زیربخش‌ها را هم حذف می‌کند
  • staff_id ON DELETE SET NULL — غیرفعال‌سازی پرسنل، سرویس را حذف نمی‌کند فقط staff_id=NULL می‌شود
  • session_services.service_item_id در تسک ۱۵ با ON DELETE RESTRICT → اگر item در سشنی باشد، حذف block می‌شود