كيف تجعل المهام فحص مزدوج (الطريقة التي يتم تخزينها في DB)؟

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

سؤال

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

ما الذي يجب أن يكون الطريقة الصحيحة لقول العنصر الذي تم تأكيده:

  1. يجب أن يكون لكل من هذه الجداول عمود "isConferged" ، ثم عندما يريد هذا الرجل تأكيد جميع الأشياء ، يسير البرنامج من خلال جميع الجداول ويقوم بإنشاء قائمة بالعناصر التي لم يتم فحصها.
  2. يجب أن يكون هناك جدول ثالث يحمل اسم الجدول ومعرف هذا الصف الذي يجب تأكيده.
  3. أتمنى أن يكون لديك فكرة أفضل من اثنين من uglies أعلاه.
هل كانت مفيدة؟

المحلول

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

الحالة البسيطة:

ALTER TABLE dbo.Table ADD ConfirmCount TINYINT NOT NULL DEFAULT 0;
ALTER TABLE dbo.Table ADD Processed BIT NOT NULL DEFAULT 0;

عندما يكون التأكيد الأول:

UPDATE dbo.Table SET ConfirmCount = 1 WHERE PK = <PK> AND ConfirmCount = 0;

في التأكيد الثاني:

UPDATE dbo.Table SET ConfirmCount = 2 WHERE PK = <PK> AND ConfirmCount = 1;

عندما رفض:

UPDATE dbo.Table SET ConfirmCount = 0 WHERE PK = <PK>;

من الواضح الآن أن وظيفتك في الخلفية لا يمكنها التعامل إلا مع الصفوف عند معالجتها = 0 و تأكيد Count = 2. ثم عند معالجة هذا الصف:

UPDATE dbo.Table SET Processed = 1 WHERE PK = <PK>;

إذا كان لديك سيناريو أكثر تعقيدًا من هذا ، فيرجى تقديم المزيد من التفاصيل ، بما في ذلك أهداف عملية التأكيد المزدوجة.

نصائح أخرى

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

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

في الحالات التي تحتاج فيها إلى سجلات مؤكدة وغير مؤكدة ، استخدم الاتحاد.

هذا النمط هو المزيد من العمل لترميز وتنفيذ ، ولكن في تجربتي ، يحسن الأداء بشكل كبير ويقلل من العيوب.

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