السلام عليكم ورجمة الله وبركاته
اقوم حاليا بالعمل على مشروع يختص بحفظ وفهرسة انواع مختلفة من المنتجات بلغة البرمجة #C واتعامل مع قاعدة بيانات من نوع MySQL
سؤالي في الحقيقة يتعلق بالطريقة الاصح في تصميم الجداول وقمت بوضعه هنا لانني لم اجد منتدى مختص بتصميم قواعد البيانات
السؤال الي اريد طرحه كتالي : يقوم النظام الذي اقوم بتطويرة بفهرسة المنتجات ويقوم بحفض هذه المنتجات حسب صنفها وقد يحتوي كل تصنيف على تصنيفات فرعية ويمتلك كل فرع خصائص تحتلف عن التصنيفات الاخرى بحيث يتمكن مدير النظام من اضافة اتصنيفات هذه المنتجات عن طريق واجهة ( يقوم فيها بتحديد عدد الخصائص واسم كل خاصية ونوع البيانات التي يتم تخزينها في هذا الحقل) مما يجعلني اتعامل مع احتمالات غير محدودة من الخصائص حسب نوع المنتج ويجعل انشاء جدول واحد يحفظ كل المنتجات غير ممكن على حسب علمي (والله اعلم)
ولقد لجئت لهذا الحل ولكن لا اعلم اذا كان الطريقة الصحيحة في تنفيذ هكذا مهمة مع العلم ان سرعة النظام امر مهم بنسبة لي وهو من متطلبات النظام واريد ان يكون عدد مرات الوصول إلى قاعدة البيانات في اقل مستوياته لان قاعدة البيانات سيتم حفظها في سيرفر منفصل والبرنامج سوف يعمل من اجهزة طرفية وهنالك اجهزة سوف نقوم بعمل بحث عن هذه المنتجات دون ان تمتلك صلاحية الكتابة.
لنفترض ان هنالك نوعين من المنتجات مثل السيارات والملابس وذالك يجعل كل منتج من هذه المنتجات يمتلك خصائص مختلفة عن المنتج الاخر .
1- في البداية تظهر للمستخدم واجهة تطلب منه تحديد اسم التصنيف و ( يحدد اسم التصنيف الرئيسي في حال كان هذا التصنيف فرعي) وعدد الخصائص في هذا التصنيف واسم الجدول في قاعدة البيانات .
* بعد هذه الخطوة يقوم النظام بتخزين اسم الجدول واسم التصنيف والتصنيف الرئيسي ان وجد وعدد الحقول في ذاكرة الجهاز ولكن لا يقوم بالكتابة في قاعدة البيانات .
* قبل هذه الخطوة يقوم النظام بعمل استعلام واحد لمعرفة التصنيفات المتوفرة لجعلها متاحة في قائمة التصنيفات الرئيسية.
2- يظهر للمستخدم واجهة جديدة تطلب منه ادخال اسماء الحقول في قاعدة البيانات واسماء الخصائص ونوع البيانات .
* يقوم النظام في هذه المرحلة بتكوين مجموعة SQL statements الاولى تقوم بالكتابة في جدول اسمه category يعتبر هذا الجدول بمثابة مرجع يتم فيه حفظ عدد الخصائص ( الحقول) ووصف الخصائص مع استخدام ";" للفصل بين اسم كل خاصية واخرى واسم التصنيف و نوع البيانات لكل خاصية (حقل) ويفصل بينها باستخدام ";" واعطاء رقم تسلسلي لكل تصنيف primary key.
* بقوم النظام ايضا بتكوين SQL statements اخرى تقوم بتكوين جدول جديد بحسب المواصفات التي تم تحديدها من حيث عدد الحقول وانواعها وتسميتها.
ويتم تنفيذ الاومر في قاعدة البيانات
في مرحلة ادخال المنتجات
1- يقوم المستخدم بتحديد تصنيف المنتج في البداية ومن ثم يقوم النظام بتحميل خصائص المنتج وعدد الحقول من الجدول category وخلق واجهة تتكون من حقول حسب ما تم تكوينة في المرحلة السابقة بشكل دايناميكي في وقت التشغيل
2- عندما يقوم المستخدم بتعبئة الحقول ويقوم بالحفظ يقوم النظام بتكوين SQL statements اخرى تقوم بالكتابة في جدول بعنوان ITEM يتم فيه حفظ كل المنتجات والمعلومات العامة للمنتج وايضا يقوم بحفظ رقم التصنيف foreign key بحيث يوشر على الجدول category و ويقوم النظام ايضا في هذه المرحلة بتكوين SQL statements باستخدام المعلومات في الجدول category والتي تصف بنية الحقول في الجدول الذي تم تكوينة مسبقا والكتابة معلومات المنتج فيه.
في مرحلة العرض
يقوم الجدول عند عرض اي منتج باستحضار البيانات من جدولين هما الجدول item والجدول الذي تم تكوينة في مرحلة اضافة المنتج .
في النهاية الاستفسارات التي لدي تدور حول اشكالية عدم تطابق الخصائص وهل يكمل الحل في بناء جداول جديدة مع العلم ان عددها ممكن يصبح كبير وهل يوثر ذالك على اداء النظام بشكل عام
في حال وجود مقالات او كتب بلغة العربية او الانجليزية تتكلم عن هذه المشكلة ارجو ارشادي لها شاكر لكم صبركم علي
مرفق مع الموضع ER diagram يوضح التصميم الذي اعتمدت عليه
نحياتي