يذهب SNAFU الخاص إلى DBA


بالنسبة لأولئك الذين لا يعرفون ، SNAFU هي شخصية في الرسوم العسكرية الوطنية التي أنشأها الأمريكيون خلال الحرب. هذا التلاعب ، بسبب البلاهة الطبيعية ، يقع في مواقف كارثية طوال الوقت ، وكقاعدة عامة ، يموت في نهاية السلسلة. صحيح ، في السلسلة التالية ، فهو على قيد الحياة مرة أخرى - وبهذا المعنى ، يمكن اعتباره السلف البعيد لكيني من ساوث بارك.

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

لذا ، فإن المهمة:

SELECT * FROM Events where DT='2020/02/03'

  • ماذا أراد مؤلف الكود أن يفعل؟
  • لماذا لا يعمل هذا كما أردت؟
  • كيف تصلحها؟

محادثتي مع SNAFU سوف تذهب أبعد من ذلك.

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

لقد تغلبنا على النقطتين الأوليين وانتقلنا إلى النقطة الثالثة.

لي: كيفية إصلاحه؟
SNAFU: حيث التحويل (varchar، DT، 102) = '2020/02/03' (عملت Rake # 1)
I:ولكن ألا يزعجك أن هذا يمكن أن يمنع SQL من استخدام فهرس DT إذا كان موجودًا؟
SNAFU: أين DT بين "2020/02/03" و "2020/02/04" (عملت Rake # 2)
أنا: هل يزعجك أن يتم تضمين بيانات الرقم التالي (منتصف الليل) هنا؟
SNAFU: حيث DT بين "2020/02/03" و "2020/02/03 23:59:59" (عملت Rake # 3) أولاً
: هل ترغب في التعامل مع بنك يوجد فيه ثاني عند وجود المال ، الذي ساهمت ستضيع؟
SNAFU: حيث DT بين "2020/02/03" و "2020/02/03 23: 59: 59.999" (عملت Rake # 4)
I: هل تعلم أن 23: 59: 59.999 سيتم تقريبها مرة أخرى حتى منتصف الليل؟
SNAFU:بالضبط ، تبلغ الدقة 13-16 مللي ثانية. ثم: حيث DT بين "2020/02/03" و "2020/02/03 23: 59: 59.986" (عملت Rake # 5)
أنا: هذا إذا أصبح DT وقتًا صغيرًا أو تاريخًا 2 ، فهل سيتوقف كل شيء عن العمل؟



لا أعرف لماذا يصعب للغاية الانتقال إلى اللحظة أدناه. في الواقع ، أكثر من نصف المرشحين يائسون بغباء. في بعض الأحيان عليك أن تدفع. لكن SNAFU لدينا عذب الحل:

SNAFU: حيث DT> = '2020/02/03' و DT <'2020/02/04'
Me: أخيرًا.

يمسح SNAFU العرق من جبينه. حان الوقت الآن لقطعة تحكم.
لي: وماذا سيء حقا هنا؟
SNAFU تهتز. يديه ترتجفان. النظرات تتجول.
أنا: هل هو 3 فبراير أم 2 مارس؟

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


All Articles