تصميم قاعدة البيانات - سؤال حول الكفاءة (وجودة التصميم العامة)

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

سؤال

أخشى أنني لا أعرف ماذا أفعل.

1:

لدي طاولة تسمى ticket الذي يحتوي على عمود يسمى total. عندما يتم تحديث المجموع ، أريد الاحتفاظ بسجل منه (المجموع القديم ، إلخ) ، لذلك قررت إزالة total العمود وإنشاء جدول يسمى ticket_total مع الأعمدة ticket_id, total, ، و datetime (الأحدث بالطبع هو المجموع "الحالي").

أو

2:

ثم أدركت أنني سأريد لاحقًا أن أعطي عملائي القدرة على فرز التذاكر total, ، أو سحب التقارير التي تجمع المجاميع ، وما إلى ذلك ، لذلك قررت بدلاً من ذلك إعادة إرسال total العمود على ticket, وتغيير total العمود مباشرة عند تحديث المجموع ، ولكن أولاً قم بإنشاء ملف ticket_total الصف كسجل سابق total.

يبدو أن الإصدار 2 سيكون فعالًا للغاية لأنني لن أحتاج إلى الاستعلام عن الصلة ticket_total الجدول بنفس القدر ، لكني أتساءل ما الذي تعتقده. أنا فقط أتعلم تصميم قاعدة البيانات والخوف لن أكون جيدًا في ذلك.

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

المحلول

سأذهب مع الخيار 2 الذي اقترحته.

فقط تأكد من قيامك بتحديث (التذكرة) + إدراج (في ticket_total) في معاملة لضمان الحفاظ على النزاهة.

نصائح أخرى

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

رد: "الكفاءة" - الأفضل من ذلك هو عدم القلق كثيرًا بشأن كفاءة قاعدة البيانات في بداية المشروع. التحسين السابق لأوانه هو خطأ شائع لتجنب.

من الأفضل التركيز على احتياجاتك وتصميمها لهم. في وقت لاحق ، يمكنك اختبار لمعرفة ما إذا كانت اختناقات الأداء والعمل على حلها.

بالنسبة لقواعد البيانات الأصغر (عشرات الآلاف من الصفوف) ، فإن استفسارات "غير الفعالة" غالبًا ما تكون سريعة للغاية مع خوادم وبرامج اليوم.

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

عرض لديك نوعان من البيانات: معلومات التذاكر الحالية ، وجدول سجل للقيم "الكلية" القديمة.

لذلك سوف تفضل VER 2 الخاص بك.

ticket
  id
  field_a
  field_b
  total    # current_total

ticket_total  # history of ticket total field
  id
  ticket_id
  total
  create_time

ايضا يبدو "المجموع" كتجميع لشيء ما. أقترح أن تحاول التوصل إلى اسم حقل أكثر وصفية. - ما هو الحقل مجموع؟ "Total_worktime"؟

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

أود أن أجعل Ticket_total عرضًا وليس جدولًا. سأقوم بإنشاء Ticket_current عرض آخر حيث يمكنني تصفية التذاكر بحلول آخر تاريخ ، إذا كان جدول التذاكر هو مفتاح مزدوج على Ticket_id و DateTime. إذا لم يكن كذلك ، تجاهل هذا الجزء الأخير.

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