اذهب إلى المحتوى

السؤال

نشر

لدي جدول طلبيات البيتزا وكل طلبية لها حالة status فما هو أفضل تمثيل لها كنمط بيانات في الجدول

pizza_orders
    id      : int(11) PK
    location: varchar(255)
    quantity: int(2)

    status  : ?????????

حيث لدي عدة حالات مثل استلام - قيد التوصيل - قيد الطهي - في الانتظار..

Recommended Posts

  • 0
نشر

الأفضل دائماً وأبداً أن تختار نوع البيانات الأقل في المساحة التخزينية, لأن ذلك أولاً سيحفظ بعض المساحة لدى قاعدة البيانات, بالإضافة لزيادة سرعة إستقبال البيانات من قاعدة البيانات, بالإضافة إلى إمكانية الحصول على فهرسة أقل في المساحة

بما أن الحالة لها قيم محددة (discrete values) فإذاً من المُفضل إختيار نوع البيانات عددي بدلاً من نصي, لأن الأعداد أقل مساحةً من النصوص, ويمكنك إختيار نوع بيانات عددي صغير نسبياً مثل ال tinyint

والtinyint عبارة عن نوع بيانات عددي صحيح يحمل بيانات فقط تتراوح من القيمة 0 حتى 255 ومساحته التخزينية عبارة عن 1 بايت (1byte) 

وتكون طريقة التخزين كالتالي, نعطي كل حالة رقم معين, مثلاً الإستﻻم نعطيها الرقم 1, قيد التوصيل نعطيه الرقم2 , قيد الطهي الرقم 3 وهكذا, وبدلاً من تخزين الحالات كنصوص نقوم بتخزينها كأرقام 

 

  • 0
نشر

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

هنا في status توجد لديك عدة حالات منها استلام - قيد التوصيل - قيد الطهي - في الانتظار وغيرها..، وهنا يعتمد شكل البيانات على طريقة استخدامك لهذة الطرق وهناك طريقتين:

اما ان تكون البيانات بداخلها نصا، مثلا "نعم" أو "لا" وهكذا، حينها يجب أن تكون البيانات من نوع Varchar.

أما اذا قررت استخدامها ك 0 و 1، بحيث تعني 0 "لا" وتعني 1 "نعم" ، حنها يمكنك اما استخدام int أو tinyint .

  • 1
نشر

الأفضل هو عمل جدول منفصل للحالة، يحوي حقلين، هما معرف الحالة والقيمة الاسمية للحالة، أي جدول يعمل ك lookup table

ويأخذ الحقل status في جدول الطلبيات القيمة tiny int، يمكن عمل الربط عن طريق المفتاح الثانوي، ولكن الأفضل عدم عمل ربط أثناء الاستعلامات، بل جلب القيم واستبدالها لاحقاً في صفحة الويب أو التطبيق لكي نحسن من الأداء في قاعدة البيانات.

  • tiny int لتوفير مساحة التخيزين،
  • جدول الحالات ك lookup table 

يمكن استعمال مفهوم العرض view  لتركيب استعلام معقد حسب الحالة لديك.

status_table

status_id  | status name
0            pending
1            cooking
2            delevering
3            delevered

 

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...