سؤال

السيناريو الخاص بي هو كما يلي:

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

ما هي الطريقة الأسهل/الأنظف للقيام بذلك؟

راجع للشغل، لبعض الأسباب أرغب في استخدام المفتاح الأساسي الاصطناعي (المعرف الرقمي) لكيان العلامة الخاص بي.

شكرًا!

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

المحلول

لديك علاقة متعدد بمتعدد يمكنك التعبير عنها في فئات الأعمال الخاصة بك وتخطيطها باستخدام NHibernate.ستمنع بنية جدول الارتباط التي تحل علاقة متعدد بمتعدد كائنًا من الارتباط بنفس العلامة أكثر من مرة.

الطريقة الوحيدة لفرض القاعدة في سؤالك هي من خلال الكود.سيكون تسلسل المهام مثل:

  1. تحليل قائمة العلامات التي أدخلها المستخدم إلى علامات فردية
  2. قم بالتمرير عبر العلامات...

    أ.في حالة وجود علامة، قم بإضافتها إلى مجموعة علامات الكائن

    ب.وإلا قم بإنشاء علامة جديدة وأضفها إلى مجموعة علامات الكائن

  3. الكائن المستمر

ستحتاج إلى إضافة منطق للبحث عن العلامات الموجودة مع مراعاة الأخطاء الإملائية والأحرف الكبيرة والاستخدام البديل.على سبيل المثال، لا تريد أن يكون لديك علامات تعني أنها نفس الشيء ولكنها ليست سلاسل متساوية، مثل "ASPNET" أو "ASP.NET" أو "asp.net".ستعتمد جودة قائمة العلامات الخاصة بك على مدى قوة الكود الذي يتحقق من العلامات الموجودة.

نصائح أخرى

فقط للتوضيح - يمكن تثبيت العلامة على العديد من الكائنات، ويمكن أن يحتوي الكائن على العديد من العلامات.هذا ما تعنيه علاقة متعدد إلى متعدد بالنسبة لي.هل هذا كيف تقصد ذلك؟

عند القيام بذلك في SQL، يكون لديك جدولان باسم TAG وOBJECT وجدول ربط يسمى TAG_OBJECT يحتوي على عمودين، واحد لكل مفتاح أساسي في الجداول الأخرى.المفتاح الأساسي في جدول ربط TAG_OBJECT هو الزوج (TAG_ID، OBJECT_ID).وهذا يضمن اقترانًا فريدًا لكل صف.

إذا كنت تستخدم السبات، فما عليك سوى إضافة قائمة أو مجموعة من الكائنات كعضو بيانات خاص إلى فئة العلامات الخاصة بك، وقائمة أو مجموعة من العلامات كعضو بيانات خاصة إلى فئة الكائنات الخاصة بك.

أعتقد أن Hibernate سيتعامل مع "فقط في حالة عدم وجوده"، طالما أنك تكتب طريقة جيدة لتحديد "المساواة العميقة" بين حالتين من العلامات.

يجب عليك أيضًا إضافة قيد فريد إلى سمة عنوان العلامة.فيما يلي مثال لا يناسب احتياجاتك تمامًا، لأنه Java وXML، ولكن ربما يكون هذا التلميح كافيًا لإخبارك بمكان البحث عن NHibernate:

<element column="serialNumber" type="long" not-null="true" unique="true"/>

بالنسبة لحالتك، سيكون العمود هو عنوان العلامة، والنوع هو سلسلة، وستظل العلامات الأخرى كما هي في المثال.

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