NULL مقابل فارغة عند التعامل مع مدخلات المستخدم

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

  •  03-07-2019
  •  | 
  •  

سؤال

نعم, آخر NULL مقابل سلسلة فارغة السؤال.

أنا أتفق مع فكرة أن لاغية يعني ، في حين سلسلة فارغة يعني "قيمة فارغة".هنا مشكلتي:إذا القيمة الافتراضية العمود NULL, كيف تسمح للمستخدم بالدخول إلى NULL.

دعونا نقول إنشاء مستخدم جديد على النظام.وهناك الأول والأخير اسم المجال ؛ الاسم الأخير وهو أول اسم ليس.عند إنشاء المستخدم ، انظر 2 مدخلات النص, واحد أول واحد آخر.الشخص يختار فقط أدخل الاسم الأخير.الاسم الأول هو من الناحية الفنية لا تعيين.خلال إدراج أنا التحقق من طول كل حقل ، ووضع جميع الحقول فارغة إلى NULL.

عندما تبحث في قاعدة البيانات ، أرى أن الاسم الأول لم يتم تعيين.السؤال الذي يتبادر فورا إلى الذهن هو أنه ربما لم يروا حقل الاسم الأول (أي بسبب خطأ).ولكن ليست هذه هي القضية ؛ تركوا إذا كان فارغا.

لذا سؤالي هو: كيف تقرر عند حقل يجب تعيين إلى NULL أو سلسلة فارغة عند تلقي المستخدم الإدخال?كيف تعرف أن المستخدم يريد هذا المجال إلى أن يتم تعيين دون الكشف عن التركيز أو إذا حذف قيمة...أو...أو... ؟

ذات السؤال: يجب استخدام NULL أو سلسلة فارغة تمثل أية بيانات في الجدول عمود ؟

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

المحلول

وأنا تقريبا لم تستخدم NULL عند الإشارة إلى البيانات الفعلية. عندما تستخدم لمفاتيح خارجية، أود أن أقول إن NULL صالحا، ولكنه غير صحيح لبيانات المستخدم دخل أبدا تقريبا. والاستثناء الوحيد الذي من المحتمل أن تأتي بشكل منتظم هو التواريخ التي لا وجود لها، مثل قاعدة بيانات الموظف مع حقل "termination_date". في هذه الحالة، يجب أن يكون جميع الموظفين الحاليين قيمة من NULL في هذا المجال. أما بالنسبة الحصول عليها في الواقع لإدخال قيمة فارغة للقيم التي تتطلب حقا قيمة فارغة، وأود أن وضع خانة الاختيار بجانب حقل الإدخال بحيث يمكن للمستخدم التحقق من ذلك على نحو متقطع لمعرفة القيمة المطابقة فارغة (أو في أكثر بطريقة سهلة الاستعمال، لا شيء). عند تمكين خانة الاختيار لتعيين الحقل فارغة، يجب تعطيل مربع النص المقابل، وإذا ويرتبط قيمة فارغة بالفعل، وينبغي أن تبدأ كما المعوقين، وتصبح فقط تمكين مرة واحدة للمستخدم unchecks خانة الاختيار لاغيا.

نصائح أخرى

سوف كسر نمط و أقول أنني دائما استخدام NULL صفر-طول سلاسل للأسباب التالية.

  1. إذا كنت تبدأ بخير تشريح آثار الفراغات, ثم يجب بطريقة أو بأخرى أن كل مطور يقرأ ويكتب بنفس الطريقة.

  2. كيف أبجد ؟

  3. يمكنك لبس عند تحديد المستخدم حذف إدخال قيمة, مقارنة مع تعمد تركها فارغة ؟

  4. كيف لا لبس فيه الاستعلام عن الفرق ؟ يمكن استعلام شاشة المستخدم يشير إلى NULL مقابلفارغة باستخدام الإدخال القياسية شكل الجملة?

  5. في الممارسة العملية ، لم يمنع من قراءة وكتابة البيانات باستخدام الافتراضي ، المستغرب السلوك باستخدام هذه القاعدة.إذا كنت في حاجة إلى معرفة الفرق ، لقد استعملت حقل منطقي (وهو أسهل خريطة واضحة واجهة المستخدم الأجهزة).في حالة واحدة, أنا استخدم تؤدي إلى فرض صحيح => null قيمة, ولكن لم ير هذا الاحتجاج لأن BR طبقة تصفية الحالة بشكل فعال.

وإذا كان المستخدم يوفر سلسلة فارغة، وأنا دائما التعامل معها على أنها باطلة من وجهة نظر قاعدة البيانات. وبالإضافة إلى ذلك، سوف تقليم عادة بلدي مدخلات سلسلة لإزالة الرائدة / مسافات زائدة ومن ثم التحقق من وجود فارغة. انه فوز صغير في قاعدة البيانات مع VARCHAR) أنواع (وكما أنه يقلل من الحالات للبحث منذ أن كنت فقط بحاجة للتحقق من name is null بدلا من name is null or name = '' هل يمكن أن تذهب أيضا في الاتجاه الآخر، وتحويل لاغية إلى ''. وفي كلتا الحالتين، واختيار الطريق وتكون متسقة.

ما عليك القيام به هو معرفة ما <م> السلوك تريد. ليس هناك الجبر واحدة ثابتة من كيفية تفسير سلاسل الاسم.

والتفكير في آلة الدولة هنا: لديك حقول التي لديها عدة دول: أنه slounds مثل كنت تفكر في حالة "unitialized"، وآخر من "فارغة هادف" وثالثة مع بعض القيمة المحددة. أي شيء كنت تفعل ذلك يجعل تلك المهمة ويتسق مع بقية البرنامج سوف تجد. هذا يبدو وكأنه تعيين السهل هو

وNULL → غير مهيأ
"" →
ضبطه هادف اسم → تهيئة.

أنا في محاولة لابقاء الامور بسيطة.في هذه الحالة سأقوم أولا-اسم عمود غير nullable و تسمح الفراغات.وإلا سيكون لديك ثلاث حالات التعامل مع أي مكان يمكنك الرجوع إلى هذا المجال:

  1. الفراغ الأول اسم
  2. Null الاسم الأول
  3. غير فارغة الاسم الأول

إذا كنت اذهب مع 'فارغة فارغة أو فارغة فارغة' ثم أنت إلى أسفل إلى حالتين.اثنين من الحالات أفضل من ثلاث.

لمزيد من الإجابة على سؤالك:المستخدم إدخال البيانات ربما لا (ألا) تعرف أي شيء عن ما "null" وكيف أنه يقارن "فارغة".هذه المسألة يجب أن تحل نظيفة باستمرار في النظام-وليس واجهة المستخدم.

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

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

ولقد استخدمت دائما NULL للقيم غير مهيأ، empty للقيم فارغة عمدا و0 لمؤشرات باتجاه آخر.

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

وأنا عادة اختبار لempty()، لكن في بعض الأحيان I تحقق من isset() الذي يقيم false على NULL. وهذا مفيد لتذكير للرد على بعض الأسئلة. إذا كان empty، false أو 0 ثم أجاب على هذا السؤال.

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