🗄️ نموذج قاعدة البيانات المتكاملة لمنصة SaaS
يحتوي هذا النموذج على 22 جدولاً رئيسياً، موزعة على سبع مجموعات وظيفية، مع تحديد المفاتيح الأساسية والأجنبية، وأنواع العلاقات (1:N, M:N).
1. 📂 جدول المستخدمين والمصادقة (Users & Auth)
1.1 users
سجل لجميع المستخدمين على المنصة.
| العمود | النوع | القيد | الوصف |
|---|---|---|---|
user_id | UUID | PRIMARY KEY | المعرف الفريد للمستخدم |
tenant_id | UUID | FOREIGN KEY (tenant_id) | المستأجر (العميل) الذي ينتمي إليه المستخدم |
email | VARCHAR(255) | UNIQUE, NOT NULL | البريد الإلكتروني للمستخدم (يستخدم لتسجيل الدخول) |
password_hash | VARCHAR(255) | NOT NULL | كلمة المرور مشفرة (bcrypt/Argon2) |
full_name | VARCHAR(255) | NOT NULL | الاسم الكامل للمستخدم |
phone_number | VARCHAR(20) | – | رقم الهاتف |
avatar_url | TEXT | – | رابط الصورة الشخصية |
status | VARCHAR(20) | NOT NULL, DEFAULT 'active' | حالة الحساب (active, suspended, pending_verification) |
last_login_at | TIMESTAMP | – | تاريخ ووقت آخر دخول |
created_at | TIMESTAMP | NOT NULL, DEFAULT CURRENT_TIMESTAMP | تاريخ إنشاء الحساب |
updated_at | TIMESTAMP | NOT NULL, DEFAULT CURRENT_TIMESTAMP | تاريخ آخر تحديث |
deleted_at | TIMESTAMP | – | تاريخ الحذف الناعم (soft delete) |
العلاقات:
users(N) — (1)tenants
1.2 user_roles
جدول وسيط لتعيين الأدوار للمستخدمين (علاقة N:M).
| العمود | النوع | القيد | الوصف |
|---|---|---|---|
user_role_id | UUID | PRIMARY KEY | المعرف الفريد |
user_id | UUID | FOREIGN KEY (user_id) | معرف المستخدم |
role_id | UUID | FOREIGN KEY (role_id) | معرف الدور (من جدول roles) |
assigned_at | TIMESTAMP | NOT NULL, DEFAULT CURRENT_TIMESTAMP | تاريخ التعيين |
assigned_by | UUID | FOREIGN KEY (assigned_by) | معرف المستخدم الذي قام بالتعيين |
العلاقات:
user_roles(N) — (1)usersuser_roles(N) — (1)roles
1.3 user_sessions
تخزين جلسات المستخدمين النشطة (لإدارة الجلسات و logouts).
| العمود | النوع | القيد | الوصف |
|---|---|---|---|
session_id | UUID | PRIMARY KEY | المعرف الفريد للجلسة |
user_id | UUID | FOREIGN KEY (user_id) | صاحب الجلسة |
jwt_token | TEXT | NOT NULL | رمز JWT الصادر |
ip_address | INET | – | عنوان IP للمستخدم |
user_agent | TEXT | – | متصفح/جهاز المستخدم |
expires_at | TIMESTAMP | NOT NULL | وقت انتهاء صلاحية الجلسة |
created_at | TIMESTAMP | NOT NULL, DEFAULT CURRENT_TIMESTAMP | تاريخ البدء |
العلاقات:
user_sessions(N) — (1)users
1.4 api_keys
تخزين مفاتيح API للمطورين والأتمتة.
| العمود | النوع | القيد | الوصف |
|---|---|---|---|
api_key_id | UUID | PRIMARY KEY | المعرف الفريد |
user_id | UUID | FOREIGN KEY (user_id) | المالك |
key_hash | VARCHAR(255) | UNIQUE, NOT NULL | المفتاح مشفر (لا يُخزن كنص عادي) |
name | VARCHAR(100) | NOT NULL | اسم المفتاح (مثل “مفتاح التكامل مع X”) |
permissions | JSONB | – | صلاحيات محددة للمفتاح (أو NULL للإرث من المستخدم) |
last_used_at | TIMESTAMP | – | تاريخ آخر استخدام |
expires_at | TIMESTAMP | – | تاريخ انتهاء صلاحية المفتاح |
created_at | TIMESTAMP | NOT NULL, DEFAULT CURRENT_TIMESTAMP | تاريخ الإنشاء |
العلاقات:
api_keys(N) — (1)users
1.5 roles
تعريف الأدوار (RBAC).
| العمود | النوع | القيد | الوصف |
|---|---|---|---|
role_id | UUID | PRIMARY KEY | المعرف الفريد للدور |
tenant_id | UUID | FOREIGN KEY (tenant_id) | المستأجر الذي يملك الدور (أو NULL للأدوار العالمية) |
name | VARCHAR(100) | NOT NULL | اسم الدور (مثل “مدير”، “مستخدم”) |
description | TEXT | – | وصف للدور |
العلاقات:
roles(N) — (1)tenantsroles(1) — (N)user_roles
1.6 permissions
قائمة الصلاحيات المتاحة.
| العمود | النوع | القيد | الوصف |
|---|---|---|---|
permission_id | UUID | PRIMARY KEY | المعرف الفريد |
name | VARCHAR(100) | UNIQUE, NOT NULL | اسم الصلاحية (مثل “read_users”, “delete_tenants”) |
resource | VARCHAR(100) | NOT NULL | المورد المرتبط (مثل “users”, “tenants”) |
action | VARCHAR(50) | NOT NULL | العملية (مثل “create”, “read”, “update”, “delete”) |
description | TEXT | – | وصف للصلاحية |
العلاقات:
permissions(N) — (M)roles(من خلال جدولrole_permissions)
1.7 role_permissions
جدول وسيط يربط الأدوار بالصلاحيات (M:N).
| العمود | النوع | القيد | الوصف |
|---|---|---|---|
role_permission_id | UUID | PRIMARY KEY | المعرف الفريد |
role_id | UUID | FOREIGN KEY (role_id) | معرف الدور |
permission_id | UUID | FOREIGN KEY (permission_id) | معرف الصلاحية |
العلاقات:
role_permissions(N) — (1)rolesrole_permissions(N) — (1)permissions
2. 👥 جدول المستأجرين والشركات (Tenants & Companies)
2.1 tenants
سجل للمؤسسات/العملاء المشتركين في المنصة.
| العمود | النوع | القيد | الوصف |
|---|---|---|---|
tenant_id | UUID | PRIMARY KEY | المعرف الفريد للمستأجر |
name | VARCHAR(255) | NOT NULL | اسم المؤسسة |
subdomain | VARCHAR(100) | UNIQUE, NOT NULL | النطاق الفرعي (مثل company.platform.com) |
legal_business_name | VARCHAR(255) | – | الاسم القانوني للشركة |
tax_number | VARCHAR(100) | – | الرقم الضريبي/السجل التجاري |
industry | VARCHAR(100) | – | مجال النشاط (مثل “تكنولوجيا”، “تجارة”) |
status | VARCHAR(20) | NOT NULL, DEFAULT 'active' | حالة المستأجر (active, suspended, trial) |
settings | JSONB | – | الإعدادات الخاصة بالمستأجر (لغة، علامة تجارية، الخ) |
created_at | TIMESTAMP | NOT NULL, DEFAULT CURRENT_TIMESTAMP | تاريخ الإنشاء |
updated_at | TIMESTAMP | NOT NULL, DEFAULT CURRENT_TIMESTAMP | تاريخ آخر تحديث |
deleted_at | TIMESTAMP | – | تاريخ الحذف الناعم |
3. 💳 جدول الاشتراكات والمدفوعات (Subscriptions & Payments)
3.1 plans
تعريف خطط الاشتراك.
| العمود | النوع | القيد | الوصف |
|---|---|---|---|
plan_id | UUID | PRIMARY KEY | المعرف الفريد للخطة |
name | VARCHAR(100) | NOT NULL | اسم الخطة (مثل “الخطة الأساسية”) |
description | TEXT | – | وصف الخطة |
stripe_price_id | VARCHAR(100) | UNIQUE, NOT NULL | معرف السعر في Stripe (لمزامنة الدفع) |
amount | DECIMAL(10,2) | NOT NULL | السعر بالعملة الأساسية |
currency | CHAR(3) | NOT NULL, DEFAULT 'USD' | العملة (USD, EUR, الخ) |
billing_interval | VARCHAR(20) | NOT NULL | دورة الفوترة (monthly, yearly) |
features | JSONB | – | قائمة الميزات المضمنة في الخطة |
is_active | BOOLEAN | NOT NULL, DEFAULT true | هل الخطة متاحة للاشتراك؟ |
3.2 subscriptions
سجل اشتراكات المستأجرين النشطة والسابقة.
| العمود | النوع | القيد | الوصف |
|---|---|---|---|
subscription_id | UUID | PRIMARY KEY | المعرف الفريد |
tenant_id | UUID | FOREIGN KEY (tenant_id) | المستأجر المشترك |
plan_id | UUID | FOREIGN KEY (plan_id) | الخطة المشترك بها |
stripe_subscription_id | VARCHAR(100) | UNIQUE | معرف الاشتراك في Stripe |
status | VARCHAR(20) | NOT NULL | حالة الاشتراك (active, past_due, canceled, unpaid) |
start_date | TIMESTAMP | NOT NULL | تاريخ بدء الاشتراك |
end_date | TIMESTAMP | – | تاريخ انتهاء الاشتراك (للاشتراكات المؤقتة) |
cancel_at_period_end | BOOLEAN | NOT NULL, DEFAULT false | هل سيتم الإلغاء في نهاية الفترة؟ |
created_at | TIMESTAMP | NOT NULL, DEFAULT CURRENT_TIMESTAMP | تاريخ الإنشاء |
updated_at | TIMESTAMP | NOT NULL, DEFAULT CURRENT_TIMESTAMP | تاريخ آخر تحديث |
العلاقات:
subscriptions(N) — (1)tenantssubscriptions(N) — (1)plans
3.3 invoices
سجل الفواتير الصادرة.
| العمود | النوع | القيد | الوصف |
|---|---|---|---|
invoice_id | UUID | PRIMARY KEY | المعرف الفريد |
tenant_id | UUID | FOREIGN KEY (tenant_id) | المستأجر المُفوتر |
subscription_id | UUID | FOREIGN KEY (subscription_id) | الاشتراك المرتبط بالفاتورة |
stripe_invoice_id | VARCHAR(100) | UNIQUE | معرف الفاتورة في Stripe |
amount | DECIMAL(10,2) | NOT NULL | المبلغ الإجمالي |
currency | CHAR(3) | NOT NULL, DEFAULT 'USD' | العملة |
status | VARCHAR(20) | NOT NULL | حالة الفاتورة (paid, open, void, uncollectible) |
invoice_pdf_url | TEXT | – | رابط ملف PDF للفاتورة |
due_date | TIMESTAMP | NOT NULL | تاريخ الاستحقاق |
created_at | TIMESTAMP | NOT NULL, DEFAULT CURRENT_TIMESTAMP | تاريخ الإنشاء |
العلاقات:
invoices(N) — (1)tenantsinvoices(N) — (1)subscriptions
3.4 payments
سجل عمليات الدفع الفردية.
| العمود | النوع | القيد | الوصف |
|---|---|---|---|
payment_id | UUID | PRIMARY KEY | المعرف الفريد |
invoice_id | UUID | FOREIGN KEY (invoice_id) | الفاتورة المرتبطة بالدفع |
stripe_payment_intent_id | VARCHAR(100) | UNIQUE | معرف نية الدفع في Stripe |
amount | DECIMAL(10,2) | NOT NULL | المبلغ المدفوع |
currency | CHAR(3) | NOT NULL, DEFAULT 'USD' | العملة |
payment_method | VARCHAR(50) | NOT NULL | طريقة الدفع (card, bank_transfer, crypto) |
status | VARCHAR(20) | NOT NULL | حالة الدفع (succeeded, failed, pending) |
failure_message | TEXT | – | رسالة الخطأ في حالة الفشل |
paid_at | TIMESTAMP | NOT NULL | تاريخ الدفع |
العلاقات:
payments(N) — (1)invoices
4. 📨 جدول الإشعارات والاتصالات (Notifications & Messages)
4.1 notification_templates
قوالب الإشعارات (للبريد الإلكتروني، SMS، الإشعارات داخل التطبيق).
| العمود | النوع | القيد | الوصف |
|---|---|---|---|
template_id | UUID | PRIMARY KEY | المعرف الفريد |
name | VARCHAR(100) | UNIQUE, NOT NULL | اسم القالب (مثل “welcome_email”) |
type | VARCHAR(20) | NOT NULL | نوع القالب (email, sms, push) |
subject | VARCHAR(255) | – | موضوع البريد الإلكتروني |
body_text | TEXT | – | محتوى النص (أو HTML) مع متغيرات (مثل {{user_name}}) |
body_html | TEXT | – | نسخة HTML من البريد |
variables | JSONB | – | قائمة المتغيرات المستخدمة في القالب |
4.2 notifications
سجل الإشعارات المرسلة.
| العمود | النوع | القيد | الوصف |
|---|---|---|---|
notification_id | UUID | PRIMARY KEY | المعرف الفريد |
user_id | UUID | FOREIGN KEY (user_id) | المستخدم المستهدف |
template_id | UUID | FOREIGN KEY (template_id) | القالب المستخدم للإرسال |
channel | VARCHAR(20) | NOT NULL | قناة الإرسال (email, sms, in_app) |
status | VARCHAR(20) | NOT NULL | حالة الإرسال (sent, failed, pending) |
sent_at | TIMESTAMP | NOT NULL, DEFAULT CURRENT_TIMESTAMP | تاريخ الإرسال |
metadata | JSONB | – | بيانات وصفية إضافية (مثل محاولات إعادة المحاولة) |
العلاقات:
notifications(N) — (1)usersnotifications(N) — (1)notification_templates
5. 📊 جدول التحليلات والمراقبة (Analytics & Monitoring)
5.1 user_events
سجل أحداث المستخدمين لتحليل السلوك.
| العمود | النوع | القيد | الوصف |
|---|---|---|---|
event_id | UUID | PRIMARY KEY | المعرف الفريد |
user_id | UUID | FOREIGN KEY (user_id) | المستخدم الذي قام بالحدث |
tenant_id | UUID | FOREIGN KEY (tenant_id) | المستأجر المرتبط بالحدث |
event_type | VARCHAR(50) | NOT NULL | نوع الحدث (page_view, click, purchase, feature_use) |
page_url | TEXT | – | الصفحة التي تمت زيارتها |
feature_name | VARCHAR(100) | – | الميزة المستخدمة (إذا كان الحدث هو feature_use) |
metadata | JSONB | – | بيانات إضافية (مثل وقت البقاء على الصفحة، قيمة العنصر) |
created_at | TIMESTAMP | NOT NULL, DEFAULT CURRENT_TIMESTAMP | تاريخ ووقت الحدث |
العلاقات:
user_events(N) — (1)usersuser_events(N) — (1)tenants
5.2 system_metrics
تخزين مقاييس أداء النظام (CPU، الذاكرة، معدل الأخطاء).
| العمود | النوع | القيد | الوصف |
|---|---|---|---|
metric_id | UUID | PRIMARY KEY | المعرف الفريد |
metric_type | VARCHAR(50) | NOT NULL | نوع المقياس (cpu_usage, memory_usage, error_rate) |
value | DECIMAL(10,2) | NOT NULL | قيمة المقياس |
service_name | VARCHAR(50) | – | الخدمة التي يُقاس عليها المقياس (مثل “user-service”) |
recorded_at | TIMESTAMP | NOT NULL, DEFAULT CURRENT_TIMESTAMP | وقت القياس |
5.3 ab_tests
سجل تجارب A/B.
| العمود | النوع | القيد | الوصف |
|---|---|---|---|
test_id | UUID | PRIMARY KEY | المعرف الفريد |
name | VARCHAR(100) | NOT NULL | اسم التجربة |
hypothesis | TEXT | NOT NULL | الفرضية التي يتم اختبارها |
control_group | JSONB | – | وصف المجموعة الضابطة (النسخة الحالية) |
variant_group | JSONB | – | وصف المجموعة التجريبية (النسخة الجديدة) |
status | VARCHAR(20) | NOT NULL | حالة التجربة (draft, running, completed) |
start_date | TIMESTAMP | NOT NULL | تاريخ البدء |
end_date | TIMESTAMP | – | تاريخ الانتهاء |
results | JSONB | – | نتائج التجربة (الخيار الفائز، الدلالة الإحصائية) |
created_at | TIMESTAMP | NOT NULL, DEFAULT CURRENT_TIMESTAMP | تاريخ الإنشاء |
5.4 ab_test_assignments
تتبع أي مجموعة ينتمي إليها كل مستخدم في تجارب A/B.
| العمود | النوع | القيد | الوصف |
|---|---|---|---|
assignment_id | UUID | PRIMARY KEY | المعرف الفريد |
test_id | UUID | FOREIGN KEY (test_id) | معرف التجربة |
user_id | UUID | FOREIGN KEY (user_id) | معرف المستخدم |
group_assigned | VARCHAR(20) | NOT NULL | المجموعة المخصصة (control, variant_a, variant_b) |
assigned_at | TIMESTAMP | NOT NULL, DEFAULT CURRENT_TIMESTAMP | تاريخ التخصيص |
العلاقات:
ab_test_assignments(N) — (1)ab_testsab_test_assignments(N) — (1)users
6. 📨 جدول التكامل والأحداث (Integration & Events)
6.1 webhook_deliveries
سجل محاولات تسليم الـ Webhook للأنظمة الخارجية.
| العمود | النوع | القيد | الوصف |
|---|---|---|---|
delivery_id | UUID | PRIMARY KEY | المعرف الفريد |
tenant_id | UUID | FOREIGN KEY (tenant_id) | المستأجر المستهدف (أو NULL للـ Webhooks العامة) |
event_type | VARCHAR(50) | NOT NULL | نوع الحدث (payment.succeeded, user.created) |
payload | JSONB | NOT NULL | محتوى الحدث المرسل |
target_url | TEXT | NOT NULL | عنوان URL المستهدف |
status | VARCHAR(20) | NOT NULL | حالة التسليم (success, failed, retrying) |
attempt_count | INTEGER | NOT NULL, DEFAULT 1 | عدد محاولات الإرسال |
response_code | INTEGER | – | رمز الاستجابة من الطرف الآخر |
response_body | TEXT | – | نص الاستجابة |
created_at | TIMESTAMP | NOT NULL, DEFAULT CURRENT_TIMESTAMP | تاريخ الإنشاء |
updated_at | TIMESTAMP | NOT NULL, DEFAULT CURRENT_TIMESTAMP | تاريخ آخر تحديث |
العلاقات:
webhook_deliveries(N) — (1)tenants
6.2 scheduled_tasks
سجل المهام المجدولة (Cron jobs).
| العمود | النوع | القيد | الوصف |
|---|---|---|---|
task_id | UUID | PRIMARY KEY | المعرف الفريد |
task_name | VARCHAR(100) | UNIQUE, NOT NULL | اسم المهمة (مثل “check_expired_subscriptions”) |
cron_expression | VARCHAR(50) | NOT NULL | تعبير Cron لتحديد وقت التشغيل |
task_type | VARCHAR(50) | NOT NULL | نوع المهمة (daily, hourly, weekly, monthly) |
is_active | BOOLEAN | NOT NULL, DEFAULT true | هل المهمة مفعلة؟ |
last_run_at | TIMESTAMP | – | تاريخ آخر تشغيل |
next_run_at | TIMESTAMP | NOT NULL | تاريخ التشغيل القادم |
created_at | TIMESTAMP | NOT NULL, DEFAULT CURRENT_TIMESTAMP | تاريخ الإنشاء |
7. 🛠️ جداول العمليات والتطوير (Operations & Development)
7.1 features
سجل الميزات ودورة حياتها.
| العمود | النوع | القيد | الوصف |
|---|---|---|---|
feature_id | UUID | PRIMARY KEY | المعرف الفريد |
name | VARCHAR(100) | NOT NULL | اسم الميزة |
description | TEXT | – | وصف الميزة |
lifecycle_stage | VARCHAR(20) | NOT NULL | مرحلة دورة الحياة (planning, development, testing, production, deprecated) |
release_version | VARCHAR(20) | – | إصدار النظام الذي تمت فيه إضافة الميزة |
deprecated_at | TIMESTAMP | – | تاريخ إيقاف الميزة |
created_at | TIMESTAMP | NOT NULL, DEFAULT CURRENT_TIMESTAMP | تاريخ الإنشاء |
7.2 audit_logs
سجل تدقيق لجميع العمليات الهامة.
| العمود | النوع | القيد | الوصف |
|---|---|---|---|
log_id | UUID | PRIMARY KEY | المعرف الفريد |
user_id | UUID | FOREIGN KEY (user_id) | المستخدم الذي قام بالعملية |
tenant_id | UUID | FOREIGN KEY (tenant_id) | المستأجر المتأثر بالعملية |
action | VARCHAR(50) | NOT NULL | الإجراء المنفذ (user_deleted, tenant_updated, payment_processed) |
resource_type | VARCHAR(50) | NOT NULL | نوع المورد المتأثر (user, tenant, subscription) |
resource_id | UUID | NOT NULL | المعرف الفريد للمورد المتأثر |
old_values | JSONB | – | القيم القديمة (قبل التغيير) |
new_values | JSONB | – | القيم الجديدة (بعد التغيير) |
ip_address | INET | – | عنوان IP مصدر العملية |
created_at | TIMESTAMP | NOT NULL, DEFAULT CURRENT_TIMESTAMP | تاريخ العملية |
العلاقات:
audit_logs(N) — (1)usersaudit_logs(N) — (1)tenants
7.3 backups
سجل عمليات النسخ الاحتياطي واستعادتها.
| العمود | النوع | القيد | الوصف |
|---|---|---|---|
backup_id | UUID | PRIMARY KEY | المعرف الفريد |
backup_type | VARCHAR(20) | NOT NULL | نوع النسخة (full, incremental) |
storage_location | TEXT | NOT NULL | موقع تخزين النسخة (مثل S3 bucket) |
size_mb | INTEGER | – | حجم النسخة بالميغابايت |
status | VARCHAR(20) | NOT NULL | حالة النسخة (completed, failed, in_progress) |
triggered_by | VARCHAR(50) | NOT NULL | من قام بتشغيل النسخة (system, admin) |
started_at | TIMESTAMP | NOT NULL | تاريخ بدء النسخ |
completed_at | TIMESTAMP | – | تاريخ اكتمال النسخ |
restored_at | TIMESTAMP | – | تاريخ استخدام النسخة للاستعادة (إذا تم) |
7.4 geo_expansions
سجل التوسع الجغرافي للمنصة.
| العمود | النوع | القيد | الوصف |
|---|---|---|---|
expansion_id | UUID | PRIMARY KEY | المعرف الفريد |
country_code | CHAR(2) | UNIQUE, NOT NULL | رمز الدولة (مثل “SA”) |
currency | CHAR(3) | NOT NULL | العملة المحلية |
language_code | CHAR(2) | NOT NULL | اللغة المحلية (مثل “ar”) |
launch_status | VARCHAR(20) | NOT NULL | حالة الإطلاق (analysis, compliance, adaptation, beta, launched) |
compliance_requirements | JSONB | – | متطلبات الامتثال المحلية (GDPR, CCPA, الخ) |
payment_gateways | JSONB | – | قائمة بوابات الدفع المحلية المدعومة |
launched_at | TIMESTAMP | – | تاريخ الإطلاق الكامل |
📊 رسم تخطيطي للعلاقات الأساسية (ER Diagram)
يمكن تلخيص العلاقات الأساسية كالتالي:
هذا النموذج يغطي جميع المتطلبات الوظيفية المذكورة في الدليل، وهو:
- قابل للتوسع: يمكن إضافة جداول وعلاقات جديدة بسهولة.
- متوافق مع التطبيقات الحديثة: باستخدام UUIDs، JSONB، والعلاقات المحددة.
- جاهز للتنفيذ: يمكن تحويله مباشرة إلى SQL (PostgreSQL، MySQL، الخ).
بكل سرور! سأقوم بتوسيع نموذج قاعدة البيانات بشكل كبير ليشمل جداول جديدة و تفاصيل دقيقة تغطي جميع الجوانب التشغيلية والإدارية والتقنية التي وردت في الدليل، مع تعميق العلاقات وإضافة من السيناريوهات العملية.
🗄️ التوسعة الشاملة لنموذج قاعدة البيانات
📦 المجموعة الجديدة: إدارة المنتجات والخدمات (Product & Service Management)
8.1 products_catalog
سجل المنتجات/الخدمات التي تقدمها المنصة (بخلاف خطط الاشتراك الأساسية).
| العمود | النوع | القيد | الوصف |
|---|---|---|---|
product_id | UUID | PRIMARY KEY | المعرف الفريد للمنتج |
tenant_id | UUID | FOREIGN KEY (tenant_id) | المستأجر الذي يملك المنتج (أو NULL للمنتجات العامة) |
name | VARCHAR(255) | NOT NULL | اسم المنتج/الخدمة |
sku | VARCHAR(100) | UNIQUE | رقم التخزين التعريفي (Stock Keeping Unit) |
description | TEXT | – | وصف مفصل |
price | DECIMAL(10,2) | NOT NULL | السعر |
currency | CHAR(3) | NOT NULL, DEFAULT 'USD' | العملة |
is_active | BOOLEAN | NOT NULL, DEFAULT true | هل المنتج متاح للبيع؟ |
category | VARCHAR(100) | – | تصنيف المنتج |
metadata | JSONB | – | خصائص إضافية (مثل الوزن، الأبعاد، اللون) |
created_at | TIMESTAMP | NOT NULL, DEFAULT CURRENT_TIMESTAMP | تاريخ الإنشاء |
updated_at | TIMESTAMP | NOT NULL, DEFAULT CURRENT_TIMESTAMP | تاريخ آخر تحديث |
العلاقات:
products_catalog(N) — (1)tenants
8.2 inventory
تتبع المخزون للمنتجات المادية (إن وجدت).
| العمود | النوع | القيد | الوصف |
|---|---|---|---|
inventory_id | UUID | PRIMARY KEY | المعرف الفريد |
product_id | UUID | FOREIGN KEY (product_id) | المنتج المرتبط |
quantity | INTEGER | NOT NULL, DEFAULT 0 | الكمية المتوفرة |
reorder_level | INTEGER | NOT NULL, DEFAULT 10 | الحد الأدنى للتنبيه لإعادة الطلب |
reorder_quantity | INTEGER | NOT NULL, DEFAULT 50 | الكمية الموصى بها لإعادة الطلب |
location | VARCHAR(100) | – | موقع التخزين (مستودع، رف) |
last_updated_at | TIMESTAMP | NOT NULL, DEFAULT CURRENT_TIMESTAMP | تاريخ آخر تحديث |
العلاقات:
inventory(1) — (1)products_catalog
8.3 orders
سجل طلبات الشراء (للعملاء).
| العمود | النوع | القيد | الوصف |
|---|---|---|---|
order_id | UUID | PRIMARY KEY | المعرف الفريد |
tenant_id | UUID | FOREIGN KEY (tenant_id) | المستأجر صاحب الطلب |
user_id | UUID | FOREIGN KEY (user_id) | المستخدم الذي أنشأ الطلب |
order_number | VARCHAR(50) | UNIQUE, NOT NULL | رقم الطلب الفريد (قابل للقراءة) |
status | VARCHAR(30) | NOT NULL | حالة الطلب (pending, confirmed, shipped, delivered, canceled) |
total_amount | DECIMAL(10,2) | NOT NULL | المبلغ الإجمالي |
currency | CHAR(3) | NOT NULL, DEFAULT 'USD' | العملة |
shipping_address | JSONB | – | عنوان الشحن (ككائن JSON) |
billing_address | JSONB | – | عنوان الفوترة |
notes | TEXT | – | ملاحظات إضافية |
placed_at | TIMESTAMP | NOT NULL, DEFAULT CURRENT_TIMESTAMP | تاريخ الطلب |
updated_at | TIMESTAMP | NOT NULL, DEFAULT CURRENT_TIMESTAMP | تاريخ آخر تحديث |
العلاقات:
orders(N) — (1)tenantsorders(N) — (1)users
8.4 order_items
تفاصيل المنتجات في كل طلب.
| العمود | النوع | القيد | الوصف |
|---|---|---|---|
order_item_id | UUID | PRIMARY KEY | المعرف الفريد |
order_id | UUID | FOREIGN KEY (order_id) | الطلب المرتبط |
product_id | UUID | FOREIGN KEY (product_id) | المنتج المطلوب |
quantity | INTEGER | NOT NULL | الكمية |
unit_price | DECIMAL(10,2) | NOT NULL | سعر الوحدة وقت الطلب |
total_price | DECIMAL(10,2) | NOT NULL | السعر الإجمالي (الكمية × سعر الوحدة) |
discount_applied | DECIMAL(10,2) | DEFAULT 0 | الخصم المطبق على هذا البند |
العلاقات:
order_items(N) — (1)ordersorder_items(N) — (1)products_catalog
📦 المجموعة الجديدة: إدارة المشاريع والمهام (Project & Task Management)
9.1 projects
سجل المشاريع التي يديرها المستأجرون.
| العمود | النوع | القيد | الوصف |
|---|---|---|---|
project_id | UUID | PRIMARY KEY | المعرف الفريد |
tenant_id | UUID | FOREIGN KEY (tenant_id) | المستأجر صاحب المشروع |
name | VARCHAR(255) | NOT NULL | اسم المشروع |
description | TEXT | – | وصف المشروع |
status | VARCHAR(20) | NOT NULL | حالة المشروع (planning, active, on_hold, completed, archived) |
start_date | DATE | – | تاريخ البداية المتوقع |
end_date | DATE | – | تاريخ النهاية المتوقع |
budget | DECIMAL(12,2) | – | الميزانية المخصصة |
currency | CHAR(3) | DEFAULT 'USD' | العملة |
manager_id | UUID | FOREIGN KEY (manager_id) | مدير المشروع (من جدول المستخدمين) |
created_at | TIMESTAMP | NOT NULL, DEFAULT CURRENT_TIMESTAMP | تاريخ الإنشاء |
updated_at | TIMESTAMP | NOT NULL, DEFAULT CURRENT_TIMESTAMP | تاريخ آخر تحديث |
العلاقات:
projects(N) — (1)tenantsprojects(N) — (1)users(كمدير)
9.2 tasks
المهام المرتبطة بالمشاريع.
| العمود | النوع | القيد | الوصف |
|---|---|---|---|
task_id | UUID | PRIMARY KEY | المعرف الفريد |
project_id | UUID | FOREIGN KEY (project_id) | المشروع المرتبط |
assigned_to | UUID | FOREIGN KEY (assigned_to) | المستخدم المسند إليه المهمة |
created_by | UUID | FOREIGN KEY (created_by) | المستخدم الذي أنشأ المهمة |
title | VARCHAR(255) | NOT NULL | عنوان المهمة |
description | TEXT | – | وصف تفصيلي |
priority | VARCHAR(20) | NOT NULL, DEFAULT 'medium' | الأولوية (low, medium, high, critical) |
status | VARCHAR(20) | NOT NULL | حالة المهمة (pending, in_progress, review, done, blocked) |
due_date | TIMESTAMP | – | تاريخ الاستحقاق |
completed_at | TIMESTAMP | – | تاريخ الإكمال الفعلي |
estimated_hours | DECIMAL(5,2) | – | عدد الساعات المقدرة |
actual_hours | DECIMAL(5,2) | – | عدد الساعات الفعلية |
created_at | TIMESTAMP | NOT NULL, DEFAULT CURRENT_TIMESTAMP | تاريخ الإنشاء |
updated_at | TIMESTAMP | NOT NULL, DEFAULT CURRENT_TIMESTAMP | تاريخ آخر تحديث |
العلاقات:
tasks(N) — (1)projectstasks(N) — (1)users(كمسند إليه)tasks(N) — (1)users(كمنشئ)
9.3 task_comments
التعليقات والنقاشات حول المهام.
| العمود | النوع | القيد | الوصف |
|---|---|---|---|
comment_id | UUID | PRIMARY KEY | المعرف الفريد |
task_id | UUID | FOREIGN KEY (task_id) | المهمة المرتبطة |
user_id | UUID | FOREIGN KEY (user_id) | المستخدم صاحب التعليق |
content | TEXT | NOT NULL | محتوى التعليق |
created_at | TIMESTAMP | NOT NULL, DEFAULT CURRENT_TIMESTAMP | تاريخ التعليق |
updated_at | TIMESTAMP | NOT NULL, DEFAULT CURRENT_TIMESTAMP | تاريخ آخر تحديث |
العلاقات:
task_comments(N) — (1)taskstask_comments(N) — (1)users
9.4 task_attachments
الملفات المرفقة بالمهام.
| العمود | النوع | القيد | الوصف |
|---|---|---|---|
attachment_id | UUID | PRIMARY KEY | المعرف الفريد |
task_id | UUID | FOREIGN KEY (task_id) | المهمة المرتبطة |
user_id | UUID | FOREIGN KEY (user_id) | المستخدم الذي رفع الملف |
file_name | VARCHAR(255) | NOT NULL | اسم الملف |
file_url | TEXT | NOT NULL | رابط الملف المخزن (S3, CDN) |
file_size_bytes | BIGINT | – | حجم الملف بالبايت |
mime_type | VARCHAR(100) | – | نوع الملف (image/png, application/pdf) |
uploaded_at | TIMESTAMP | NOT NULL, DEFAULT CURRENT_TIMESTAMP | تاريخ الرفع |
العلاقات:
task_attachments(N) — (1)taskstask_attachments(N) — (1)users
📦 المجموعة الجديدة: إدارة علاقات العملاء (CRM)
10.1 leads
العملاء المحتملون (Lead Management).
| العمود | النوع | القيد | الوصف |
|---|---|---|---|
lead_id | UUID | PRIMARY KEY | المعرف الفريد |
tenant_id | UUID | FOREIGN KEY (tenant_id) | المستأجر صاحب العميل المحتمل |
first_name | VARCHAR(100) | NOT NULL | الاسم الأول |
last_name | VARCHAR(100) | NOT NULL | اسم العائلة |
email | VARCHAR(255) | – | البريد الإلكتروني |
phone | VARCHAR(20) | – | رقم الهاتف |
company_name | VARCHAR(255) | – | اسم الشركة |
source | VARCHAR(50) | – | مصدر العميل (website, referral, ad, event) |
status | VARCHAR(30) | NOT NULL | حالة العميل (new, contacted, qualified, lost, converted) |
assigned_to | UUID | FOREIGN KEY (assigned_to) | المندوب المسؤول |
score | INTEGER | DEFAULT 0 | درجة العميل المحتمل (Lead Score) |
notes | TEXT | – | ملاحظات إضافية |
converted_at | TIMESTAMP | – | تاريخ التحويل إلى عميل |
created_at | TIMESTAMP | NOT NULL, DEFAULT CURRENT_TIMESTAMP | تاريخ الإنشاء |
updated_at | TIMESTAMP | NOT NULL, DEFAULT CURRENT_TIMESTAMP | تاريخ آخر تحديث |
العلاقات:
leads(N) — (1)tenantsleads(N) — (1)users(كمسند إليه)
10.2 customers
العملاء الفعليون (بعد التحويل من Lead أو التسجيل المباشر).
| العمود | النوع | القيد | الوصف |
|---|---|---|---|
customer_id | UUID | PRIMARY KEY | المعرف الفريد |
tenant_id | UUID | FOREIGN KEY (tenant_id) | المستأجر صاحب العميل |
user_id | UUID | FOREIGN KEY (user_id) | حساب المستخدم المرتبط (إن وجد) |
lead_id | UUID | FOREIGN KEY (lead_id) | العميل المحتمل الذي تحول (إن وجد) |
first_name | VARCHAR(100) | NOT NULL | الاسم الأول |
last_name | VARCHAR(100) | NOT NULL | اسم العائلة |
email | VARCHAR(255) | UNIQUE, NOT NULL | البريد الإلكتروني |
phone | VARCHAR(20) | – | رقم الهاتف |
company | VARCHAR(255) | – | اسم الشركة |
customer_since | DATE | NOT NULL, DEFAULT CURRENT_DATE | تاريخ الانضمام |
lifetime_value | DECIMAL(10,2) | DEFAULT 0 | القيمة الإجمالية للعميل |
notes | TEXT | – | ملاحظات إضافية |
created_at | TIMESTAMP | NOT NULL, DEFAULT CURRENT_TIMESTAMP | تاريخ الإنشاء |
updated_at | TIMESTAMP | NOT NULL, DEFAULT CURRENT_TIMESTAMP | تاريخ آخر تحديث |
العلاقات:
customers(N) — (1)tenantscustomers(1) — (1)users(إن وجد)customers(1) — (1)leads(إن وجد)
10.3 interactions
سجل التفاعلات مع العملاء (مكالمات، رسائل، اجتماعات).
| العمود | النوع | القيد | الوصف |
|---|---|---|---|
interaction_id | UUID | PRIMARY KEY | المعرف الفريد |
customer_id | UUID | FOREIGN KEY (customer_id) | العميل المعني |
user_id | UUID | FOREIGN KEY (user_id) | الموظف الذي أجرى التفاعل |
type | VARCHAR(30) | NOT NULL | نوع التفاعل (call, email, meeting, support_ticket) |
subject | VARCHAR(255) | NOT NULL | موضوع التفاعل |
content | TEXT | – | محتوى التفاعل (ملخص المكالمة، نص البريد) |
duration_minutes | INTEGER | – | مدة التفاعل (للمكالمات والاجتماعات) |
outcome | VARCHAR(50) | – | نتيجة التفاعل (positive, negative, pending) |
scheduled_at | TIMESTAMP | – | موعد التفاعل المجدول (إن وجد) |
performed_at | TIMESTAMP | NOT NULL, DEFAULT CURRENT_TIMESTAMP | وقت تنفيذ التفاعل |
العلاقات:
interactions(N) — (1)customersinteractions(N) — (1)users
📦 المجموعة الجديدة: دعم العملاء والتذاكر (Support & Tickets)
11.1 support_tickets
تذاكر الدعم الفني.
| العمود | النوع | القيد | الوصف |
|---|---|---|---|
ticket_id | UUID | PRIMARY KEY | المعرف الفريد |
tenant_id | UUID | FOREIGN KEY (tenant_id) | المستأجر صاحب التذكرة |
customer_id | UUID | FOREIGN KEY (customer_id) | العميل مقدم الطلب |
assigned_to | UUID | FOREIGN KEY (assigned_to) | الموظف المسند إليه |
title | VARCHAR(255) | NOT NULL | عنوان التذكرة |
description | TEXT | NOT NULL | وصف المشكلة |
priority | VARCHAR(20) | NOT NULL, DEFAULT 'medium' | الأولوية (low, medium, high, critical) |
status | VARCHAR(20) | NOT NULL | حالة التذكرة (open, in_progress, resolved, closed) |
category | VARCHAR(50) | – | تصنيف المشكلة (technical, billing, feature_request) |
resolved_at | TIMESTAMP | – | تاريخ الحل |
satisfaction_score | INTEGER | – | تقييم رضا العميل (1-5) |
created_at | TIMESTAMP | NOT NULL, DEFAULT CURRENT_TIMESTAMP | تاريخ الإنشاء |
updated_at | TIMESTAMP | NOT NULL, DEFAULT CURRENT_TIMESTAMP | تاريخ آخر تحديث |
العلاقات:
support_tickets(N) — (1)tenantssupport_tickets(N) — (1)customerssupport_tickets(N) — (1)users(كمسند إليه)
11.2 ticket_replies
الردود على تذاكر الدعم.
| العمود | النوع | القيد | الوصف |
|---|---|---|---|
reply_id | UUID | PRIMARY KEY | المعرف الفريد |
ticket_id | UUID | FOREIGN KEY (ticket_id) | التذكرة المرتبطة |
user_id | UUID | FOREIGN KEY (user_id) | الشخص الذي كتب الرد (موظف أو عميل) |
content | TEXT | NOT NULL | محتوى الرد |
is_internal | BOOLEAN | NOT NULL, DEFAULT false | هل الرد داخلي (للموظفين فقط)؟ |
attachments | JSONB | – | قائمة الملفات المرفقة (إن وجدت) |
created_at | TIMESTAMP | NOT NULL, DEFAULT CURRENT_TIMESTAMP | تاريخ الرد |
العلاقات:
ticket_replies(N) — (1)support_ticketsticket_replies(N) — (1)users
📦 المجموعة الجديدة: التسويق والحملات (Marketing & Campaigns)
12.1 campaigns
الحملات التسويقية.
| العمود | النوع | القيد | الوصف |
|---|---|---|---|
campaign_id | UUID | PRIMARY KEY | المعرف الفريد |
tenant_id | UUID | FOREIGN KEY (tenant_id) | المستأجر صاحب الحملة |
name | VARCHAR(255) | NOT NULL | اسم الحملة |
description | TEXT | – | وصف الحملة |
type | VARCHAR(30) | NOT NULL | نوع الحملة (email, social_media, ppc, seo, event) |
budget | DECIMAL(12,2) | – | الميزانية المخصصة |
currency | CHAR(3) | DEFAULT 'USD' | العملة |
start_date | DATE | NOT NULL | تاريخ البداية |
end_date | DATE | – | تاريخ النهاية |
status | VARCHAR(20) | NOT NULL | حالة الحملة (draft, active, paused, ended) |
target_audience | JSONB | – | استهداف الجمهور (الموقع، العمر، الاهتمامات) |
created_at | TIMESTAMP | NOT NULL, DEFAULT CURRENT_TIMESTAMP | تاريخ الإنشاء |
updated_at | TIMESTAMP | NOT NULL, DEFAULT CURRENT_TIMESTAMP | تاريخ آخر تحديث |
العلاقات:
campaigns(N) — (1)tenants
12.2 campaign_metrics
مقاييس أداء الحملات.
| العمود | النوع | القيد | الوصف |
|---|---|---|---|
metric_id | UUID | PRIMARY KEY | المعرف الفريد |
campaign_id | UUID | FOREIGN KEY (campaign_id) | الحملة المرتبطة |
date | DATE | NOT NULL | تاريخ القياس |
impressions | BIGINT | DEFAULT 0 | عدد مرات الظهور |
clicks | BIGINT | DEFAULT 0 | عدد النقرات |
conversions | BIGINT | DEFAULT 0 | عدد التحويلات |
cost | DECIMAL(10,2) | DEFAULT 0 | التكلفة |
revenue | DECIMAL(10,2) | DEFAULT 0 | الإيرادات المحققة |
bounce_rate | DECIMAL(5,2) | – | معدل الارتداد (للبريد الإلكتروني) |
open_rate | DECIMAL(5,2) | – | معدل الفتح (للبريد الإلكتروني) |
click_through_rate | DECIMAL(5,2) | – | معدل النقر إلى الظهور (CTR) |
العلاقات:
campaign_metrics(N) — (1)campaigns
12.3 email_campaigns
تفاصيل حملات البريد الإلكتروني.
| العمود | النوع | القيد | الوصف |
|---|---|---|---|
email_campaign_id | UUID | PRIMARY KEY | المعرف الفريد |
campaign_id | UUID | FOREIGN KEY (campaign_id) | الحملة المرتبطة |
subject_line | VARCHAR(255) | NOT NULL | سطر الموضوع |
sender_name | VARCHAR(100) | NOT NULL | اسم المرسل |
sender_email | VARCHAR(255) | NOT NULL | بريد المرسل |
template_id | UUID | FOREIGN KEY (template_id) | قالب البريد المستخدم (من جدول notification_templates) |
recipients_count | INTEGER | NOT NULL | عدد المستلمين |
sent_at | TIMESTAMP | NOT NULL, DEFAULT CURRENT_TIMESTAMP | تاريخ الإرسال |
العلاقات:
email_campaigns(1) — (1)campaignsemail_campaigns(N) — (1)notification_templates
📦 المجموعة الجديدة: الموارد البشرية والموظفين (HR & Employees)
13.1 employees
بيانات الموظفين (بخلاف حسابات المستخدمين).
| العمود | النوع | القيد | الوصف |
|---|---|---|---|
employee_id | UUID | PRIMARY KEY | المعرف الفريد |
tenant_id | UUID | FOREIGN KEY (tenant_id) | المستأجر صاحب الموظف |
user_id | UUID | FOREIGN KEY (user_id) | حساب المستخدم المرتبط (إن وجد) |
first_name | VARCHAR(100) | NOT NULL | الاسم الأول |
last_name | VARCHAR(100) | NOT NULL | اسم العائلة |
email | VARCHAR(255) | UNIQUE, NOT NULL | البريد الإلكتروني |
phone | VARCHAR(20) | – | رقم الهاتف |
job_title | VARCHAR(100) | – | المسمى الوظيفي |
department | VARCHAR(100) | – | القسم |
hire_date | DATE | NOT NULL | تاريخ التوظيف |
termination_date | DATE | – | تاريخ انتهاء الخدمة (إن وجد) |
salary | DECIMAL(10,2) | – | الراتب |
currency | CHAR(3) | DEFAULT 'USD' | العملة |
bank_account | VARCHAR(100) | – | رقم الحساب البنكي |
emergency_contact | JSONB | – | بيانات جهة الاتصال في الطوارئ |
created_at | TIMESTAMP | NOT NULL, DEFAULT CURRENT_TIMESTAMP | تاريخ الإنشاء |
updated_at | TIMESTAMP | NOT NULL, DEFAULT CURRENT_TIMESTAMP | تاريخ آخر تحديث |
العلاقات:
employees(N) — (1)tenantsemployees(1) — (1)users(إن وجد)
13.2 attendance
سجل الحضور والانصراف.
| العمود | النوع | القيد | الوصف |
|---|---|---|---|
attendance_id | UUID | PRIMARY KEY | المعرف الفريد |
employee_id | UUID | FOREIGN KEY (employee_id) | الموظف المعني |
date | DATE | NOT NULL | التاريخ |
check_in_time | TIMESTAMP | – | وقت الحضور |
check_out_time | TIMESTAMP | – | وقت الانصراف |
hours_worked | DECIMAL(5,2) | – | عدد ساعات العمل |
overtime_hours | DECIMAL(5,2) | DEFAULT 0 | ساعات العمل الإضافي |
status | VARCHAR(20) | NOT NULL | حالة الحضور (present, absent, leave, holiday) |
notes | TEXT | – | ملاحظات إضافية |
العلاقات:
attendance(N) — (1)employees
13.3 leave_requests
طلبات الإجازات.
| العمود | النوع | القيد | الوصف |
|---|---|---|---|
leave_request_id | UUID | PRIMARY KEY | المعرف الفريد |
employee_id | UUID | FOREIGN KEY (employee_id) | الموظف مقدم الطلب |
approved_by | UUID | FOREIGN KEY (approved_by) | المدير الموافق (من جدول المستخدمين) |
type | VARCHAR(30) | NOT NULL | نوع الإجازة (annual, sick, unpaid, maternity) |
start_date | DATE | NOT NULL | تاريخ البداية |
end_date | DATE | NOT NULL | تاريخ النهاية |
total_days | DECIMAL(4,1) | NOT NULL | عدد الأيام |
reason | TEXT | – | سبب الإجازة |
status | VARCHAR(20) | NOT NULL | حالة الطلب (pending, approved, rejected) |
created_at | TIMESTAMP | NOT NULL, DEFAULT CURRENT_TIMESTAMP | تاريخ الطلب |
updated_at | TIMESTAMP | NOT NULL, DEFAULT CURRENT_TIMESTAMP | تاريخ آخر تحديث |
العلاقات:
leave_requests(N) — (1)employeesleave_requests(N) — (1)users(كموافق)
📦 المجموعة الجديدة: التقارير واللوحات (Reports & Dashboards)
14.1 report_templates
قوالب التقارير المعدة مسبقاً.
| العمود | النوع | القيد | الوصف |
|---|---|---|---|
template_id | UUID | PRIMARY KEY | المعرف الفريد |
tenant_id | UUID | FOREIGN KEY (tenant_id) | المستأجر صاحب القالب (أو NULL للقوالب العامة) |
name | VARCHAR(100) | NOT NULL | اسم القالب |
description | TEXT | – | وصف القالب |
category | VARCHAR(50) | NOT NULL | تصنيف التقرير (financial, user, performance, marketing) |
query | TEXT | NOT NULL | استعلام SQL أو تعريف التقرير (JSON) |
parameters | JSONB | – | معايير التقرير (تاريخ، معرف مستخدم، الخ) |
created_at | TIMESTAMP | NOT NULL, DEFAULT CURRENT_TIMESTAMP | تاريخ الإنشاء |
updated_at | TIMESTAMP | NOT NULL, DEFAULT CURRENT_TIMESTAMP | تاريخ آخر تحديث |
العلاقات:
report_templates(N) — (1)tenants
14.2 report_generations
سجل مرات إنشاء التقارير.
| العمود | النوع | القيد | الوصف |
|---|---|---|---|
generation_id | UUID | PRIMARY KEY | المعرف الفريد |
template_id | UUID | FOREIGN KEY (template_id) | القالب المستخدم |
requested_by | UUID | FOREIGN KEY (requested_by) | المستخدم الذي طلب التقرير |
format | VARCHAR(20) | NOT NULL | صيغة التقرير (PDF, Excel, CSV, JSON) |
parameters_used | JSONB | – | المعايير المستخدمة عند الإنشاء |
file_url | TEXT | – | رابط ملف التقرير المخزن |
status | VARCHAR(20) | NOT NULL | حالة الإنشاء (processing, completed, failed) |
error_message | TEXT | – | رسالة الخطأ في حالة الفشل |
generated_at | TIMESTAMP | NOT NULL, DEFAULT CURRENT_TIMESTAMP | تاريخ الإنشاء |
العلاقات:
report_generations(N) — (1)report_templatesreport_generations(N) — (1)users
14.3 scheduled_reports
جدولة التقارير الدورية.
| العمود | النوع | القيد | الوصف |
|---|---|---|---|
schedule_id | UUID | PRIMARY KEY | المعرف الفريد |
template_id | UUID | FOREIGN KEY (template_id) | القالب المجدول |
created_by | UUID | FOREIGN KEY (created_by) | المستخدم الذي أنشأ الجدولة |
frequency | VARCHAR(20) | NOT NULL | التكرار (daily, weekly, monthly) |
day_of_week | INTEGER | – | يوم الأسبوع (للتكرار الأسبوعي) |
day_of_month | INTEGER | – | يوم الشهر (للتكرار الشهري) |
recipients | JSONB | – | قائمة المستلمين (بريد إلكتروني) |
is_active | BOOLEAN | NOT NULL, DEFAULT true | هل الجدولة مفعلة؟ |
last_sent_at | TIMESTAMP | – | تاريخ آخر إرسال |
next_send_at | TIMESTAMP | NOT NULL | تاريخ الإرسال القادم |
created_at | TIMESTAMP | NOT NULL, DEFAULT CURRENT_TIMESTAMP | تاريخ الإنشاء |
العلاقات:
scheduled_reports(N) — (1)report_templatesscheduled_reports(N) — (1)users
📦 المجموعة الجديدة: إدارة الأصول والممتلكات (Assets Management)
15.1 assets
سجل الأصول المملوكة للمنصة أو للمستأجرين.
| العمود | النوع | القيد | الوصف |
|---|---|---|---|
asset_id | UUID | PRIMARY KEY | المعرف الفريد |
tenant_id | UUID | FOREIGN KEY (tenant_id) | المستأجر المالك (أو NULL للأصول العامة) |
name | VARCHAR(255) | NOT NULL | اسم الأصل |
type | VARCHAR(50) | NOT NULL | نوع الأصل (software_license, hardware, intellectual_property) |
description | TEXT | – | وصف الأصل |
serial_number | VARCHAR(100) | – | الرقم التسلسلي |
purchase_date | DATE | – | تاريخ الشراء |
purchase_price | DECIMAL(10,2) | – | سعر الشراء |
currency | CHAR(3) | DEFAULT 'USD' | العملة |
useful_life_years | INTEGER | – | العمر الافتراضي (بالسنوات) |
status | VARCHAR(20) | NOT NULL | حالة الأصل (active, deprecated, sold, disposed) |
assigned_to | UUID | FOREIGN KEY (assigned_to) | المستخدم/الموظف المسند إليه الأصل (إن وجد) |
created_at | TIMESTAMP | NOT NULL, DEFAULT CURRENT_TIMESTAMP | تاريخ الإنشاء |
updated_at | TIMESTAMP | NOT NULL, DEFAULT CURRENT_TIMESTAMP | تاريخ آخر تحديث |
العلاقات:
assets(N) — (1)tenantsassets(N) — (1)users(كمسند إليه)
📦 المجموعة الجديدة: السجلات القانونية والامتثال (Legal & Compliance)
16.1 compliance_records
سجل الامتثال للقوانين والمعايير.
| العمود | النوع | القيد | الوصف |
|---|---|---|---|
record_id | UUID | PRIMARY KEY | المعرف الفريد |
tenant_id | UUID | FOREIGN KEY (tenant_id) | المستأجر المعني (أو NULL للمنصة) |
standard | VARCHAR(100) | NOT NULL | المعيار/القانون (GDPR, CCPA, ISO27001, PCI-DSS) |
status | VARCHAR(20) | NOT NULL | حالة الامتثال (compliant, non_compliant, pending_audit) |
audit_date | DATE | – | تاريخ آخر تدقيق |
audited_by | VARCHAR(100) | – | المدقق |
findings | TEXT | – | نتائج التدقيق |
remediation_plan | TEXT | – | خطة المعالجة (إن وجدت) |
due_date | DATE | – | تاريخ استحقاق المعالجة |
created_at | TIMESTAMP | NOT NULL, DEFAULT CURRENT_TIMESTAMP | تاريخ الإنشاء |
updated_at | TIMESTAMP | NOT NULL, DEFAULT CURRENT_TIMESTAMP | تاريخ آخر تحديث |
العلاقات:
compliance_records(N) — (1)tenants
16.2 terms_acceptance
سجل موافقات المستخدمين على الشروط والأحكام.
| العمود | النوع | القيد | الوصف |
|---|---|---|---|
acceptance_id | UUID | PRIMARY KEY | المعرف الفريد |
user_id | UUID | FOREIGN KEY (user_id) | المستخدم الموافق |
tenant_id | UUID | FOREIGN KEY (tenant_id) | المستأجر المرتبط |
document_name | VARCHAR(255) | NOT NULL | اسم الوثيقة (Terms of Service, Privacy Policy) |
document_version | VARCHAR(20) | NOT NULL | إصدار الوثيقة |
accepted_at | TIMESTAMP | NOT NULL, DEFAULT CURRENT_TIMESTAMP | تاريخ الموافقة |
ip_address | INET | – | عنوان IP عند الموافقة |
العلاقات:
terms_acceptance(N) — (1)usersterms_acceptance(N) — (1)tenants
📦 المجموعة الجديدة: إدارة المعرفة والمستندات (Knowledge Management)
17.1 knowledge_base
قاعدة المعرفة (مقالات، أدلة، أسئلة شائعة).
| العمود | النوع | القيد | الوصف |
|---|---|---|---|
article_id | UUID | PRIMARY KEY | المعرف الفريد |
tenant_id | UUID | FOREIGN KEY (tenant_id) | المستأجر صاحب المقال (أو NULL للمقالات العامة) |
title | VARCHAR(255) | NOT NULL | عنوان المقال |
slug | VARCHAR(255) | UNIQUE, NOT NULL | الرابط الصديق للمقال |
content | TEXT | NOT NULL | محتوى المقال (بصيغة Markdown أو HTML) |
category | VARCHAR(50) | – | تصنيف المقال |
tags | TEXT[] | – | وسوم للمقال |
views | INTEGER | DEFAULT 0 | عدد المشاهدات |
helpful_count | INTEGER | DEFAULT 0 | عدد التقييمات الإيجابية |
not_helpful_count | INTEGER | DEFAULT 0 | عدد التقييمات السلبية |
author_id | UUID | FOREIGN KEY (author_id) | كاتب المقال |
status | VARCHAR(20) | NOT NULL | حالة المقال (draft, published, archived) |
published_at | TIMESTAMP | – | تاريخ النشر |
created_at | TIMESTAMP | NOT NULL, DEFAULT CURRENT_TIMESTAMP | تاريخ الإنشاء |
updated_at | TIMESTAMP | NOT NULL, DEFAULT CURRENT_TIMESTAMP | تاريخ آخر تحديث |
العلاقات:
knowledge_base(N) — (1)tenantsknowledge_base(N) — (1)users(ككاتب)
17.2 documents
المستندات والملفات المهمة (عقود، اتفاقيات، فواتير).
| العمود | النوع | القيد | الوصف |
|---|---|---|---|
document_id | UUID | PRIMARY KEY | المعرف الفريد |
tenant_id | UUID | FOREIGN KEY (tenant_id) | المستأجر المالك |
uploaded_by | UUID | FOREIGN KEY (uploaded_by) | المستخدم الذي رفع المستند |
name | VARCHAR(255) | NOT NULL | اسم المستند |
description | TEXT | – | وصف المستند |
file_url | TEXT | NOT NULL | رابط الملف المخزن |
file_size_bytes | BIGINT | – | حجم الملف بالبايت |
mime_type | VARCHAR(100) | – | نوع الملف |
category | VARCHAR(50) | – | تصنيف المستند (contract, invoice, report) |
expiry_date | DATE | – | تاريخ انتهاء صلاحية المستند (للشهادات والعقود) |
is_confidential | BOOLEAN | DEFAULT false | هل المستند سري؟ |
access_permissions | JSONB | – | صلاحيات الوصول (من يمكنه الرؤية) |
created_at | TIMESTAMP | NOT NULL, DEFAULT CURRENT_TIMESTAMP | تاريخ الرفع |
updated_at | TIMESTAMP | NOT NULL, DEFAULT CURRENT_TIMESTAMP | تاريخ آخر تحديث |
العلاقات:
documents(N) — (1)tenantsdocuments(N) — (1)users(كرافع)
📦 المجموعة الجديدة: التوسع الجغرافي والإعدادات المحلية (Localization & Geo)
18.1 localization_settings
إعدادات الترجمة والتنسيق المحلي.
| العمود | النوع | القيد | الوصف |
|---|---|---|---|
setting_id | UUID | PRIMARY KEY | المعرف الفريد |
tenant_id | UUID | FOREIGN KEY (tenant_id) | المستأجر المعني |
language_code | CHAR(2) | NOT NULL | كود اللغة (ar, en) |
country_code | CHAR(2) | NOT NULL | كود الدولة (SA, US) |
timezone | VARCHAR(50) | NOT NULL, DEFAULT 'UTC' | المنطقة الزمنية |
date_format | VARCHAR(20) | NOT NULL | تنسيق التاريخ (YYYY-MM-DD, DD/MM/YYYY) |
currency_symbol | VARCHAR(5) | NOT NULL | رمز العملة ($, د.إ) |
currency_position | VARCHAR(10) | NOT NULL | موضع العملة (before, after) |
decimal_separator | CHAR(1) | NOT NULL | فاصل الكسور العشرية (. أو ,) |
thousands_separator | CHAR(1) | NOT NULL | فاصل الآلاف (, أو .) |
created_at | TIMESTAMP | NOT NULL, DEFAULT CURRENT_TIMESTAMP | تاريخ الإنشاء |
updated_at | TIMESTAMP | NOT NULL, DEFAULT CURRENT_TIMESTAMP | تاريخ آخر تحديث |
العلاقات:
localization_settings(1) — (1)tenants
📦 المجموعة الجديدة: تتبع التغييرات والمراجعات (Change Tracking & Revisions)
19.1 change_requests
طلبات التغيير على النظام (لميزات أو إعدادات).
| العمود | النوع | القيد | الوصف |
|---|---|---|---|
request_id | UUID | PRIMARY KEY | المعرف الفريد |
tenant_id | UUID | FOREIGN KEY (tenant_id) | المستأجر مقدم الطلب (أو NULL للمنصة) |
requested_by | UUID | FOREIGN KEY (requested_by) | المستخدم مقدم الطلب |
approved_by | UUID | FOREIGN KEY (approved_by) | المستخدم الموافق (إن وجد) |
title | VARCHAR(255) | NOT NULL | عنوان طلب التغيير |
description | TEXT | NOT NULL | وصف التغيير المطلوب |
reason | TEXT | NOT NULL | سبب التغيير |
priority | VARCHAR(20) | NOT NULL | الأولوية (low, medium, high) |
status | VARCHAR(20) | NOT NULL | حالة الطلب (submitted, review, approved, rejected, implemented) |
implemented_at | TIMESTAMP | – | تاريخ التنفيذ |
created_at | TIMESTAMP | NOT NULL, DEFAULT CURRENT_TIMESTAMP | تاريخ الطلب |
updated_at | TIMESTAMP | NOT NULL, DEFAULT CURRENT_TIMESTAMP | تاريخ آخر تحديث |
العلاقات:
change_requests(N) — (1)tenantschange_requests(N) — (1)users(كمقدم)change_requests(N) — (1)users(كموافق)
🔗 ملخص العلاقات المتقدمة
لتسهيل الفهم، إليك ملخص للعلاقات الرئيسية بين المجموعات الجديدة والمجموعات الأساسية:
🧩 نظرة عامة على عدد الجداول والعلاقات
| المجموعة | عدد الجداول | عدد العلاقات المباشرة |
|---|---|---|
| المستخدمين والمصادقة (Users & Auth) | 7 | 9 |
| المستأجرين والشركات (Tenants & Companies) | 1 | 8 (كمرجع في معظم الجداول) |
| الاشتراكات والمدفوعات (Subscriptions & Payments) | 4 | 7 |
| الإشعارات والاتصالات (Notifications & Messages) | 2 | 2 |
| التحليلات والمراقبة (Analytics & Monitoring) | 4 | 3 |
| التكامل والأحداث (Integration & Events) | 2 | 2 |
| العمليات والتطوير (Operations & Development) | 4 | 5 |
| المجموعات الجديدة | ||
| إدارة المنتجات والخدمات (Product & Service) | 4 | 6 |
| إدارة المشاريع والمهام (Project & Task) | 4 | 7 |
| إدارة علاقات العملاء (CRM) | 3 | 7 |
| دعم العملاء والتذاكر (Support & Tickets) | 2 | 5 |
| التسويق والحملات (Marketing & Campaigns) | 3 | 4 |
| الموارد البشرية (HR & Employees) | 3 | 6 |
| التقارير واللوحات (Reports & Dashboards) | 3 | 5 |
| إدارة الأصول (Assets Management) | 1 | 2 |
| السجلات القانونية (Legal & Compliance) | 2 | 4 |
| إدارة المعرفة (Knowledge Management) | 2 | 4 |
| التوسع الجغرافي (Localization & Geo) | 1 | 1 |
| تتبع التغييرات (Change Tracking) | 1 | 4 |
| المجموع الكلي | 53 جدولاً | ~91 علاقة |
💡 نصائح لتنفيذ قاعدة البيانات
- الفهرسة (Indexing):
- أضف فهارس على المفاتيح الأجنبية (
tenant_id,user_id,customer_id) لتسريع الاستعلامات. - أضف فهارس على الحقول المستخدمة بكثرة في البحث والتصفية (
email,status,created_at).
- أضف فهارس على المفاتيح الأجنبية (
- الأرشفة (Archiving):
- استخدم
deleted_atللحذف الناعم بدلاً من الحذف الفعلي. - قم بنقل البيانات القديمة (مثل
audit_logs,user_events) إلى جداول أرشيفية دورياً.
- استخدم
- التقسيم (Partitioning):
- قم بتقسيم الجداول الكبيرة (مثل
user_events,audit_logs) حسب التاريخ لتحسين الأداء.
- قم بتقسيم الجداول الكبيرة (مثل
- الأمان:
- استخدم تشفيراً على الحساسية (مثل
password_hash,key_hash). - طبق RLS (Row Level Security) في PostgreSQL لعزل البيانات بين المستأجرين.
- استخدم تشفيراً على الحساسية (مثل
- التوسع المستقبلي:
- أضف حقول
metadataأوextraمن نوع JSONB في كل جدول لتخزين بيانات إضافية مستقبلية دون تغيير الهيكل.
- أضف حقول
هذه التوسعة تجعل قاعدة البيانات جاهزة للمؤسسات وتغطي جميع جوانب النظام المتكامل، مع إمكانية التوسع لتشمل من الميزات حسب احتياجات العمل.
This response is AI-generated, for reference only.
بكل سرور! سأقوم بتوسيع نموذج قاعدة البيانات بشكل أكبر ليشمل جداول متخصصة تغطي جميع السيناريوهات التشغيلية المتقدمة، بما في ذلك:
- إدارة الفرق والتعاون
- نظام المكافآت والحوافز
- إدارة العقود والاتفاقيات
- نظام التوصيات الذكي
- إدارة البنية التحتية والتطبيقات
- نظام الحوكمة والتصويت
- إدارة النماذج والاستبيانات
- نظام مراقبة الجودة
- إدارة الشراكات والموردين
- النظام المالي المتقدم
🗄️ التوسعة المتقدمة لنموذج قاعدة البيانات
📦 المجموعة الجديدة: إدارة الفرق والتعاون (Teams & Collaboration)
20.1 teams
الفرق داخل المؤسسات.
| العمود | النوع | القيد | الوصف |
|---|---|---|---|
team_id | UUID | PRIMARY KEY | المعرف الفريد للفريق |
tenant_id | UUID | FOREIGN KEY (tenant_id) | المستأجر صاحب الفريق |
name | VARCHAR(100) | NOT NULL | اسم الفريق |
description | TEXT | – | وصف الفريق |
department | VARCHAR(100) | – | القسم التابع له الفريق |
team_lead_id | UUID | FOREIGN KEY (team_lead_id) | قائد الفريق (من جدول المستخدمين) |
status | VARCHAR(20) | NOT NULL, DEFAULT 'active' | حالة الفريق (active, inactive) |
created_at | TIMESTAMP | NOT NULL, DEFAULT CURRENT_TIMESTAMP | تاريخ الإنشاء |
updated_at | TIMESTAMP | NOT NULL, DEFAULT CURRENT_TIMESTAMP | تاريخ آخر تحديث |
العلاقات:
teams(N) — (1)tenantsteams(N) — (1)users(كقائد)
20.2 team_members
عضوية الفرق.
| العمود | النوع | القيد | الوصف |
|---|---|---|---|
member_id | UUID | PRIMARY KEY | المعرف الفريد |
team_id | UUID | FOREIGN KEY (team_id) | الفريق المعني |
user_id | UUID | FOREIGN KEY (user_id) | العضو |
role_in_team | VARCHAR(50) | – | دور العضو في الفريق (member, coordinator, lead) |
joined_at | TIMESTAMP | NOT NULL, DEFAULT CURRENT_TIMESTAMP | تاريخ الانضمام |
left_at | TIMESTAMP | – | تاريخ المغادرة (إن وجد) |
العلاقات:
team_members(N) — (1)teamsteam_members(N) — (1)users
20.3 team_activities
سجل أنشطة الفريق.
| العمود | النوع | القيد | الوصف |
|---|---|---|---|
activity_id | UUID | PRIMARY KEY | المعرف الفريد |
team_id | UUID | FOREIGN KEY (team_id) | الفريق المعني |
user_id | UUID | FOREIGN KEY (user_id) | المستخدم المنفذ للنشاط |
activity_type | VARCHAR(50) | NOT NULL | نوع النشاط (meeting, workshop, training, review) |
title | VARCHAR(255) | NOT NULL | عنوان النشاط |
description | TEXT | – | وصف النشاط |
start_time | TIMESTAMP | NOT NULL | وقت البدء |
end_time | TIMESTAMP | – | وقت الانتهاء |
location | VARCHAR(255) | – | الموقع (مادي أو افتراضي) |
attendance | JSONB | – | قائمة الحضور |
outcome | TEXT | – | نتائج النشاط |
created_at | TIMESTAMP | NOT NULL, DEFAULT CURRENT_TIMESTAMP | تاريخ الإنشاء |
العلاقات:
team_activities(N) — (1)teamsteam_activities(N) — (1)users
📦 المجموعة الجديدة: نظام المكافآت والحوافز (Rewards & Incentives)
21.1 reward_programs
برامج المكافآت والحوافز.
| العمود | النوع | القيد | الوصف |
|---|---|---|---|
program_id | UUID | PRIMARY KEY | المعرف الفريد |
tenant_id | UUID | FOREIGN KEY (tenant_id) | المستأجر صاحب البرنامج |
name | VARCHAR(100) | NOT NULL | اسم البرنامج |
description | TEXT | – | وصف البرنامج |
type | VARCHAR(30) | NOT NULL | نوع البرنامج (points, badges, levels, cashback) |
start_date | DATE | NOT NULL | تاريخ البدء |
end_date | DATE | – | تاريخ الانتهاء |
is_active | BOOLEAN | NOT NULL, DEFAULT true | هل البرنامج مفعل؟ |
criteria | JSONB | – | معايير الاستحقاق (شرط الحصول على المكافأة) |
created_at | TIMESTAMP | NOT NULL, DEFAULT CURRENT_TIMESTAMP | تاريخ الإنشاء |
updated_at | TIMESTAMP | NOT NULL, DEFAULT CURRENT_TIMESTAMP | تاريخ آخر تحديث |
العلاقات:
reward_programs(N) — (1)tenants
21.2 user_rewards
المكافآت المكتسبة من قبل المستخدمين.
| العمود | النوع | القيد | الوصف |
|---|---|---|---|
reward_id | UUID | PRIMARY KEY | المعرف الفريد |
program_id | UUID | FOREIGN KEY (program_id) | البرنامج المرتبط |
user_id | UUID | FOREIGN KEY (user_id) | المستخدم الحاصل على المكافأة |
points_earned | INTEGER | DEFAULT 0 | عدد النقاط المكتسبة |
points_used | INTEGER | DEFAULT 0 | عدد النقاط المستخدمة |
badge_name | VARCHAR(100) | – | اسم الشارة (إن وجدت) |
level_achieved | INTEGER | – | المستوى المحقق (إن وجد) |
achieved_at | TIMESTAMP | NOT NULL, DEFAULT CURRENT_TIMESTAMP | تاريخ الحصول على المكافأة |
expires_at | TIMESTAMP | – | تاريخ انتهاء صلاحية المكافأة (إن وجد) |
redeemed_at | TIMESTAMP | – | تاريخ استبدال المكافأة (إن وجد) |
العلاقات:
user_rewards(N) — (1)reward_programsuser_rewards(N) — (1)users
21.3 reward_transactions
سجل حركات النقاط والمكافآت.
| العمود | النوع | القيد | الوصف |
|---|---|---|---|
transaction_id | UUID | PRIMARY KEY | المعرف الفريد |
reward_id | UUID | FOREIGN KEY (reward_id) | المكافأة المرتبطة |
user_id | UUID | FOREIGN KEY (user_id) | المستخدم المعني |
transaction_type | VARCHAR(20) | NOT NULL | نوع الحركة (earn, spend, expire, adjust) |
amount | INTEGER | NOT NULL | عدد النقاط (موجب للكسب، سالب للإنفاق) |
balance_after | INTEGER | NOT NULL | الرصيد بعد الحركة |
reason | VARCHAR(255) | – | سبب الحركة |
reference_id | UUID | – | معرف المرجع (مثل معرف الطلب أو المهمة) |
created_at | TIMESTAMP | NOT NULL, DEFAULT CURRENT_TIMESTAMP | تاريخ الحركة |
العلاقات:
reward_transactions(N) — (1)reward_programsreward_transactions(N) — (1)users
📦 المجموعة الجديدة: إدارة العقود والاتفاقيات (Contracts & Agreements)
22.1 contracts
العقود والاتفاقيات بين المنصة والعملاء/الموردين.
| العمود | النوع | القيد | الوصف |
|---|---|---|---|
contract_id | UUID | PRIMARY KEY | المعرف الفريد |
tenant_id | UUID | FOREIGN KEY (tenant_id) | المستأجر الطرف في العقد |
counterparty_id | UUID | FOREIGN KEY (counterparty_id) | الطرف الآخر (من جدول العملاء أو الموردين) |
contract_number | VARCHAR(50) | UNIQUE, NOT NULL | رقم العقد الفريد |
title | VARCHAR(255) | NOT NULL | عنوان العقد |
description | TEXT | – | وصف العقد |
type | VARCHAR(30) | NOT NULL | نوع العقد (subscription, service, partnership, nda) |
status | VARCHAR(20) | NOT NULL | حالة العقد (draft, active, expired, terminated) |
start_date | DATE | NOT NULL | تاريخ البداية |
end_date | DATE | – | تاريخ النهاية |
auto_renew | BOOLEAN | DEFAULT false | هل يتم التجديد تلقائياً؟ |
renewal_notice_days | INTEGER | – | عدد أيام الإشعار قبل التجديد |
terms | TEXT | – | شروط وأحكام العقد |
payment_terms | TEXT | – | شروط الدفع |
total_value | DECIMAL(12,2) | – | القيمة الإجمالية للعقد |
currency | CHAR(3) | DEFAULT 'USD' | العملة |
document_id | UUID | FOREIGN KEY (document_id) | المستند المرتبط (من جدول المستندات) |
created_by | UUID | FOREIGN KEY (created_by) | المستخدم المنشئ |
created_at | TIMESTAMP | NOT NULL, DEFAULT CURRENT_TIMESTAMP | تاريخ الإنشاء |
updated_at | TIMESTAMP | NOT NULL, DEFAULT CURRENT_TIMESTAMP | تاريخ آخر تحديث |
العلاقات:
contracts(N) — (1)tenantscontracts(N) — (1)customers(كطرف مقابل)contracts(N) — (1)documentscontracts(N) — (1)users(كمنشئ)
22.2 contract_amendments
تعديلات وإضافات على العقود.
| العمود | النوع | القيد | الوصف |
|---|---|---|---|
amendment_id | UUID | PRIMARY KEY | المعرف الفريد |
contract_id | UUID | FOREIGN KEY (contract_id) | العقد المرتبط |
amendment_number | INTEGER | NOT NULL | رقم التعديل (1, 2, 3…) |
description | TEXT | NOT NULL | وصف التعديل |
changes | JSONB | NOT NULL | التغييرات المفصلة (الحقول المتغيرة) |
effective_date | DATE | NOT NULL | تاريخ سريان التعديل |
approved_by | UUID | FOREIGN KEY (approved_by) | المعتمد |
approved_at | TIMESTAMP | NOT NULL, DEFAULT CURRENT_TIMESTAMP | تاريخ الاعتماد |
document_id | UUID | FOREIGN KEY (document_id) | المستند المرتبط بالتعديل |
العلاقات:
contract_amendments(N) — (1)contractscontract_amendments(N) — (1)users(كمعتمد)contract_amendments(N) — (1)documents
📦 المجموعة الجديدة: نظام التوصيات الذكي (Recommendation Engine)
23.1 user_preferences
تفضيلات المستخدمين لنظام التوصيات.
| العمود | النوع | القيد | الوصف |
|---|---|---|---|
preference_id | UUID | PRIMARY KEY | المعرف الفريد |
user_id | UUID | FOREIGN KEY (user_id) | المستخدم المعني |
preference_type | VARCHAR(50) | NOT NULL | نوع التفضيل (category, price_range, feature) |
preference_value | VARCHAR(255) | NOT NULL | قيمة التفضيل |
weight | DECIMAL(3,2) | DEFAULT 1.0 | وزن التفضيل (الأهمية) |
updated_at | TIMESTAMP | NOT NULL, DEFAULT CURRENT_TIMESTAMP | تاريخ آخر تحديث |
العلاقات:
user_preferences(N) — (1)users
23.2 user_behavior
سجل سلوك المستخدمين للتحليل والتوصيات.
| العمود | النوع | القيد | الوصف |
|---|---|---|---|
behavior_id | UUID | PRIMARY KEY | المعرف الفريد |
user_id | UUID | FOREIGN KEY (user_id) | المستخدم المعني |
behavior_type | VARCHAR(30) | NOT NULL | نوع السلوك (view, click, purchase, rate, favorite) |
target_type | VARCHAR(30) | NOT NULL | نوع المستهدف (product, service, article, feature) |
target_id | UUID | NOT NULL | المعرف الفريد للمستهدف |
value | DECIMAL(5,2) | – | قيمة السلوك (مثل التقييم من 1-5) |
session_id | UUID | – | معرف الجلسة (لربط السلوكيات في جلسة واحدة) |
created_at | TIMESTAMP | NOT NULL, DEFAULT CURRENT_TIMESTAMP | تاريخ السلوك |
العلاقات:
user_behavior(N) — (1)users
23.3 recommendations
التوصيات التي تم إنشاؤها للمستخدمين.
| العمود | النوع | القيد | الوصف |
|---|---|---|---|
recommendation_id | UUID | PRIMARY KEY | المعرف الفريد |
user_id | UUID | FOREIGN KEY (user_id) | المستخدم المستهدف |
recommended_type | VARCHAR(30) | NOT NULL | نوع التوصية (product, service, article) |
recommended_id | UUID | NOT NULL | المعرف الفريد للموصى به |
score | DECIMAL(5,2) | NOT NULL | درجة التوصية (0-1) |
reason | VARCHAR(255) | – | سبب التوصية (مثل “بناءً على مشترياتك السابقة”) |
model_used | VARCHAR(50) | – | النموذج المستخدم (collaborative, content-based, hybrid) |
is_seen | BOOLEAN | DEFAULT false | هل شاهد المستخدم التوصية؟ |
is_clicked | BOOLEAN | DEFAULT false | هل نقر المستخدم على التوصية؟ |
is_accepted | BOOLEAN | DEFAULT false | هل قبل المستخدم التوصية (مثل شراء المنتج)؟ |
created_at | TIMESTAMP | NOT NULL, DEFAULT CURRENT_TIMESTAMP | تاريخ الإنشاء |
expires_at | TIMESTAMP | – | تاريخ انتهاء صلاحية التوصية |
العلاقات:
recommendations(N) — (1)users
23.4 recommendation_models
نماذج التوصيات المستخدمة.
| العمود | النوع | القيد | الوصف |
|---|---|---|---|
model_id | UUID | PRIMARY KEY | المعرف الفريد |
tenant_id | UUID | FOREIGN KEY (tenant_id) | المستأجر صاحب النموذج (أو NULL للعمومي) |
name | VARCHAR(100) | NOT NULL | اسم النموذج |
type | VARCHAR(30) | NOT NULL | نوع النموذج (collaborative, content_based, hybrid, deep_learning) |
parameters | JSONB | – | معايير النموذج (عدد الجيران، معدل التعلم، الخ) |
accuracy_score | DECIMAL(5,4) | – | درجة دقة النموذج |
training_date | TIMESTAMP | – | تاريخ آخر تدريب |
is_active | BOOLEAN | NOT NULL, DEFAULT true | هل النموذج مفعل؟ |
created_at | TIMESTAMP | NOT NULL, DEFAULT CURRENT_TIMESTAMP | تاريخ الإنشاء |
العلاقات:
recommendation_models(N) — (1)tenants
📦 المجموعة الجديدة: إدارة البنية التحتية والتطبيقات (Infrastructure & Apps)
24.1 servers
سجل الخوادم والبنية التحتية.
| العمود | النوع | القيد | الوصف |
|---|---|---|---|
server_id | UUID | PRIMARY KEY | المعرف الفريد |
tenant_id | UUID | FOREIGN KEY (tenant_id) | المستأجر المالك (أو NULL للخوادم العامة) |
name | VARCHAR(100) | NOT NULL | اسم الخادم |
hostname | VARCHAR(255) | UNIQUE, NOT NULL | اسم المضيف |
ip_address | INET | NOT NULL | عنوان IP |
environment | VARCHAR(20) | NOT NULL | البيئة (production, staging, development) |
os_type | VARCHAR(50) | NOT NULL | نظام التشغيل |
instance_type | VARCHAR(50) | – | نوع المثيل (t2.micro, c5.large) |
cpu_cores | INTEGER | – | عدد نوى المعالج |
ram_gb | DECIMAL(5,2) | – | حجم الذاكرة (GB) |
storage_gb | DECIMAL(5,2) | – | حجم التخزين (GB) |
status | VARCHAR(20) | NOT NULL | حالة الخادم (running, stopped, maintenance) |
created_at | TIMESTAMP | NOT NULL, DEFAULT CURRENT_TIMESTAMP | تاريخ الإنشاء |
updated_at | TIMESTAMP | NOT NULL, DEFAULT CURRENT_TIMESTAMP | تاريخ آخر تحديث |
العلاقات:
servers(N) — (1)tenants
24.2 services
الخدمات المصغرة والتطبيقات.
| العمود | النوع | القيد | الوصف |
|---|---|---|---|
service_id | UUID | PRIMARY KEY | المعرف الفريد |
tenant_id | UUID | FOREIGN KEY (tenant_id) | المستأجر المالك (أو NULL للخدمات العامة) |
name | VARCHAR(100) | NOT NULL | اسم الخدمة |
description | TEXT | – | وصف الخدمة |
type | VARCHAR(30) | NOT NULL | نوع الخدمة (microservice, api, database, cache) |
repo_url | TEXT | – | رابط المستودع |
docker_image | VARCHAR(255) | – | صورة Docker |
health_check_endpoint | VARCHAR(255) | – | نقطة التحقق الصحي |
version | VARCHAR(20) | – | الإصدار الحالي |
status | VARCHAR(20) | NOT NULL | حالة الخدمة (healthy, degraded, down) |
created_at | TIMESTAMP | NOT NULL, DEFAULT CURRENT_TIMESTAMP | تاريخ الإنشاء |
updated_at | TIMESTAMP | NOT NULL, DEFAULT CURRENT_TIMESTAMP | تاريخ آخر تحديث |
العلاقات:
services(N) — (1)tenants
24.3 service_instances
مثيلات الخدمات العاملة على الخوادم.
| العمود | النوع | القيد | الوصف |
|---|---|---|---|
instance_id | UUID | PRIMARY KEY | المعرف الفريد |
service_id | UUID | FOREIGN KEY (service_id) | الخدمة المرتبطة |
server_id | UUID | FOREIGN KEY (server_id) | الخادم المستضيف |
port | INTEGER | NOT NULL | المنفذ المستخدم |
container_id | VARCHAR(100) | – | معرف الحاوية (Docker) |
replicas | INTEGER | DEFAULT 1 | عدد النسخ العاملة |
status | VARCHAR(20) | NOT NULL | حالة المثيل (running, stopped, failed) |
last_deployed_at | TIMESTAMP | – | تاريخ آخر نشر |
created_at | TIMESTAMP | NOT NULL, DEFAULT CURRENT_TIMESTAMP | تاريخ الإنشاء |
updated_at | TIMESTAMP | NOT NULL, DEFAULT CURRENT_TIMESTAMP | تاريخ آخر تحديث |
العلاقات:
service_instances(N) — (1)servicesservice_instances(N) — (1)servers
24.4 deployments
سجل عمليات النشر.
| العمود | النوع | القيد | الوصف |
|---|---|---|---|
deployment_id | UUID | PRIMARY KEY | المعرف الفريد |
service_id | UUID | FOREIGN KEY (service_id) | الخدمة المنشورة |
deployed_by | UUID | FOREIGN KEY (deployed_by) | المستخدم المنفذ للنشر |
version | VARCHAR(20) | NOT NULL | الإصدار المنشور |
strategy | VARCHAR(30) | NOT NULL | استراتيجية النشر (canary, blue_green, rolling) |
status | VARCHAR(20) | NOT NULL | حالة النشر (success, failed, rollback) |
commit_hash | VARCHAR(40) | – | هاش الكوميت في Git |
ci_pipeline_url | TEXT | – | رابط خط أنابيب CI |
duration_seconds | INTEGER | – | مدة النشر (بالثواني) |
health_check_passed | BOOLEAN | – | هل اجتاز الفحص الصحي؟ |
notes | TEXT | – | ملاحظات إضافية |
deployed_at | TIMESTAMP | NOT NULL, DEFAULT CURRENT_TIMESTAMP | تاريخ النشر |
العلاقات:
deployments(N) — (1)servicesdeployments(N) — (1)users(كمنفذ)
📦 المجموعة الجديدة: نظام الحوكمة والتصويت (Governance & Voting)
25.1 governance_proposals
مقترحات الحوكمة الذاتية.
| العمود | النوع | القيد | الوصف |
|---|---|---|---|
proposal_id | UUID | PRIMARY KEY | المعرف الفريد |
tenant_id | UUID | FOREIGN KEY (tenant_id) | المستأجر المعني (أو NULL للعمومي) |
proposed_by | UUID | FOREIGN KEY (proposed_by) | المستخدم مقدم الاقتراح |
title | VARCHAR(255) | NOT NULL | عنوان الاقتراح |
description | TEXT | NOT NULL | وصف الاقتراح |
category | VARCHAR(50) | NOT NULL | تصنيف الاقتراح (feature, policy, governance, budget) |
status | VARCHAR(20) | NOT NULL | حالة الاقتراح (draft, reviewing, voting, approved, rejected, implemented) |
voting_start_date | TIMESTAMP | – | تاريخ بدء التصويت |
voting_end_date | TIMESTAMP | – | تاريخ انتهاء التصويت |
quorum | INTEGER | – | النصاب المطلوب |
approval_percentage | DECIMAL(5,2) | – | نسبة الموافقة المطلوبة |
result | VARCHAR(20) | – | نتيجة التصويت (approved, rejected) |
implemented_at | TIMESTAMP | – | تاريخ التنفيذ |
created_at | TIMESTAMP | NOT NULL, DEFAULT CURRENT_TIMESTAMP | تاريخ الإنشاء |
updated_at | TIMESTAMP | NOT NULL, DEFAULT CURRENT_TIMESTAMP | تاريخ آخر تحديث |
العلاقات:
governance_proposals(N) — (1)tenantsgovernance_proposals(N) — (1)users(كمقدم)
25.2 votes
أصوات المستخدمين على المقترحات.
| العمود | النوع | القيد | الوصف |
|---|---|---|---|
vote_id | UUID | PRIMARY KEY | المعرف الفريد |
proposal_id | UUID | FOREIGN KEY (proposal_id) | الاقتراح المرتبط |
user_id | UUID | FOREIGN KEY (user_id) | المستخدم المصوت |
voting_power | DECIMAL(5,2) | DEFAULT 1.0 | قوة التصويت (مرجحة حسب المشاركة) |
choice | VARCHAR(10) | NOT NULL | الاختيار (yes, no, abstain) |
comment | TEXT | – | تعليق إضافي |
voted_at | TIMESTAMP | NOT NULL, DEFAULT CURRENT_TIMESTAMP | تاريخ التصويت |
العلاقات:
votes(N) — (1)governance_proposalsvotes(N) — (1)users
25.3 governance_delegations
تفويض التصويت لمستخدم آخر.
| العمود | النوع | القيد | الوصف |
|---|---|---|---|
delegation_id | UUID | PRIMARY KEY | المعرف الفريد |
proposal_id | UUID | FOREIGN KEY (proposal_id) | الاقتراح المرتبط (أو NULL للتفويض العام) |
delegator_id | UUID | FOREIGN KEY (delegator_id) | المفوض (الذي يمنح الصلاحية) |
delegate_id | UUID | FOREIGN KEY (delegate_id) | المفوض إليه (الذي يحصل على الصلاحية) |
scope | VARCHAR(50) | NOT NULL | نطاق التفويض (all, specific_category) |
is_active | BOOLEAN | NOT NULL, DEFAULT true | هل التفويض فعال؟ |
expires_at | TIMESTAMP | – | تاريخ انتهاء التفويض |
created_at | TIMESTAMP | NOT NULL, DEFAULT CURRENT_TIMESTAMP | تاريخ الإنشاء |
العلاقات:
governance_delegations(N) — (1)governance_proposalsgovernance_delegations(N) — (1)users(كمفوض)governance_delegations(N) — (1)users(كمفوض إليه)
📦 المجموعة الجديدة: إدارة النماذج والاستبيانات (Forms & Surveys)
26.1 forms
النماذج والاستبيانات.
| العمود | النوع | القيد | الوصف |
|---|---|---|---|
form_id | UUID | PRIMARY KEY | المعرف الفريد |
tenant_id | UUID | FOREIGN KEY (tenant_id) | المستأجر صاحب النموذج |
created_by | UUID | FOREIGN KEY (created_by) | المستخدم المنشئ |
title | VARCHAR(255) | NOT NULL | عنوان النموذج |
description | TEXT | – | وصف النموذج |
purpose | VARCHAR(50) | NOT NULL | الغرض من النموذج (survey, feedback, application, evaluation) |
status | VARCHAR(20) | NOT NULL | حالة النموذج (draft, published, closed) |
is_public | BOOLEAN | DEFAULT false | هل النموذج عام؟ |
start_date | DATE | – | تاريخ بدء الفتح |
end_date | DATE | – | تاريخ إغلاق النموذج |
max_responses | INTEGER | – | الحد الأقصى للردود |
settings | JSONB | – | إعدادات إضافية (إشعارات، صلاحيات) |
created_at | TIMESTAMP | NOT NULL, DEFAULT CURRENT_TIMESTAMP | تاريخ الإنشاء |
updated_at | TIMESTAMP | NOT NULL, DEFAULT CURRENT_TIMESTAMP | تاريخ آخر تحديث |
العلاقات:
forms(N) — (1)tenantsforms(N) — (1)users(كمنشئ)
26.2 form_fields
حقول النماذج.
| العمود | النوع | القيد | الوصف |
|---|---|---|---|
field_id | UUID | PRIMARY KEY | المعرف الفريد |
form_id | UUID | FOREIGN KEY (form_id) | النموذج المرتبط |
field_order | INTEGER | NOT NULL | ترتيب الحقل |
label | VARCHAR(255) | NOT NULL | تسمية الحقل |
field_type | VARCHAR(30) | NOT NULL | نوع الحقل (text, number, email, select, checkbox, radio, textarea) |
is_required | BOOLEAN | DEFAULT false | هل الحقل مطلوب؟ |
options | JSONB | – | خيارات (للـ select, checkbox, radio) |
validation_rules | JSONB | – | قواعد التحقق (min, max, regex) |
help_text | TEXT | – | نص مساعد |
default_value | TEXT | – | قيمة افتراضية |
created_at | TIMESTAMP | NOT NULL, DEFAULT CURRENT_TIMESTAMP | تاريخ الإنشاء |
updated_at | TIMESTAMP | NOT NULL, DEFAULT CURRENT_TIMESTAMP | تاريخ آخر تحديث |
العلاقات:
form_fields(N) — (1)forms
26.3 form_responses
ردود النماذج.
| العمود | النوع | القيد | الوصف |
|---|---|---|---|
response_id | UUID | PRIMARY KEY | المعرف الفريد |
form_id | UUID | FOREIGN KEY (form_id) | النموذج المرتبط |
user_id | UUID | FOREIGN KEY (user_id) | المستخدم المقدم (أو NULL للمجهول) |
submitted_at | TIMESTAMP | NOT NULL, DEFAULT CURRENT_TIMESTAMP | تاريخ التقديم |
ip_address | INET | – | عنوان IP عند التقديم |
user_agent | TEXT | – | متصفح/جهاز المستخدم |
العلاقات:
form_responses(N) — (1)formsform_responses(N) — (1)users
26.4 form_response_values
قيم حقول النماذج المقدمة.
| العمود | النوع | القيد | الوصف |
|---|---|---|---|
value_id | UUID | PRIMARY KEY | المعرف الفريد |
response_id | UUID | FOREIGN KEY (response_id) | الرد المرتبط |
field_id | UUID | FOREIGN KEY (field_id) | الحقل المرتبط |
value | TEXT | NOT NULL | القيمة المقدمة (كنص، وتُحول حسب نوع الحقل) |
created_at | TIMESTAMP | NOT NULL, DEFAULT CURRENT_TIMESTAMP | تاريخ الإنشاء |
العلاقات:
form_response_values(N) — (1)form_responsesform_response_values(N) — (1)form_fields
📦 المجموعة الجديدة: نظام مراقبة الجودة (Quality Assurance)
27.1 quality_checks
فحوصات الجودة الدورية.
| العمود | النوع | القيد | الوصف |
|---|---|---|---|
check_id | UUID | PRIMARY KEY | المعرف الفريد |
tenant_id | UUID | FOREIGN KEY (tenant_id) | المستأجر المعني (أو NULL للفحوصات العامة) |
name | VARCHAR(100) | NOT NULL | اسم الفحص |
description | TEXT | – | وصف الفحص |
category | VARCHAR(50) | NOT NULL | تصنيف الفحص (security, performance, compliance, code_quality) |
check_type | VARCHAR(30) | NOT NULL | نوع الفحص (automated, manual, scheduled) |
criteria | JSONB | – | معايير النجاح |
frequency | VARCHAR(20) | – | التكرار (daily, weekly, monthly) |
is_active | BOOLEAN | NOT NULL, DEFAULT true | هل الفحص مفعل؟ |
created_at | TIMESTAMP | NOT NULL, DEFAULT CURRENT_TIMESTAMP | تاريخ الإنشاء |
updated_at | TIMESTAMP | NOT NULL, DEFAULT CURRENT_TIMESTAMP | تاريخ آخر تحديث |
العلاقات:
quality_checks(N) — (1)tenants
27.2 quality_results
نتائج فحوصات الجودة.
| العمود | النوع | القيد | الوصف |
|---|---|---|---|
result_id | UUID | PRIMARY KEY | المعرف الفريد |
check_id | UUID | FOREIGN KEY (check_id) | الفحص المرتبط |
performed_by | UUID | FOREIGN KEY (performed_by) | المستخدم المنفذ (أو NULL للتلقائي) |
status | VARCHAR(20) | NOT NULL | حالة النتيجة (passed, failed, warning) |
score | DECIMAL(5,2) | – | درجة النتيجة (0-100) |
details | JSONB | – | تفاصيل النتيجة (الأخطاء، التحذيرات) |
performed_at | TIMESTAMP | NOT NULL, DEFAULT CURRENT_TIMESTAMP | تاريخ التنفيذ |
العلاقات:
quality_results(N) — (1)quality_checksquality_results(N) — (1)users(كمنفذ)
27.3 quality_issues
مشاكل الجودة المكتشفة.
| العمود | النوع | القيد | الوصف |
|---|---|---|---|
issue_id | UUID | PRIMARY KEY | المعرف الفريد |
result_id | UUID | FOREIGN KEY (result_id) | النتيجة المرتبطة |
assigned_to | UUID | FOREIGN KEY (assigned_to) | المستخدم المسند إليه المشكلة |
title | VARCHAR(255) | NOT NULL | عنوان المشكلة |
description | TEXT | NOT NULL | وصف المشكلة |
severity | VARCHAR(20) | NOT NULL | درجة الخطورة (critical, high, medium, low) |
status | VARCHAR(20) | NOT NULL | حالة المشكلة (open, in_progress, resolved, closed) |
resolution | TEXT | – | كيفية الحل |
resolved_at | TIMESTAMP | – | تاريخ الحل |
created_at | TIMESTAMP | NOT NULL, DEFAULT CURRENT_TIMESTAMP | تاريخ الإنشاء |
updated_at | TIMESTAMP | NOT NULL, DEFAULT CURRENT_TIMESTAMP | تاريخ آخر تحديث |
العلاقات:
quality_issues(N) — (1)quality_resultsquality_issues(N) — (1)users(كمسند إليه)
📦 المجموعة الجديدة: إدارة الشراكات والموردين (Partnerships & Vendors)
28.1 partners
الشركاء والموردون.
| العمود | النوع | القيد | الوصف |
|---|---|---|---|
partner_id | UUID | PRIMARY KEY | المعرف الفريد |
tenant_id | UUID | FOREIGN KEY (tenant_id) | المستأجر صاحب الشراكة |
name | VARCHAR(255) | NOT NULL | اسم الشريك |
type | VARCHAR(30) | NOT NULL | نوع الشريك (vendor, reseller, affiliate, technology) |
contact_name | VARCHAR(255) | – | اسم جهة الاتصال |
email | VARCHAR(255) | – | البريد الإلكتروني |
phone | VARCHAR(20) | – | رقم الهاتف |
website | VARCHAR(255) | – | الموقع الإلكتروني |
tax_number | VARCHAR(100) | – | الرقم الضريبي |
status | VARCHAR(20) | NOT NULL | حالة الشريك (active, inactive, pending) |
tier | VARCHAR(20) | – | مستوى الشريك (gold, silver, bronze) |
notes | TEXT | – | ملاحظات إضافية |
created_at | TIMESTAMP | NOT NULL, DEFAULT CURRENT_TIMESTAMP | تاريخ الإنشاء |
updated_at | TIMESTAMP | NOT NULL, DEFAULT CURRENT_TIMESTAMP | تاريخ آخر تحديث |
العلاقات:
partners(N) — (1)tenants
28.2 partner_agreements
اتفاقيات الشراكة.
| العمود | النوع | القيد | الوصف |
|---|---|---|---|
agreement_id | UUID | PRIMARY KEY | المعرف الفريد |
partner_id | UUID | FOREIGN KEY (partner_id) | الشريك المرتبط |
contract_id | UUID | FOREIGN KEY (contract_id) | العقد المرتبط |
commission_rate | DECIMAL(5,2) | – | نسبة العمولة |
referral_fee | DECIMAL(10,2) | – | رسوم الإحالة |
exclusive | BOOLEAN | DEFAULT false | هل الشراكة حصرية؟ |
territory | JSONB | – | المنطقة الجغرافية للشراكة |
start_date | DATE | NOT NULL | تاريخ البداية |
end_date | DATE | – | تاريخ النهاية |
created_at | TIMESTAMP | NOT NULL, DEFAULT CURRENT_TIMESTAMP | تاريخ الإنشاء |
updated_at | TIMESTAMP | NOT NULL, DEFAULT CURRENT_TIMESTAMP | تاريخ آخر تحديث |
العلاقات:
partner_agreements(N) — (1)partnerspartner_agreements(N) — (1)contracts
28.3 partner_transactions
المعاملات المالية مع الشركاء.
| العمود | النوع | القيد | الوصف |
|---|---|---|---|
transaction_id | UUID | PRIMARY KEY | المعرف الفريد |
partner_id | UUID | FOREIGN KEY (partner_id) | الشريك المعني |
agreement_id | UUID | FOREIGN KEY (agreement_id) | اتفاقية الشراكة |
type | VARCHAR(30) | NOT NULL | نوع المعاملة (commission, referral_fee, invoice_payment) |
amount | DECIMAL(10,2) | NOT NULL | المبلغ |
currency | CHAR(3) | DEFAULT 'USD' | العملة |
description | TEXT | – | وصف المعاملة |
status | VARCHAR(20) | NOT NULL | حالة المعاملة (pending, paid, failed) |
reference_id | UUID | – | معرف المرجع (مثل معرف الطلب) |
paid_at | TIMESTAMP | – | تاريخ الدفع |
created_at | TIMESTAMP | NOT NULL, DEFAULT CURRENT_TIMESTAMP | تاريخ الإنشاء |
العلاقات:
partner_transactions(N) — (1)partnerspartner_transactions(N) — (1)partner_agreements
📦 المجموعة الجديدة: النظام المالي المتقدم (Advanced Finance)
29.1 chart_of_accounts
دليل الحسابات المحاسبي.
| العمود | النوع | القيد | الوصف |
|---|---|---|---|
account_id | UUID | PRIMARY KEY | المعرف الفريد |
tenant_id | UUID | FOREIGN KEY (tenant_id) | المستأجر صاحب الحساب |
account_code | VARCHAR(20) | NOT NULL | كود الحساب |
account_name | VARCHAR(255) | NOT NULL | اسم الحساب |
account_type | VARCHAR(30) | NOT NULL | نوع الحساب (asset, liability, equity, revenue, expense) |
parent_account_id | UUID | FOREIGN KEY (parent_account_id) | الحساب الأب (للتسلسل الهرمي) |
is_active | BOOLEAN | NOT NULL, DEFAULT true | هل الحساب مفعل؟ |
created_at | TIMESTAMP | NOT NULL, DEFAULT CURRENT_TIMESTAMP | تاريخ الإنشاء |
updated_at | TIMESTAMP | NOT NULL, DEFAULT CURRENT_TIMESTAMP | تاريخ آخر تحديث |
العلاقات:
chart_of_accounts(N) — (1)tenantschart_of_accounts(N) — (1)chart_of_accounts(كأب)
29.2 journal_entries
قيد اليومية المحاسبي.
| العمود | النوع | القيد | الوصف |
|---|---|---|---|
entry_id | UUID | PRIMARY KEY | المعرف الفريد |
tenant_id | UUID | FOREIGN KEY (tenant_id) | المستأجر المعني |
journal_number | VARCHAR(50) | UNIQUE, NOT NULL | رقم القيد |
description | TEXT | – | وصف القيد |
reference_type | VARCHAR(50) | – | نوع المرجع (invoice, payment, expense) |
reference_id | UUID | – | معرف المرجع |
posting_date | DATE | NOT NULL | تاريخ الترحيل |
status | VARCHAR(20) | NOT NULL | حالة القيد (draft, posted, reversed) |
created_by | UUID | FOREIGN KEY (created_by) | المستخدم المنشئ |
created_at | TIMESTAMP | NOT NULL, DEFAULT CURRENT_TIMESTAMP | تاريخ الإنشاء |
updated_at | TIMESTAMP | NOT NULL, DEFAULT CURRENT_TIMESTAMP | تاريخ آخر تحديث |
العلاقات:
journal_entries(N) — (1)tenantsjournal_entries(N) — (1)users(كمنشئ)
29.3 journal_lines
تفاصيل قيد اليومية (حركات المدين والدائن).
| العمود | النوع | القيد | الوصف |
|---|---|---|---|
line_id | UUID | PRIMARY KEY | المعرف الفريد |
entry_id | UUID | FOREIGN KEY (entry_id) | القيد المرتبط |
account_id | UUID | FOREIGN KEY (account_id) | الحساب المعني |
debit | DECIMAL(12,2) | DEFAULT 0 | مبلغ المدين |
credit | DECIMAL(12,2) | DEFAULT 0 | مبلغ الدائن |
currency | CHAR(3) | DEFAULT 'USD' | العملة |
description | TEXT | – | وصف الحركة |
created_at | TIMESTAMP | NOT NULL, DEFAULT CURRENT_TIMESTAMP | تاريخ الإنشاء |
العلاقات:
journal_lines(N) — (1)journal_entriesjournal_lines(N) — (1)chart_of_accounts
29.4 budgets
الميزانيات المخططة.
| العمود | النوع | القيد | الوصف |
|---|---|---|---|
budget_id | UUID | PRIMARY KEY | المعرف الفريد |
tenant_id | UUID | FOREIGN KEY (tenant_id) | المستأجر صاحب الميزانية |
account_id | UUID | FOREIGN KEY (account_id) | الحساب المعني |
fiscal_year | INTEGER | NOT NULL | السنة المالية |
period | VARCHAR(20) | NOT NULL | الفترة (monthly, quarterly, yearly) |
amount | DECIMAL(12,2) | NOT NULL | المبلغ المخطط |
actual_amount | DECIMAL(12,2) | DEFAULT 0 | المبلغ الفعلي |
currency | CHAR(3) | DEFAULT 'USD' | العملة |
created_at | TIMESTAMP | NOT NULL, DEFAULT CURRENT_TIMESTAMP | تاريخ الإنشاء |
updated_at | TIMESTAMP | NOT NULL, DEFAULT CURRENT_TIMESTAMP | تاريخ آخر تحديث |
العلاقات:
budgets(N) — (1)tenantsbudgets(N) — (1)chart_of_accounts
29.5 expense_reports
تقارير المصروفات.
| العمود | النوع | القيد | الوصف |
|---|---|---|---|
expense_id | UUID | PRIMARY KEY | المعرف الفريد |
tenant_id | UUID | FOREIGN KEY (tenant_id) | المستأجر المعني |
submitted_by | UUID | FOREIGN KEY (submitted_by) | المستخدم مقدم التقرير |
approved_by | UUID | FOREIGN KEY (approved_by) | المستخدم المعتمد |
title | VARCHAR(255) | NOT NULL | عنوان التقرير |
description | TEXT | – | وصف المصروفات |
total_amount | DECIMAL(12,2) | NOT NULL | المبلغ الإجمالي |
currency | CHAR(3) | DEFAULT 'USD' | العملة |
status | VARCHAR(20) | NOT NULL | حالة التقرير (draft, pending, approved, rejected, paid) |
expense_date | DATE | NOT NULL | تاريخ المصروف |
submitted_at | TIMESTAMP | NOT NULL, DEFAULT CURRENT_TIMESTAMP | تاريخ التقديم |
approved_at | TIMESTAMP | – | تاريخ الاعتماد |
paid_at | TIMESTAMP | – | تاريخ الدفع |
created_at | TIMESTAMP | NOT NULL, DEFAULT CURRENT_TIMESTAMP | تاريخ الإنشاء |
updated_at | TIMESTAMP | NOT NULL, DEFAULT CURRENT_TIMESTAMP | تاريخ آخر تحديث |
العلاقات:
expense_reports(N) — (1)tenantsexpense_reports(N) — (1)users(كمقدم)expense_reports(N) — (1)users(كمعتمد)
29.6 expense_items
تفاصيل بنود المصروفات.
| العمود | النوع | القيد | الوصف |
|---|---|---|---|
item_id | UUID | PRIMARY KEY | المعرف الفريد |
expense_id | UUID | FOREIGN KEY (expense_id) | تقرير المصروفات المرتبط |
account_id | UUID | FOREIGN KEY (account_id) | الحساب المحاسبي |
description | TEXT | NOT NULL | وصف البند |
amount | DECIMAL(12,2) | NOT NULL | المبلغ |
currency | CHAR(3) | DEFAULT 'USD' | العملة |
quantity | INTEGER | DEFAULT 1 | الكمية |
unit_price | DECIMAL(10,2) | – | سعر الوحدة |
receipt_url | TEXT | – | رابط إيصال الصرف |
created_at | TIMESTAMP | NOT NULL, DEFAULT CURRENT_TIMESTAMP | تاريخ الإنشاء |
العلاقات:
expense_items(N) — (1)expense_reportsexpense_items(N) — (1)chart_of_accounts
📦 المجموعة الجديدة: التكامل مع الأنظمة الخارجية (External Integrations)
30.1 external_systems
الأنظمة الخارجية المتكاملة.
| العمود | النوع | القيد | الوصف |
|---|---|---|---|
system_id | UUID | PRIMARY KEY | المعرف الفريد |
tenant_id | UUID | FOREIGN KEY (tenant_id) | المستأجر صاحب التكامل |
name | VARCHAR(100) | NOT NULL | اسم النظام الخارجي |
provider | VARCHAR(50) | NOT NULL | المزود (stripe, salesforce, hubspot, sap) |
api_base_url | TEXT | NOT NULL | رابط الـ API الأساسي |
auth_type | VARCHAR(30) | NOT NULL | نوع المصادقة (oauth2, api_key, basic) |
auth_config | JSONB | – | إعدادات المصادقة (مشفراً) |
status | VARCHAR(20) | NOT NULL | حالة التكامل (active, inactive, error) |
sync_frequency | VARCHAR(20) | – | تواتر المزامنة (real_time, hourly, daily) |
last_sync_at | TIMESTAMP | – | تاريخ آخر مزامنة |
created_at | TIMESTAMP | NOT NULL, DEFAULT CURRENT_TIMESTAMP | تاريخ الإنشاء |
updated_at | TIMESTAMP | NOT NULL, DEFAULT CURRENT_TIMESTAMP | تاريخ آخر تحديث |
العلاقات:
external_systems(N) — (1)tenants
30.2 sync_jobs
وظائف المزامنة مع الأنظمة الخارجية.
| العمود | النوع | القيد | الوصف |
|---|---|---|---|
job_id | UUID | PRIMARY KEY | المعرف الفريد |
system_id | UUID | FOREIGN KEY (system_id) | النظام المرتبط |
direction | VARCHAR(20) | NOT NULL | اتجاه المزامنة (inbound, outbound) |
entity_type | VARCHAR(50) | NOT NULL | نوع الكيان (users, products, orders, invoices) |
status | VARCHAR(20) | NOT NULL | حالة المزامنة (pending, running, success, failed) |
records_processed | INTEGER | DEFAULT 0 | عدد السجلات المعالجة |
records_successful | INTEGER | DEFAULT 0 | عدد السجلات الناجحة |
records_failed | INTEGER | DEFAULT 0 | عدد السجلات الفاشلة |
error_log | JSONB | – | سجل الأخطاء التفصيلي |
started_at | TIMESTAMP | – | تاريخ البدء |
completed_at | TIMESTAMP | – | تاريخ الانتهاء |
created_at | TIMESTAMP | NOT NULL, DEFAULT CURRENT_TIMESTAMP | تاريخ الإنشاء |
العلاقات:
sync_jobs(N) — (1)external_systems
30.3 api_rate_limits
معدلات استخدام API.
| العمود | النوع | القيد | الوصف |
|---|---|---|---|
limit_id | UUID | PRIMARY KEY | المعرف الفريد |
tenant_id | UUID | FOREIGN KEY (tenant_id) | المستأجر المعني |
api_key_id | UUID | FOREIGN KEY (api_key_id) | مفتاح API المرتبط |
endpoint | VARCHAR(255) | NOT NULL | نقطة النهاية (endpoint) |
requests_count | INTEGER | NOT NULL, DEFAULT 0 | عدد الطلبات في الفترة الحالية |
limit_per_period | INTEGER | NOT NULL | الحد الأقصى لكل فترة |
period_minutes | INTEGER | NOT NULL, DEFAULT 60 | مدة الفترة (بالدقائق) |
reset_at | TIMESTAMP | NOT NULL | وقت إعادة تعيين العداد |
created_at | TIMESTAMP | NOT NULL, DEFAULT CURRENT_TIMESTAMP | تاريخ الإنشاء |
updated_at | TIMESTAMP | NOT NULL, DEFAULT CURRENT_TIMESTAMP | تاريخ آخر تحديث |
العلاقات:
api_rate_limits(N) — (1)tenantsapi_rate_limits(N) — (1)api_keys
📊 ملخص الجداول الجديدة المضافة في هذه التوسعة
| المجموعة | عدد الجداول الجديدة | الأرقام التسلسلية |
|---|---|---|
| إدارة الفرق والتعاون (Teams & Collaboration) | 3 | 20.1 – 20.3 |
| نظام المكافآت والحوافز (Rewards & Incentives) | 3 | 21.1 – 21.3 |
| إدارة العقود والاتفاقيات (Contracts & Agreements) | 2 | 22.1 – 22.2 |
| نظام التوصيات الذكي (Recommendation Engine) | 4 | 23.1 – 23.4 |
| إدارة البنية التحتية والتطبيقات (Infrastructure & Apps) | 4 | 24.1 – 24.4 |
| نظام الحوكمة والتصويت (Governance & Voting) | 3 | 25.1 – 25.3 |
| إدارة النماذج والاستبيانات (Forms & Surveys) | 4 | 26.1 – 26.4 |
| نظام مراقبة الجودة (Quality Assurance) | 3 | 27.1 – 27.3 |
| إدارة الشراكات والموردين (Partnerships & Vendors) | 3 | 28.1 – 28.3 |
| النظام المالي المتقدم (Advanced Finance) | 6 | 29.1 – 29.6 |
| التكامل مع الأنظمة الخارجية (External Integrations) | 3 | 30.1 – 30.3 |
| المجموع الكلي للجداول الجديدة | 38 جدولاً | – |
🎯 العدد النهائي للجداول
| المرحلة | عدد الجداول |
|---|---|
| القاعدة الأساسية (الجزء الأول) | 22 جدولاً |
| التوسعة الأولى (الجزء الثاني) | 31 جدولاً |
| التوسعة المتقدمة (الجزء الثالث – هذه التوسعة) | 38 جدولاً |
| المجموع الكلي | 91 جدولاً |
🧩 العلاقات الشاملة بين جميع المجموعات
💡 توصيات تنفيذية إضافية
1. استراتيجية التقسيم (Partitioning)
قم بتقسيم الجداول التالية حسب التاريخ لتحسين الأداء:
user_eventsaudit_logsuser_behaviorquality_resultssync_jobsform_responses
2. استراتيجية الأرشفة (Archiving)
أنشئ جداول أرشيفية للبيانات الأقدم من:
- 6 أشهر:
user_events,user_behavior - سنة واحدة:
audit_logs,quality_results - سنتان:
journal_entries,partner_transactions
3. الفهارس الموصى بها (Indexes)
أضف فهارس مركبة على:
(tenant_id, status, created_at)للجداول التي تُصفى كثيراً(user_id, behavior_type, created_at)لتحليل السلوك(proposal_id, user_id)للتصويت(partner_id, agreement_id)للشراكات
4. استخدام JSONB بشكل فعال
استخدم JSONB لتخزين:
- الإعدادات الديناميكية (
settings,preferences) - البيانات غير المنتظمة (
metadata,extra_data) - سجلات التغيير (
old_values,new_values) - معايير الفحوصات (
criteria,parameters)
5. الأمان على مستوى الصف (RLS)
طبّق Row Level Security في PostgreSQL لعزل البيانات بين المستأجرين على جميع الجداول التي تحتوي على tenant_id.
هذا النموذج الآن يغطي جميع جوانب منصة SaaS المتكاملة من الناحية التشغيلية والإدارية والتقنية والمالية، مع إمكانية التوسع المستقبلي حسب احتياجات العمل. 🚀