# پایگاه داده — تسک ۰۴: ماژول بلاگ ## ساختار واقعی از DB backup جدول `blog` در Drupal base fields را دارد + ۳ custom field: ## جدول: blogs _(entity_type=blog — از DB backup تأیید شده)_ | ستون | نوع | نام Drupal | توضیح | |------|-----|-----------|-------| | id | INT UNSIGNED AUTO_INCREMENT PK | id | | | uuid | CHAR(36) UNIQUE NOT NULL | uuid | | | user_id | INT FK → users.id NOT NULL | uid | نویسنده | | title | VARCHAR(255) NULL | label | عنوان (base field Drupal) | | slug | VARCHAR(300) UNIQUE NOT NULL | — | اضافه‌شده در Symfony (در Drupal نیست!) | | body | LONGTEXT NULL | description__value | محتوا (HTML) | | status | TINYINT(1) DEFAULT 0 | status | منتشرشده/پیش‌نویس | | is_top | TINYINT(1) DEFAULT 0 | field_top | نمایش در صفحه اول | | image_id | INT FK → files.id NULL | field_image | تصویر شاخص (entity ref → file) | | created_at | INT NOT NULL | created | Unix timestamp | | updated_at | INT NOT NULL | changed | Unix timestamp | ## جدول: blog_tags (ManyToMany) | ستون | نوع | نام Drupal | توضیح | |------|-----|-----------|-------| | blog_id | INT FK → blogs.id CASCADE | | | | category_id | INT FK → categories.id CASCADE | field_tag | تگ/دسته‌بندی (entity ref → category/tag bundle) | ## نمونه داده واقعی از DB backup ``` id=14, label='روش های خانگی محافظت از پوست در تابستان', uid=22, status=1 id=15, 16, ... (22 مطلب) field_image: target_id=97 (file entity) ``` ## ایندکس‌ها ```sql CREATE INDEX idx_blogs_status ON blogs(status); CREATE INDEX idx_blogs_user ON blogs(user_id); CREATE INDEX idx_blogs_created ON blogs(created_at DESC); CREATE INDEX idx_blogs_top ON blogs(is_top); CREATE UNIQUE INDEX idx_blogs_slug ON blogs(slug); ``` ## نکات مهم - `slug` در Drupal وجود ندارد — در Symfony باید auto-generate شود از `title` - `image` در Drupal یک entity reference به file/media است — در Symfony مسیر فایل ذخیره می‌شود - `body` در Drupal با نام `description__value` ذخیره می‌شود (base field) - `status=1` = منتشرشده، `status=0` = پیش‌نویس