it-swarm.asia

مزايا وعيوب استخدام أنواع ENUM مقابل عدد صحيح؟

دعنا نقول في بعض الجدول العشوائي ، لديك عمود باسم الحالة. قيم العالم الحقيقي ستكون إما ممكّنة أو معطلة.

هل من الأفضل أن يكون نوع بيانات هذا العمود عبارة عن int/bool (1 أو صفر) أو استخدام ENUM مع القيم enabled و disabled؟ ما هي مزايا أو عيوب؟

دعنا نقول بدلاً من حالتي صالحة فقط ، لديك 4 أو 10 أو أكثر؟ هل تتأرجح المزايا والعيوب إلى جانب أو آخر مع زيادة عدد القيم المطلوبة؟

117
Jake Wilson

لقد وجدت مقالة غريبة للغاية ولكنها غنية بالمعلومات حوالي 8 أسباب تجعل المرء لا يستخدم ENUM.

حتى بدون المقال ، أعلم

73
RolandoMySQLDBA

حسنا ، أولا لدينا متطلبات التخزين . سأفترض أنك قصدت صغيرة (بدلاً من int).

  • يأخذ ENUM بايت واحد (إذا كان أقل من 255 قيم) أو 2 بايت (بحد أقصى 65535
  • يأخذ TinyInt بايت واحد (بحد أقصى 255 قيم)
  • Boolean هو مرادف ل TinyInt

لذا ، على السطح ، كلهم ​​متشابهون. يأخذ ENUM بعض البيانات الوصفية لقيمة السلسلة المرتبطة به بالرغم من ذلك ( أقدم src )

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

ما فائدة استخدام ENUM؟ تمثيل سلسلة لما تعنيه القيمة. هذا كل ما يهمني. مدى أهمية ذلك يعتمد على التطبيق الخاص بك.

39
Derek Downey

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

أجد أن له عيوب التالية:

  • لا توجد إمكانية لبيانات تعريف إضافية حول الكود.
  • من الصعب إضافة أو تعطيل القيم. (يمكن تحقيق رموز التعطيل باستخدام حقل التشغيل وانتهاء الصلاحية).
  • لا يمكن القيام I18n في قاعدة البيانات.
  • لا يمكن إعادة استخدامها عبر الجداول.
20
BillThor