لون التمييز

تصميم مخطط قاعدة بيانات نظام POS

الجداول الأساسية: المنتجات والفئات

جدول products هو الأساس. تتضمن الحقول product_id (PK)، sku (وحدة حفظ المخزون الفريدة)، barcode، product_name، description، category_id (FK)، brand، unit_price، cost_price، tax_rate، unit_type (قطعة/كجم/لتر)، is_active، وimage_url. ينظم جدول categories المنتجات هرمياً: category_id (PK)، name، parent_category_id (FK مرجعي ذاتي للفئات الفرعية)، وsort_order. شجرة فئات مصممة جيداً تدعم التقارير القسمية.

المخزون وإدارة المخزون

يتتبع جدول inventory مستويات المخزون عبر مواقع متعددة: inventory_id (PK)، product_id (FK)، store_id (FK)، quantity_on_hand، quantity_committed (محجوز للطلبات المفتوحة)، reorder_point، reorder_quantity، وlast_count_date. يسجل جدول stock_movements كل تغيير في المخزون: movement_id (PK)، product_id (FK)، store_id (FK)، movement_type (استلام/بيع/إرجاع/تعديل/نقل)، quantity، reference_document، movement_date، وperformed_by. هذا الدليل ضروري لتحديد الفروقات أثناء العد الفعلي للمخزون.

مخطط معاملات المبيعات

يتبع مخطط المبيعات نمط الترويسة-التفاصيل. يسجل جدول sales_orders (الترويسة): order_id (PK)، store_id (FK)، customer_id (FK)، employee_id (FK — أمين الصندوق)، order_date، order_time، subtotal، discount_total، tax_total، grand_total، payment_status، وorder_status. يلتقط جدول sales_order_items (التفاصيل) كل سطر: order_item_id (PK)، order_id (FK)، product_id (FK)، quantity، unit_price_at_sale، discount_percent، line_total، وreturned_quantity. تخزين unit_price_at_sale أمر حاسم لأن أسعار المنتجات تتغير مع مرور الوقت.

معالجة المدفوعات

يتعامل جدول payments مع أنواع دفع متعددة لكل معاملة: payment_id (PK)، order_id (FK)، payment_method (نقدي/بطاقة/UPI/ائتمان/قسيمة)، payment_amount، reference_number (للمعاملات بالبطاقة/UPI)، payment_date، وis_verified. للمدفوعات المنقسمة، تتصل صفوف متعددة بنفس order_id. يدير جدول registers منفصل عمليات درج النقدي: register_id (PK)، store_id (FK)، opening_balance، closing_balance، opened_by، closed_by، opening_date، closing_date، expected_cash، وvariance.

إدارة علاقات العملاء

يخزن جدول customers: customer_id (PK)، first_name، last_name، phone، email، date_of_birth، anniversary_date، loyalty_points، total_spent، registration_date، وis_vip. يتتبع جدول loyalty_transactions النقاط المكتسبة والمستخدمة لكل طلب. لسلسلة التجزئة، يدعم جدول customer_addresses طلبات التوصيل مع عناوين متعددة. يتصل جدول customer بمخطط المبيعات عبر FK customer_id في sales_orders، مما يتيح ميزات مثل سجل الشراء والعروض الشخصية.

هندسة متعدد المتاجر

لعمليات سلسلة المتاجر، يحدد جدول stores كل موقع: store_id (PK)، store_name، address، city، state، phone، tax_registration_number، وis_active. تستخدم أوامر النقل بين المتاجر جدول transfer_orders: transfer_id (PK)، from_store_id (FK)، to_store_id (FK)، product_id (FK)، quantity، status (مطلوبة/موافقة/شحنة/مستلمة)، request_date، وcompletion_date. هذه الهيكلة دعم التقارير المركزية مع السماح بالعمليات اللامركزية.

أفضل الممارسات لقاعدة بيانات POS

استخدم معاملات قاعدة البيانات لكل بيع — إذا فشل إدراج أي سطر، يجب التراجع عن الطلب بالكامل. فهرس عمود barcode للبحث السريع عن المنتجات بأقل من ميلي ثانية في الصندوق. نفذ القفل التoptimistic (عمود رقم الإصدار) على جداول المخزون لمنع البيع الزائد خلال فترات الازدحام العالي. قسم sales_order_items حسب order_date للاستفسارات التاريخية السريعة. احفظ دائماً القيم النقدية بأصغر وحدة عملة (قروش/بيزا) كأرقام صحيحة لتجنب أخطاء تقريب النسبة العائمة.