2009-03-12 10 views
8

मैं वर्तमान में एक साधारण संशोधन प्रणाली पर काम कर रहा हूं जो मुझे एक फ़ाइल के कई संस्करणों को स्टोर करने में सक्षम बनाता है, जो अभी तक ठीक काम करता है।MySQL का उपयोग करके एक सरल संशोधन प्रणाली बनाने का सबसे अच्छा तरीका क्या है?

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 फ़ाइल नाम किया जा रहा है।

समस्या:

  • अधिमानतः एक क्वेरी मैं सभी फ़ाइलों को पुनः प्राप्त करना चाहते हैं का उपयोग कर ...
  • लेकिन केवल एक फ़ाइल का नवीनतम संशोधन ...
  • .. जब केवल एक संशोधन संग्रहीत किया जाता है (मूल), यह एक को पुनर्प्राप्त किया जाना चाहिए।

किसी भी संकेत दिए गए बहुत सराहना कर रहे हैं। अग्रिम में धन्यवाद।

+0

मैं नहीं दिख रहा है क्यों यह downvoted था मुझे लगता है कि यह एक कानूनी सवाल है, मैं जवाब देखने के लिए उत्सुक होगी। –

उत्तर

3

पुनः प्राप्ति के लिए सबसे कारगर तरीका 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) पूरी तालिका को स्कैन करने के लिए स्कैन करें पुराने रिकॉर्ड के रास्ते के साथ डेटा की मात्रा।

मान लें कि आप मौजूदा टेबल डिज़ाइन को बदलना नहीं चाहते हैं, जिसे आप करना चाहते हैं उसे समूहवार अधिकतम का चयन करने के लिए कहा जाता है, this article को mysql में करने के कई अलग-अलग तरीकों के लिए देखें।

+0

मुझे एहसास है कि यह एक बहुत पुराना जवाब है, लेकिन निश्चित रूप से एक टाइमस्टैम्प चेक सरल, आसान और अधिक कुशल होगा। आपको is_latest ध्वज को हटाने के लिए अंतिम संशोधन को अपडेट करने की आवश्यकता नहीं है, और जब चयन केवल टाइमस्टैम्प द्वारा 1 और ऑर्डर का चयन करेगा। – Sk446

1
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 द्वारा भी, आदि, नवीनतम हो जाएगा ..

संबंधित मुद्दे