# پایگاه داده — تسک ۱۳: سرویس‌های کلینیک ## جدول: 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 | ایندکس: ```sql 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 نمونه ```sql 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 می‌شود