08 · DATABASE الداتابيز

تصميم الداتابيز — جدول جدول

الداتابيز متقسمة 12 مجموعة على حسب البيزنس. كل مجموعة ليها شرح وجداولها بالأعمدة والأنواع والملاحظات، وزرار موافقة. افتح أي جدول عشان تشوف أعمدته، أو دوّر على اسم جدول أو عمود.

SQL ServerEF Core 10 + هجرات من أول يوم— جدول— عمود12 مجموعة
01

القواعد العامة لكل الجداول

الحاجات دي موجودة في كل جدول ومش بتتكرر في الشرح تحت.

الأعمدة الأساسية

كل جدول فيه: Id (Guid v7 مرتب زمنياً)، CreatedAt، CreatedBy، LastModifiedAt، LastModifiedBy. الجداول الإلحاقية (الحركات، السجلات) bigint متسلسل وماليهاش تعديل.

الحذف

حذف ناعم (IsDeleted، DeletedAt، DeletedBy) بفلتر عام + صفحة «المحذوفات» للاسترجاع. الجداول الإلحاقية والمالية ماتتحذفش أصلاً.

اللغتين — عربي وإنجليزي

اللوحة والموقع والتطبيق بلغتين. كل نص بيظهر للعميل من نوع LocalizedText = عمود JSON فيه {ar, en}، بما فيه الألوان والمقاسات والروابط وSEO. لغة واحدة على الأقل إجبارية والناقصة بترجع للتانية (المنتجات الحالية إنجليزي بس — تعارض C16). العميل ليه PreferredLanguage لرسايله.

الفلوس والكميات

الأسعار decimal(12,2)، والتكلفة decimal(12,4) (كسور قسمة الشحنة)، والكميات int بالقطعة دايماً — الدستة مجرد «حجم عبوة» للعرض والاستلام.

التزامن

RowVersion على الأرصدة والطلبات والتحويلات عشان تعديلين في نفس اللحظة مايبوظوش بعض.

اللقطة (Snapshot)

الطلب بيحفظ نسخة من السعر والعنوان والتكلفة وقت الطلب — لو السعر اتغير بعدين، الطلب القديم مايتأثرش.

02

خريطة المجموعات

كل لون = مجموعة. المجموعات اللي في النص (الكتالوج، المخزون، الطلبات) هي القلب، والباقي بيتعلق بيهم.

03

أهم العلاقات

الخيوط اللي بتربط النظام ببعضه.

منالعلاقةإلىالمعنى
Products1 ← NProductVariantsالمنتج بكوده، والمتغير (لون/مقاس) بالـ SKU والباركود — المخزون والسعر على المتغير
ProductVariants1 ← NStockBalancesرصيد لكل (متغير × مخزن × مكان)
StockBalancesمحسوب منStockMovementsكل تغيير في الرصيد ليه حركة بمستند
StockMovementsN ← 1أي مستندDocType + DocId: إذن استلام، تحويل، دفعة فحص، تالف، طلب، مرتجع، جرد
CodeRangesN ← 1CodePrefixesالنطاق المحجوز جوه بادئة؛ إنشاء منتج بكود جوه نطاق مقفول مرفوض
PurchaseOrderLinesN ← 1ProductVariantsالمنتج المتكوّد بدري من الصين بيدخل الإذن بكميته المتوقعة
GoodsReceiptsN ← 1Shipments / PurchaseOrdersالاستلام بيسوّي الإذن ويحسب التكلفة الحقيقية
QcBatchesN ← 1Transfersدفعة الفحص بتبدأ من تحويل وصل لمخزن «انتظار الفحص» للبراند
Orders1 ← NOrderLines ← OrderLineUnitPhotosصور لكل قطعة جوه السطر
OrderLines1 ← 1StockReservationsالحجز من وقت الطلب، والاستهلاك عند التقفيل
OrdersN ← NHandoverBatchesالطلب بيتسكان في دفعة تسليم، والدفعة ليها مطابقة
Customers1 ← 0..1MerchantProfilesحساب التاجر = عميل نوعه «تاجر» + ملف فيه Prime ورقم العلامة المائية
CustomersN ← 0..1VipLevelsالمستوى بيتحسب من عدد الطلبات المستلمة
Orders1 ← NOrderAdjustmentsتفصيل الخصومات: عرض، كوبون، نقاط، يدوي
04

القوائم الثابتة (Enums)

دي منطق النظام نفسه — مش من اللوحة. النصوص اللي بتظهر للمستخدم بس هي اللي بتتعدّل.

القائمةالقيم
05

الجداول

الأعمدة بالبرتقالي = مفاتيح أو أعمدة فريدة. افتح أي جدول للتفاصيل.

مفيش نتايج للبحث ده.
06

الفهارس والأداء

الاستعلامات اللي بتتكرر طول اليوم لازم تبقى سريعة.

الاستعلامالفهرس
قوائم التجهيز (قسم + حالة + لمبة + عاجل + تاريخ)Orders(Status, Section, IsUrgent DESC, AttentionLevel DESC, CreatedAt)
السكان بالباركودProductVariants(Barcode) فريد · Orders(Number) فريد
المتاح للموقعStockBalances(VariantId, WarehouseId) + عمود محسوب Available
كتالوج الموقعProducts(Status, RetailVisible, CategoryId) · Products(WholesaleVisible, PrimeOnly)
تنبيهات الـ 24 ساعةOrders(Status, ConfirmedAt) · Orders(Status, PreparingAt)
سجل حركات صنفStockMovements(VariantId, At DESC)
طابور الرسائلOutboundMessages(Status, ScheduledAt)
منع تكرار ردود الواتسابInboundMessages(ProviderMessageId) فريد
التقارير التقيلة

المبيعات والربح والتالف لكل براند وموظف بتتعمل بـ Dapper واستعلامات مكتوبة، ومع كاش 5 دقايق للفترات الطويلة — من غير ما تتقل على شاشات التشغيل.

07

الموافقة على الداتابيز

فيه زرار موافقة تحت كل مجموعة، والزرار ده للتصميم كله.