الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

في الطريقة الاصح لتصميم جدول

بدأه alname5 في 30 ديسمبر 2010 · 3 رد · 1,367 مشاهدة · في قواعد بيانات MySQL
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ورجمة الله وبركاته

اقوم حاليا بالعمل على مشروع يختص بحفظ وفهرسة انواع مختلفة من المنتجات بلغة البرمجة #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 يوضح التصميم الذي اعتمدت عليه

نحياتي

post-131588-019139300 1293672353_thumb.p

المرفقات
er.png
#2

الأخ العزيز

إن تصميم قاعدة بيانات لبرنامج معين لا يجب ان يكون بهذا التعقيد وهو أيضا ليس مستقل تماما

أي أن الواقع العملي مختلف تماما عن التطبيقات العلمية النظرية البحتة

عند التخطيط لتصميم قاعدة بيانات يجب مراعاة طريقة تعامل البرنامج معها وهذا يحدد بطئ التعامل او سرعته وفي الطريقة التي وصفتها تسبب بطئ عجيب جدا مع تضخم البيانات وقاعدة البيانات

تخيل ان لديك جدول واسمه category ويحتوي على اسماء الاقسام بهدف جلب منها اسماء الجداول الذي قام بانشائها النظام تلقائيا ومن ثم تكوين جملة استعلام وحلقات تكرار الخ الخ

تخيل حجم المعاملات والأوامر التي سينفذها البرنامج والضغط على الشبكة حسب ما ذكرت انك ستشغل النظام في شركة بنظام Client / server

أعتقد أنك بحاجة لاستخدام نظام التقييد الموسع وهو مسطلح من اختراعي على فكرة ويعني ايجاد اسلوب لوضع كم من التصنيفات الثابتة ولكن أن تكون شاملة لكل ما قد يحتاجه العميل

وعلى هذا لاساس يكون بناء جداول قاعدة البيانات ، فكرتي ببساطة هي تصميم قاعدة البيانات حسب متطلبات البرنامج وليس تصميم البرنامج حسب قاعدة البيانات

ومهما كان اسلوب بناء قاعدة البيانات يجب ان يخدم فكرة البرنامج أي يجب أن يتحقق ترابط يوفر الاستقرار والسرعة والهدف من تصميمه وتقليل المشاكل قدر المستطاع

آمل أن أكون استطعت أن أعبر عما يدور بذهني

بالتوفيق

#3

اسلام عليكم ورحمة الله

فالبداية اشكرك اخي العزيز على مشاركتك

ولكني لا اعتقد ان كلبنا على صواب .. انا اعلم ان طريقتي تعاني من مشكلتين هما التعقيد والتكلفة .. وللعلم لقد كتبت البرنامج بالفكرة التي لدي ولا اعتقد انها صحيحة

المشكلة في فكرتك تكمل اولاة عدد الحقول الفارغة المتروكة عند اضافة منتج جديد والبحث بنتيجة ستتاثر سرعته وايضا اريد ان احصل على تصنيف شجري ( وهذا متطلب من متطلبات الزبون)

ناهيك اننا نعمل بعكس المبادى التي يقوم عليها النورمليزين ( اعذرني ما اعرف تعريب هذه الكلمة )

انا اعتقد ان هناك حل ابسط في مسلة تكوين الجداول اثناء وقت التنفيذ ولكن لم اتوصل اليهاء بعد

اثناء تجولي فالنت والمرور بموقع ebay اعتقد انهم من المفروض ان يواجهوا نفس المشكلة

فالنهاية تقبل تحياتي الحارة واشكرك جزيل الشكر على مداخلتك واذا توصلت للحل سوف اطرحه للفائدة العامة

مواضيع مشابهة