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

StackOverflow https://stackoverflow.com/questions/4275954

سؤال

لديّ قاعدة بيانات تخزين تفاصيل المنتجات المأخوذة من العديد من المواقع ، وتم جمعها من خلال مواقع API الفردية. عندما أتصل بالتغذية ، يتم تخزين التفاصيل في جدول قاعدة البيانات.

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

المشكلة هي أن العنصر ليس لديه أي معرف فريد واضح ، وله تفاصيل محددة عن العنصر (يمكن أن يكون هناك الكثير) ، ثم وصفًا للعنصر من البائع.

ما أود هو أن يظهر العنصر مرة واحدة ، ثم إعطاء تفاصيل المستخدم حول مكان آخر العنصر المدرج.

كيف يمكنني تحديد التكرارات التي ظهرت ، دون إبطاء قاعدة البيانات بأكملها؟ كيف يمكنني أيضًا اختيار إعلان واحد من جميع التكرارات ، ثم قم بتخزين المواقع الأخرى التي يتم عرض الإعلان عليها.

شكرا على اي مساعدة.

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

المحلول

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

  1. لسبب غير معروف ، افترضت أن جمع أوصاف المنتج من مواقع Mulitple لن يجمع نفس المنتج.

  2. أنت معتاد على المشترك وغير منطقي Id العمود ، وهو أمر جيد عندما تعمل مع وظائف النماذج الأولية جداول البيانات ؛ ولكن ليس في أي مكان بالقرب من ما هو مطلوب للحصول على قاعدة بيانات أو وظيفة على مستوى التطوير. لدى المستخدمين (أو رئيسه) قدرة قاعدة البيانات المتوقعة بشكل طبيعي من قاعدة البيانات ، ولم تقدم أيًا منها. (ولا ، لا يتطلب منطق سلسلة غامض أو سحر من أي نوع.)

المحلول

هذه نسخة مكثفة من IDEF1X معيار لنمذجة قواعد البيانات العلائقية ؛ جزء إعادة المعرفات.

  1. تحتاج إلى التفكير في مصطلحات قاعدة البيانات ، والتفكير في جداول قاعدة البيانات التي تحتاجها لتنفيذ وظيفتك ، مما يعني أنه لا يُسمح لك باستخدام التلقائي التلقائي Id عمودي. هذا العمود يعطي جدول بيانات أ RowId, ، لكنه لا يعني أي شيء عن محتوى الجدول ، أو الأعمدة التي تحدد المنتج.

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

  3. حدد جميع الأعمدة وأنواع البيانات للأعمدة.

  4. تحديد الأعمدة الإلزامية والتي هي اختيارية.

  5. تحديد ما هو قوي معرفات. على سبيل المثال. Manufacturer و Model; ؛ القصير Product Name, ليس طويل Description (أو قد يكون لشركتك ، الوصف الطويل هو معرف). اعمل مع المستخدمين ، والعمل على ذلك.

  6. ستجد أن لديك بالفعل مجموعة صغيرة من الجداول حولها Product, ، مثل Manufacturer, ProductType, ، ربما Vendor, ، إلخ.

  7. قم بتنظيم هذه الجداول ، وتطبيعها ، بحيث لا تكرر البيانات.

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

  9. ما الذي يجعل معرفًا فريدًا واحدًا ل Product قد لا يكون عمودًا واحدًا. هذا جيد ، يمكننا تقييم أعمدة متعددة للمفاتيح في قواعد البيانات ؛ يطلق عليهم مفاتيح المركب.

  10. خذ أفضل ما يستقر (واحد لن يتغير) معرف فريد من نوعه ، أحد مفاتيح المرشحين ، وجعل ذلك المفتاح الأساسي.

  11. إذا ، وفقط ، فإن المعرف الفريد ، المفتاح الأساسي ، الذي قد يكون مفتاحًا مركبًا ، طويل جدًا ، وبالتالي فهو غير مناسب للمفتاح الأساسي ، الذي يتم ترحيله إلى الجداول الفرعية ، عندها يضيف أ مفتاح بديل. سيكون ذلك Id عمودي. لاحظ أن هذا عمود إضافي وفهرس إضافي. إنه ليس بديلاً لمعرفات Product, مفاتيح المرشح ؛ لا يمكن إزالتها.

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

تغذية

  1. أنت بحاجة إلى WebSite جدول لإدارة الخلاصات.

  2. سيكون هناك طاولة نقاطية (العديد من العدد) بين Product و WebSite. دعنا نسميها ProductSite. سوف تحتوي فقط على ProductId, ، و ال WebSiteCode. It may containالسعر. المحتويات صالحة لدورة تغذية واحدة.

  3. قم بتحميل كل تغذية في قاعدة بيانات أو مخطط انطلاق ، وارد ProductIn الجدول ، ربما واحد لكل موقع ويب. هذا هو مجرد الملف المسطح من المصدر الخارجي. إضافة عمود IsValid وتعيين الافتراضي إلى True.

  4. ثم اكتب بعض SQL الذي يقارن ذلك ProductIn الجدول ، بمحتوياته الفضفاضة والمرنة ، مع Product الجدول مع معرفاته القوية.

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

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

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

  5. كرر لكل موقع ويب.

  6. الآن ملء موقعنا من لدينا Product الجدول ، باستخدام المعلومات التي نثق بها ، وإظهار المواقع التي لديها المنتج للبيع من ProductSite.

نصائح أخرى

لا أعتقد أن هذه مشكلة رمز أو قاعدة بيانات (حتى الآن). قول انت:

المشكلة هي أن العنصر ليس لديه أي معرف فريد واضح

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

قد تساعد بعض الأمثلة على البيانات التي تعتبرها التكرارات.

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