تصميم قاعدة البيانات - سؤال حول الكفاءة (وجودة التصميم العامة)
-
27-09-2019 - |
سؤال
أخشى أنني لا أعرف ماذا أفعل.
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. إذا لم يكن كذلك ، تجاهل هذا الجزء الأخير.