Prisma اور SQL کے تعلقات (Relationships) میں مہارت حاصل کرنا

اگر آپ سمجھ لیں کہ Prisma کنکشنز کو کیسے ہینڈل کرتا ہے، تو یہ ڈیٹا بیس کے کام کو آسان بنا دیتا ہے۔ یہاں اسکیما (schemas)، تعلقات (relations) اور کوئریز (queries) کے لیے ایک گائیڈ دی گئی ہے۔

اسکیما اور تعلقات (Relationships)

تعلقات (Relationships) یہ طے کرتے ہیں کہ آپ کا ڈیٹا ایک دوسرے سے کیسے جڑتا ہے۔

  • One-to-Many: ایک صارف (user) کی بہت سی پوسٹس ہو سکتی ہیں۔ Post ماڈل میں فارن کی (foreign key) (authorId) ہوتی ہے۔ User ماڈل صرف ایک ریفرنس (reference) رکھتا ہے۔
  • Many-to-Many: ایک صارف بہت سے پروجیکٹس کا حصہ ہو سکتا ہے، اور ایک پروجیکٹ میں بہت سے صارفین ہو سکتے ہیں۔ اس کے لیے آپ کو درمیان میں ایک جنکشن ٹیبل (junction table) (ProjectMember) کی ضرورت ہوتی ہے۔ یہ ٹیبل دونوں اطراف کے لیے فارن کیز (foreign keys) رکھتا ہے۔
  • Self-Relations: ایک صارف دوسرے صارف کو فالو کرتا ہے۔ آپ "Follower" اور "Following" جیسے نامزد تعلقات (named relations) استعمال کرتے ہیں تاکہ Prisma کو معلوم ہو سکے کہ کون سا حصہ کون سا ہے۔

اہم کوئری میتھڈز (Key Query Methods)

  • findUnique: اسے ان ریکارڈز کے لیے استعمال کریں جن میں @id یا @unique فیلڈ ہو۔ اگر کچھ نہ ملے تو یہ null واپس کرتا ہے۔
  • findMany: اسے فہرست حاصل کرنے کے لیے استعمال کریں۔ آپ فلٹر، ترتیب (sort) اور پیجینیشن (paginate) کر سکتے ہیں۔
  • findFirst: اسے اس وقت استعمال کریں جب آپ کو ایک ریکارڈ کی ضرورت ہو لیکن فلٹر کوئی یونیک (unique) فیلڈ نہ ہو۔

Where کے ساتھ فلٹرنگ (Filtering with Where)

"where" کلاز براہ راست SQL سے منسلک ہے۔

  • Comparison: gt (greater than)، lt (less than)، یا gte (greater than or equal) استعمال کریں۔
  • Text Search: کیس-انسنسیٹیو (case-insensitive) تلاش کے لیے "mode: insensitive" کے ساتھ "contains" استعمال کریں۔
  • Logical Operators: شرائط کو جوڑنے کے لیے OR، AND، یا NOT استعمال کریں۔
  • Relation Filters: منسلک ڈیٹا کی بنیاد پر فلٹر کرنے کے لیے "some"، "every"، یا "none" استعمال کریں۔ "some" ایسے ریکارڈز تلاش کرتا ہے جہاں کم از کم ایک تعلق میچ کرتا ہو۔

ڈیٹا کنٹرول: Select بمقابلہ Include

  • select: بالکل منتخب کریں کہ کون سی فیلڈز واپس کرنی ہیں۔ یہ آپ کے ڈیٹا کو ہلکا اور محفوظ رکھتا ہے۔
  • include: متعلقہ ڈیٹا کو اپنے رزلٹ میں شامل (join) کریں۔ یہ نیمسٹڈ (nested) آبجیکٹس لاتا ہے۔
  • نوٹ: آپ ایک ہی لیول پر select اور include استعمال نہیں کر سکتے۔ آپ کو ایک کا انتخاب کرنا ہوگا۔ تاہم، آپ کسی منسلک تعلق سے مخصوص فیلڈز منتخب کرنے کے لیے include کے اندر select استعمال کر سکتے ہیں۔

آپریشنز اور حفاظت (Operations and Safety)

  • createMany: ایک ساتھ بہت سی روز (rows) بنائیں۔ یہ تیز ہے لیکن نیمسٹڈ رائٹس (nested writes) کو سپورٹ نہیں کرتا۔
  • upsert: اگر ریکارڈ موجود ہے تو اسے اپ ڈیٹ کرتا ہے، ورنہ نیا بنا دیتا ہے۔ یہ شاپنگ کارٹس کے لیے بہترین ہے۔
  • update: نمبروں کو بغیر کسی غلطی کے تبدیل کرنے کے لیے increment یا decrement جیسے ایٹامک آپریشنز (atomic operations) استعمال کریں۔
  • $transaction: متعدد رائٹس (writes) کو ایک ساتھ گروپ کریں۔ اگر ایک حصہ ناکام ہو جائے تو پورا گروپ واپس (roll back) ہو جاتا ہے۔ یہ جزوی ڈیٹا کی غلطیوں کو روکتا ہے۔

صفحہ بندی

صفحات بنانے کے لیے "take" اور "skip" کو یکجا کریں۔

  • take: کتنے ریکارڈز دکھانے ہیں۔
  • skip: کتنے ریکارڈز کو نظر انداز کرنا ہے۔

ماخذ: https://dev.to/chinwuba_jeffrey/understanding-prisma-and-sql-relationships-schema-and-querying-l7k