ما هي أفضل طريقة لإنشاء نظام مراجعة بسيط باستخدام MySQL؟

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

سؤال

أعمل حاليًا على نظام مراجعة بسيط يمكّنني من تخزين إصدارات متعددة من ملف واحد، وهو يعمل بشكل جيد حتى الآن.

هيكل الجدول كما يلي (تمت إزالة الأعمدة القديمة من أجل الإيجاز):

file_id     file_revision     file_parent      file_name
--------------------------------------------------------
1           1                 0                foo.jpg
2           2                 1                foorevised.jpg                 
3           3                 1                anotherrevision.jpg

أين:

  • file_id هو المفتاح الأساسي، الذي يزيد تلقائيا
  • file_revision يخزن رقم المراجعة، بشكل افتراضي 1 عندما يكون الأول
  • file_parent هو الأصل الأعلى للمراجعة، افتراضيًا 0 عندما أولا.
  • file_name كونه اسم الملف.

المشكلة:

  • ويفضل استخدام استعلام واحد أريد استرداد جميع الملفات ...
  • ولكن فقط المراجعة الأخيرة لكل ملف ...
  • ...عند تخزين مراجعة واحدة فقط (أصلية)، يجب استرجاع هذه المراجعة.

أي مؤشرات تقدر بشكل رائع.شكرا لك مقدما.

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

المحلول

الطريقة الأكثر فعالية من أجل الاسترجاع هي إضافة عمود مثل is_latest والذي تحتاج إلى ملؤه مسبقًا، ثم select * from table where file_id=1 and is_latest=true عندما تريد الحصول على أحدث إصدار من الملف 1.من الواضح أن هذا سيجعل تحديث هذا الجدول أكثر تعقيدًا.

هناك طريقة أخرى للقيام بذلك وهي تخزين أحدث الإصدارات من الملفات في جدول واحد، والإصدارات التاريخية في جدول آخر.إذا كنت تريد في الغالب تحديد الجميع الملفات التي هي أحدث إصدار، select * from table where is_latest=true من المحتمل أن يكون بمثابة فحص كامل للجدول حتى إذا تمت فهرسة is_latest.إذا كانت جميع الصفوف الأخيرة موجودة في جدول واحد، فيمكن لقاعدة البيانات قراءتها جميعًا في عملية إدخال/إخراج تسلسلية ولن تضطر إلى القيام بذلك أيضًا 1) القيام بالكثير من عمليات البحث من خلال الجدول للعثور على السجلات التي تحتاجها فقط أو 2) مسح الجدول بأكمله مع التخلص من الحجم الكبير كميات من البيانات على طول الطريق للسجلات القديمة.

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

نصائح أخرى

file_id     file_revised     file_name              Time_Stamp
-----------------------------------------------------------------
1           1                 foo.jpg                 insert_time
2           1                 foorevised.jpg          insert_time                 
3           1                 anotherrevision.jpg     insert_time

سأقوم بعد ذلك بإجراء أشكال مختلفة من الاستعلامات مثل هذا:

حدد * حيث file_revision = 1 ترتيب حسب مجموعة Time_Stamp حسب file_revision

أو أي عدد من الاختلافات في هذا النوع من الاستعلام، على سبيل المثال، الحد 1 أو الترتيب حسب file_id كأعلى سيكون أيضًا الأحدث، وما إلى ذلك.

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