অ্যাপমাস্টার ডাটাবেসের সাথে কাজ করার জন্য ব্যাপক ক্ষমতা প্রদান করে। উদাহরণস্বরূপ, অনুসন্ধান ব্লক ব্যবহার করে, আপনি প্রয়োজনীয় ডেটা খুঁজে পেতে পারেন, এটির সাথে সম্পর্কিত টেবিলগুলি সংযুক্ত করতে পারেন, এটিকে সঠিক ক্রমে সাজাতে পারেন, ইত্যাদি। যাইহোক, কিছু পরিস্থিতিতে, এটি যথেষ্ট নাও হতে পারে এবং তারপরে এসকিউএল এক্সেক ব্লক আসে। উদ্ধার. এটি আপনাকে SQL এর সম্পূর্ণ শক্তি ব্যবহার করে যেকোন ডাটাবেস কোয়েরি চালানোর অনুমতি দেয়।
বইয়ের একটি ক্যাটালগ রয়েছে এমন একটি ডাটাবেসের উদাহরণ ব্যবহার করে ব্লকের অপারেশন বিবেচনা করা যাক।
আসুন একটু প্রস্তুতিমূলক কাজ করি। এটি একটি ব্যবসায়িক প্রক্রিয়া তৈরি করা প্রয়োজন যা, তার সহজতম আকারে, অনুরোধ পাঠানোর পাশাপাশি তাদের ফলাফলগুলি পাওয়ার অনুমতি দেবে।
আপনাকে একটি এন্ডপয়েন্টও তৈরি করতে হবে যা আপনাকে এই ব্যবসায়িক প্রক্রিয়া অ্যাক্সেস করতে দেবে।
প্রাথমিক পর্যায়ে, এটি যথেষ্ট হওয়া উচিত। আপনি আপনার আবেদন প্রকাশ করতে পারেন এবং পরীক্ষায় যেতে পারেন। এর জন্য, Swagger ব্যবহার করা খুব সুবিধাজনক, যা প্রকাশ করার সময় স্বয়ংক্রিয়ভাবে তৈরি হয়।
আমরা একটি সাধারণ প্রশ্ন ব্যবহার করি যা ডাটাবেস থেকে সমস্ত বইয়ের জন্য অনুরোধ করা উচিত।
public.book থেকে * নির্বাচন করুন
দয়া করে মনে রাখবেন যে টেবিলটি নিজেই (ডাটাবেস এডিটরে তৈরি অন্যান্য সমস্ত টেবিলের মতো) স্কিমা নির্দেশ করে একটি উপসর্গ রয়েছে - সর্বজনীন।
আপনি যাচাই করতে পারেন যে অনুরোধটি সফলভাবে সম্পন্ন হয়েছে এবং ফলাফল প্রাপ্ত হয়েছে।
কিন্তু সমস্যা হল এই ফর্মে উত্তর উপলব্ধি করা খুবই কঠিন। একটি সম্ভাব্য সমাধান হল অনুরোধটি সামান্য পরিবর্তন করা এবং এতে শুধুমাত্র প্রয়োজনীয় ক্ষেত্রগুলি ছেড়ে দেওয়া - উদাহরণস্বরূপ, বইটির শিরোনাম এবং পৃষ্ঠাগুলির সংখ্যা৷ উপরন্তু, একটি সীমা নির্ধারণ করা যুক্তিসঙ্গত হবে, ডাটাবেস থেকে সমস্ত বইয়ের অনুরোধ করবেন না, তবে নিজেকে দশের মধ্যে সীমাবদ্ধ করুন।
নাম নির্বাচন করুন, পাবলিক থেকে পৃষ্ঠাগুলি। বই সীমা 10
অনেক ভাল, কিন্তু বাস্তব ব্যবহারের জন্য এখনও উপযুক্ত নয়। সর্বোপরি, একটি ব্যবসায়িক প্রক্রিয়ায়, আপনাকে কেবল একটি অনুরোধ গ্রহণ করতে হবে না তার ফলাফলের সাথে কিছু করতে হবে। এর জন্য, পাঠ্য আকারে ফলাফল থাকা যথেষ্ট নয়; আপনাকে এটিকে আরও ব্যবহারের জন্য উপযুক্ত একটি মডেলে পরিণত করতে হবে।
এটি করার জন্য, আসুন ব্যবসায়িক প্রক্রিয়ায় ফিরে যাই এবং এটিকে একটু পরিমার্জন করি। শেষ ব্লকে, আমরা একটি নতুন ভেরিয়েবল যোগ করব - বইয়ের মডেলগুলির একটি অ্যারে।
আপনার একটি ব্লকেরও প্রয়োজন হবে যা অনুরোধের ফলে প্রাপ্ত JSON কে মডেলে রূপান্তর করবে। মডেল থেকে JSON ডিসিরিয়ালাইজ করুন।
আগের অনুরোধটি পুনরাবৃত্তি করা যাক এবং নিশ্চিত করুন যে ফলাফলটি অনেক বেশি উপযোগী হয়েছে, উভয় দৃষ্টিভঙ্গির জন্য এবং BP-তে আরও ব্যবহারের জন্য।
এখন, আমরা আরও জটিল যুক্তিতে যেতে পারি। আসুন একটি ব্যবসায়িক প্রক্রিয়া তৈরি করি যা:
- ইনপুট হিসাবে বইয়ের শিরোনাম গ্রহণ করে।
- এটি কোন বিভাগের (শৈলী) অন্তর্গত তা নির্ধারণ করে।
- ফলস্বরূপ একই বিভাগ থেকে 3টি এলোমেলো বই ফেরত দেয় (এই ক্ষেত্রে, অনুরোধের বইটি তাদের মধ্যে থাকা উচিত নয়)
এটি করার জন্য, আমরা একটি নতুন ব্যবসায়িক প্রক্রিয়া তৈরি করব যা স্ট্যান্ডার্ড ব্লক এবং SQL কোয়েরি ব্যবহার করে অনুসন্ধানকে একত্রিত করে।
প্রথম ব্লকটি হল একটি বই এর শিরোনাম দ্বারা খুঁজে বের করা এবং এটি কোন বিভাগে অন্তর্ভুক্ত তা নির্ধারণ করা। এটি করার জন্য, আমরা নিম্নলিখিত পরামিতিগুলির সাথে অনুসন্ধান ব্লক ব্যবহার করি:
- _With = Categories - বইটি ছাড়াও, প্রশ্নের ফলাফলের জন্য সংশ্লিষ্ট বিভাগ টেবিল থেকে তথ্য প্রয়োজন।
- _সীমা = 1 - শুধুমাত্র একটি বই পাওয়া দরকার।
- _Ilike = মিথ্যা - নামটি অবশ্যই অনুরোধকৃতটির সাথে মিলবে।
- নাম - বইয়ের শিরোনামের সূচী, স্টার্ট ব্লক থেকে পাস করা।
সূচক 0 সহ অ্যারে এলিমেন্ট ব্লক ব্যবহার করে, আমরা ফলাফল থেকে প্রথম (এবং শুধুমাত্র) বইটি গ্রহণ করি।
একটি বই একই সময়ে বিভিন্ন বিভাগের অন্তর্গত হতে পারে, এবং এই ক্ষেত্রে, তাদের যে কোনোটি আমাদের জন্য উপযুক্ত হবে। র্যান্ডম এলিমেন্ট ব্লক ব্যবহার করে এলোমেলোভাবে নির্বাচন করা যায়
এর পরে, আমাদের কাছে সমস্ত প্রয়োজনীয় ডেটা রয়েছে এবং যা অবশিষ্ট থাকে তা হল অনুরোধটি নিজেই তৈরি করা, যা দেখতে এইরকম হতে পারে:
SELECT * FROM public.book WHERE IN (SELECT rel1_id FROM public.book_categorys_category_books_pivot WHERE book_categorys_category_books_pivot.rel2_id = X) এবং id <> Y ORDER BY random() LIMIT 3
যেখানে X হল বই বিভাগের আইডি, এবং Y হল বইটির আইডি।
অনুগ্রহ করে মনে রাখবেন যে এই ক্যোয়ারীটিতে একটি সাবকোয়েরি রয়েছে। প্রথমত, book_categorys_category_books_pivot টেবিল থেকে (এটি দুটি টেবিলের মধ্যে সম্পর্কের তথ্য সঞ্চয় করতে ব্যবহৃত হয়), নির্বাচিত বিভাগের সাথে সম্পর্কিত সমস্ত বই শনাক্তকারী পাওয়া যায়। এর পরে, একটি ক্যোয়ারী চালানো হয় যা র্যান্ডম 3টি বই খুঁজে পায় যা নির্দিষ্ট পরিসরের সাথে মেলে, বই আইডি বাদ দিয়ে, যার শিরোনামটি মূলত ব্যবসায়িক প্রক্রিয়ায় পাঠানো হয়েছিল৷
প্রকল্পের ডাটাবেস কাঠামোর আরও বিস্তারিত অধ্যয়নের জন্য, আপনি ডিপ্লয় প্ল্যান সেটিংসে ওপেন ডিবি বোতামটি ব্যবহার করতে পারেন।
এটি আপনাকে সম্পাদকে ডাটাবেস খুলতে এবং ডেটা দেখার এবং সম্পাদনা করার সরাসরি অ্যাক্সেস পেতে অনুমতি দেবে। যাইহোক, আপনার সতর্কতা অবলম্বন করা উচিত এবং এই সত্যটি বিবেচনা করা উচিত যে সম্পাদকে ডেটা স্ট্রাকচার নিজেই পরিবর্তন করা প্রকল্পটিকে আরও প্রকাশ করা অসম্ভব করে তুলবে।
আসুন একটি ব্যবসায়িক প্রক্রিয়া তৈরিতে ফিরে আসি। অনুরোধটির সংকলন সম্পূর্ণ করা প্রয়োজন এবং এটি করার জন্য, বই এবং বিভাগ আইডিকে পূর্ণসংখ্যা থেকে স্ট্রিং-এ রূপান্তর করুন এবং কনক্যাট স্ট্রিংস (মাল্টিপল) ব্লক ব্যবহার করে চূড়ান্ত অনুরোধটি একত্রিত করুন।
শেষ ধাপ হল ক্যোয়ারীটি চালানো, ফলাফলটিকে একটি মডেলে রূপান্তর করা এবং ক্যোয়ারী ফলাফল হিসাবে শেষ ব্লকে পাঠানো।
আপনি আপনার পরিবর্তনগুলি সংরক্ষণ করতে, একটি এন্ডপয়েন্ট তৈরি করতে, আপনার প্রকল্প প্রকাশ করতে এবং অনুরোধটি সঠিকভাবে কাজ করে কিনা তা যাচাই করতে পারেন৷ এই ক্ষেত্রে, একটি জটিল যৌগিক ক্যোয়ারী সহ একটি SQL Exec ব্লক অন্যান্য অনেক ব্লক প্রতিস্থাপন করতে এবং ব্যবসায়িক প্রক্রিয়ার কাঠামোকে সরল করতে ব্যবহার করা হয়েছিল।
SQL Exec ব্লকের ব্যবহার ডেটা পুনরুদ্ধারের মধ্যে সীমাবদ্ধ নয় এবং বিভিন্ন পরিস্থিতিতে ব্যবহার করা যেতে পারে। এর আরও কয়েকটি বিকল্পের উপর ঘনিষ্ঠভাবে নজর দেওয়া যাক।
- id=X সহ একটি বইয়ের জন্য মন্তব্যের সংখ্যা গণনা করা
public.comment থেকে COUNT(id) নির্বাচন করুন WHERE book_id = X - মন্তব্যে দেওয়া সমস্ত রেটিং বিবেচনায় নিয়ে একটি বইয়ের গড় রেটিং গণনা:
public.comment থেকে AVG(রেট) নির্বাচন করুন যেখানে book_id = X - 2023 সালের আগে লেখা সমস্ত মন্তব্য মুছে ফেলা হচ্ছে (যেমন, লগটি দ্রুত সাফ করতে ব্যবহার করা যেতে পারে)।
মুছে ফেলুন * পাবলিক মন্তব্য থেকে যেখানে <'2023-01-01' তৈরি করা হয়েছে
উপসংহারে, এটি লক্ষণীয় যে সুরক্ষা উন্নত করার জন্য, বিপজ্জনক ক্রিয়াকলাপগুলির জন্য SQL Exec ব্লকে একটি ফিল্টার যুক্ত করা হয়েছে যা স্কিমা পরিবর্তনের দিকে নিয়ে যেতে পারে।
CREATE/ALTER/DROP/TRUNCATE-এর জন্য সারণী অন-প্রিমিস হোস্ট করার সময় - ডিফল্টরূপে, যেকোনো অনুরোধ সীমাবদ্ধতা ছাড়াই পাওয়া যায়।