سؤال

أقوم برمجة موقع ويب يسمح للمستخدمين بنشر إعلانات مصنفة بحقول مفصلة لأنواع مختلفة من العناصر التي يبيعونها. ومع ذلك ، لدي سؤال حول أفضل مخطط قاعدة البيانات.

يتميز الموقع بالعديد من الفئات (مثل السيارات وأجهزة الكمبيوتر والكاميرات) وكل فئة من الإعلانات لها حقول مميزة خاصة بها. على سبيل المثال ، تحتوي السيارات على سمات مثل عدد الأبواب والصنع والنموذج والحصان بينما تحتوي أجهزة الكمبيوتر على سمات مثل وحدة المعالجة المركزية ، وذاكرة الوصول العشوائي ، ونموذج اللوحة الأم ، إلخ.

الآن نظرًا لأن جميعهم من القوائم ، كنت أفكر في نهج متعدد الأشكال ، وإنشاء جدول قوائم أولياء الأمور وجدول طفل مختلف لكل فئة من الفئات المختلفة (أجهزة الكمبيوتر ، والسيارات ، والكاميرات). سيكون لكل طاولة طفل قائمة ripring_id التي ستربط مرة أخرى بجدول القوائم. لذلك عندما يتم جلب القائمة ، فإنها ستجلب صفًا من القوائم التي ينضم إليها الصف المرتبط في جدول الطفل المرتبط.

LISTINGS
-listing_id
-user_id
-email_address
-date_created
-description

CARS
-car_id
-listing_id
-make
-model
-num_doors
-horsepower

COMPUTERS
-computer_id
-listing_id
-cpu
-ram
-motherboard_model

الآن ، هل هذا المخطط نمط تصميم جيد أم أن هناك طرقًا أفضل للقيام بذلك؟

لقد فكرت في ميراث واحد ، لكنني سرعان ما نفرت من الفكر لأن الجدول سيصبح كبيرًا جدًا بسرعة كبيرة ، ولكن بعد ذلك ظهرت معضلة أخرى - إذا قام المستخدم بإجراء بحث عالمي على جميع القوائم ، فهذا يعني أنني سأضطر إلى الاستعلام عن كل طفل الجدول بشكل منفصل. ماذا يحدث إذا كان لدي أكثر من 100 فئة مختلفة ، ألا يكون ذلك غير فعال؟

لقد فكرت أيضًا في نهج آخر حيث يوجد جدول رئيسي (جدول التعريف) يحدد الحقول في كل فئة وجدول حقل يخزن قيم الحقل لكل قائمة ، ولكن هل سيتعارض ذلك مع تطبيع قاعدة البيانات؟

كيف ستفعل مواقع مثل Kijiji؟

هل كانت مفيدة؟

المحلول

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

كلاهما لديهما عيوب لكنني فضلت الأول إلى الثاني.

تعديل

تحتاج إلى الجداول التالية.

فئات - معرف - الوصف

CatevoriesListingsxRef - CatevoryId - ListingId

باستخدام هذا النموذج المرجعي المتقاطع ، يمكنك الانضمام إلى جميع قوائمك لفئة معينة أثناء البحث. ثم أضف القليل من SQL ديناميكيًا (لأنه من الأسهل فهمه) وإنشاء استعلامك لتضمين الحقل (الحقل) الذي تريد البحث فيه وتنفيذها على استعلامك.

هذا هو.

تحرير 2 يبدو أن هذا هو مناقشة أكبر قليلاً يمكن أن نتمكن من الزعنفة في مربعات التعليقات هذه. ولكن ، يمكن فهم أي شيء نناقشه من خلال قراءة المنشور التالي. http://www.sommarskog.se/dyn-search-2008.html

إنها كاملة حقًا وتظهر لك أكثر من طريقة واحدة للقيام بذلك باستخدام Pro's و Cons. حظا طيبا وفقك الله.

نصائح أخرى

أعتقد أن التصميم الذي اخترته سيكون جيدًا للسيناريو الذي وصفته للتو. على الرغم من أنني لست متأكدًا مما إذا كان يجب أن يكون لجداول الفئة الفرعية معرفها الخاص. نظرًا لأن السيارة هي قائمة ، فمن المنطقي أن تكون القيم من نفس "المجال".

في موقع الإعلانات المصنفة النموذجية ، تتم كتابة البيانات الخاصة بالإعلان مرة واحدة ثم تكون في الأساس للقراءة فقط. يمكنك استغلال هذا وتخزين البيانات في مجموعة ثانية من الجداول التي يتم تحسينها أكثر للبحث في الطريقة التي تريد أن يبحث بها المستخدمون. أيضا ، مشكلة البحث موجودة فقط للبحث "العام". بمجرد أن يختار المستخدم نوعًا معينًا من الإعلان ، يمكنك التبديل إلى جداول الفئة الفرعية من أجل القيام بمزيد من البحث المتقدم (RAM> 4GB ، CPU = تم التغلب عليها).

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top