@WW- এর সময় উত্তর হ'ল উত্তম উত্তর হ'ল একটি সংস্করণ কলাম তৈরি করা এবং আপনার সমস্ত সংস্করণ একই টেবিলে রাখা।
একটি টেবিলের জন্য আপনি হয়:
- সর্বশেষতম আলা ওয়ার্ড প্রেসকে নির্দেশ করতে একটি পতাকা ব্যবহার করুন
- অথবা সংস্করণের চেয়ে বড়ো কোনও দুষ্টু করুন
outer join
।
outer join
সংশোধন নম্বর ব্যবহার করে পদ্ধতির একটি উদাহরণ এসকিউএল হ'ল:
SELECT tc.*
FROM text_content tc
LEFT OUTER JOIN text_content mc ON tc.path = mc.path
AND mc.revision > tc.revision
WHERE mc.revision is NULL
AND tc.path = '/stuff' -- path in this case is our natural id.
খারাপ খবর উপরেরটি হ'ল একটি outer join
বাহ্যিক সংযুক্তি ধীর হতে পারে requires সুসংবাদটি হ'ল নতুন এন্ট্রি তৈরি করা তাত্ত্বিকভাবে কম সস্তা কারণ আপনি এটি লেনদেনের মাধ্যমে একটি লিখন অপারেশনে করতে পারেন (আপনার ডাটাবেসটিকে পারমাণবিক বলে ধরে নিচ্ছেন)।
এর জন্য একটি নতুন সংশোধন করার উদাহরণ '/stuff'
হতে পারে:
INSERT INTO text_content (id, path, data, revision, revision_comment, enabled, create_time, update_time)
(
SELECT
(md5(random()::text)) -- {id}
, tc.path
, 'NEW' -- {data}
, (tc.revision + 1)
, 'UPDATE' -- {comment}
, 't' -- {enabled}
, tc.create_time
, now()
FROM text_content tc
LEFT OUTER JOIN text_content mc ON tc.path = mc.path
AND mc.revision > tc.revision
WHERE mc.revision is NULL
AND tc.path = '/stuff' -- {path}
)
আমরা পুরানো ডেটা ব্যবহার করে সন্নিবেশ করি। এটি বিশেষত কার্যকর যদি বলুন যে আপনি কেবল একটি কলাম আপডেট করতে চান এবং আশাবাদী লকিং এবং বা লেনদেন এড়াতে চান।
পতাকা পদ্ধতির এবং ইতিহাস সারণির পদ্ধতির জন্য দুটি সারি সন্নিবেশ করা / আপডেট করা দরকার।
outer join
রিভিশন নম্বর পদ্ধতির সাথে অন্য সুবিধাটি হ'ল আপনি সর্বদা ট্রিগারগুলির সাথে একাধিক টেবিল পদ্ধতির রিপ্যাক্টর করতে পারেন কারণ আপনার ট্রিগারটি মূলত উপরের মতো কিছু করা উচিত।