Prisma এবং SQL রিলেশনশিপে দক্ষতা অর্জন
আপনি যদি বুঝতে পারেন Prisma কীভাবে কানেকশনগুলো হ্যান্ডেল করে, তবে এটি ডাটাবেস সংক্রান্ত কাজকে সহজ করে তোলে। এখানে স্কিমা (schemas), রিলেশন (relations) এবং কুয়েরি (queries) সংক্রান্ত একটি নির্দেশিকা দেওয়া হলো।
স্কিমা এবং রিলেশনশিপ
রিলেশনশিপ নির্ধারণ করে আপনার ডাটা কীভাবে একে অপরের সাথে সংযুক্ত থাকে।
- One-to-Many: একজন ইউজারের অনেকগুলো পোস্ট থাকতে পারে। Post মডেলে foreign key (authorId) থাকে। User মডেলে শুধুমাত্র একটি রেফারেন্স থাকে।
- Many-to-Many: একজন ইউজার অনেকগুলো প্রজেক্টের অন্তর্ভুক্ত হতে পারেন, এবং একটি প্রজেক্টে অনেক ইউজার থাকতে পারেন। এর মাঝে একটি junction table (ProjectMember) প্রয়োজন। এই টেবিলে উভয় পাশের জন্য foreign key থাকে।
- Self-Relations: একজন ইউজার অন্য একজন ইউজারকে ফলো করেন। আপনি "Follower" এবং "Following"-এর মতো নামযুক্ত রিলেশন ব্যবহার করতে পারেন যাতে Prisma বুঝতে পারে কোন দিকটি কোনটি।
প্রধান কুয়েরি পদ্ধতিসমূহ
- findUnique: @id বা @unique ফিল্ড থাকা রেকর্ডগুলোর জন্য এটি ব্যবহার করুন। কিছু না পাওয়া গেলে এটি null রিটার্ন করে।
- findMany: একটি লিস্ট পেতে এটি ব্যবহার করুন। আপনি ফিল্টার, সর্ট এবং পেজিনেট (paginate) করতে পারেন।
- findFirst: যখন আপনার একটি রেকর্ড প্রয়োজন কিন্তু ফিল্টারটি কোনো ইউনিক ফিল্ড নয়, তখন এটি ব্যবহার করুন।
Where দিয়ে ফিল্টারিং
"where" ক্লজটি সরাসরি SQL-এর সাথে ম্যাপ করে।
- Comparison: gt (greater than), lt (less than), অথবা gte (greater than or equal) ব্যবহার করুন।
- Text Search: কেস-ইনসেনসিটিভ (case-insensitive) সার্চের জন্য "contains"-এর সাথে "mode: insensitive" ব্যবহার করুন।
- Logical Operators: কন্ডিশনগুলো একত্রিত করতে OR, AND, অথবা NOT ব্যবহার করুন।
- Relation Filters: সংযুক্ত ডাটার ওপর ভিত্তি করে ফিল্টার করতে "some", "every", অথবা "none" ব্যবহার করুন। "some" এমন রেকর্ড খুঁজে বের করে যেখানে অন্তত একটি রিলেশন মিলে যায়।
ডাটা কন্ট্রোল: Select বনাম Include
- select: ঠিক কোন ফিল্ডগুলো রিটার্ন করতে চান তা বেছে নিন। এটি আপনার ডাটাকে হালকা এবং সুরক্ষিত রাখে।
- include: আপনার রেজাল্টে সম্পর্কিত ডাটা যুক্ত (join) করুন। এটি নেস্টেড অবজেক্ট নিয়ে আসে।
- Note: আপনি একই লেভেলে select এবং include ব্যবহার করতে পারবেন না। আপনাকে যেকোনো একটি বেছে নিতে হবে। তবে, একটি জয়েন করা রিলেশন থেকে নির্দিষ্ট ফিল্ড বেছে নিতে আপনি include-এর ভেতরে select ব্যবহার করতে পারেন।
অপারেশন এবং নিরাপত্তা
- createMany: একসাথে অনেকগুলো রো (row) তৈরি করুন। এটি দ্রুত কিন্তু নেস্টেড রাইট (nested writes) সাপোর্ট করে না।
- upsert: রেকর্ডটি বিদ্যমান থাকলে আপডেট করে অথবা না থাকলে নতুন করে তৈরি করে। এটি শপিং কার্টের জন্য দারুণ।
- update: কোনো ত্রুটি ছাড়াই সংখ্যা পরিবর্তন করতে increment বা decrement-এর মতো অ্যাটমিক অপারেশন (atomic operations) ব্যবহার করুন।
- $transaction: একাধিক রাইট অপারেশনকে একত্রে গ্রুপ করুন। যদি একটি অংশ ব্যর্থ হয়, তবে পুরো গ্রুপটি রোলব্যাক (rollback) হয়ে যাবে। এটি আংশিক ডাটা ত্রুটি প্রতিরোধ করে।
পেজিনেশন
"take" এবং "skip" ব্যবহার করে পেজ তৈরি করুন।
- take: কতগুলো রেকর্ড দেখানো হবে।
- skip: কতগুলো রেকর্ড বাদ দেওয়া হবে।
উৎস: https://dev.to/chinwuba_jeffrey/understanding-prisma-and-sql-relationships-schema-and-querying-l7k