Prisma మరియు SQL రిలేషన్‌షిప్‌లను మాస్టర్ చేయడం

కనెక్షన్‌లను Prisma ఎలా నిర్వహిస్తుందో మీరు అర్థం చేసుకుంటే, డేటాబేస్ పనులు చాలా సులభమవుతాయి. ఇక్కడ స్కీమాలు (schemas), రిలేషన్స్ (relations) మరియు క్వరీల (queries) గురించి ఒక గైడ్ ఉంది.

స్కీమా మరియు రిలేషన్‌షిప్స్

రిలేషన్‌షిప్స్ మీ డేటా ఎలా అనుసంధానించబడి ఉందో నిర్ణయిస్తాయి.

  • One-to-Many: ఒక యూజర్‌కు అనేక పోస్ట్‌లు ఉండవచ్చు. Post మోడల్ ఫారిన్ కీని (authorId) కలిగి ఉంటుంది. User మోడల్ కేవలం ఒక రిఫరెన్స్‌ను మాత్రమే కలిగి ఉంటుంది.
  • Many-to-Many: ఒక యూజర్ అనేక ప్రాజెక్ట్‌లకు చెందిన వాడు కావచ్చు, మరియు ఒక ప్రాజెక్ట్‌లో అనేక మంది యూజర్లు ఉండవచ్చు. వీటి మధ్యలో ఒక జంక్షన్ టేబుల్ (ProjectMember) అవసరం. ఈ టేబుల్ రెండు వైపులా ఉన్న ఫారిన్ కీలను కలిగి ఉంటుంది.
  • Self-Relations: ఒక యూజర్ మరొక యూజర్‌ను ఫాలో అవ్వడం. Prisma ఏ వైపు ఏది అనేది తెలుసుకోవడానికి మీరు "Follower" మరియు "Following" వంటి పేరున్న రిలేషన్స్‌ను ఉపయోగిస్తారు.

ముఖ్యమైన క్వరీ పద్ధతులు

  • findUnique: @id లేదా @unique ఫీల్డ్ ఉన్న రికార్డుల కోసం దీనిని ఉపయోగించండి. ఏమీ దొరకకపోతే ఇది nullని రిటర్న్ చేస్తుంది.
  • findMany: ఒక జాబితాను పొందడానికి దీనిని ఉపయోగించండి. మీరు ఫిల్టర్, సార్ట్ మరియు పేజినేట్ చేయవచ్చు.
  • 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 vs Include

  • select: ఏ ఫీల్డ్‌లను రిటర్న్ చేయాలో ఖచ్చితంగా ఎంచుకోండి. ఇది మీ డేటాను తక్కువ పరిమాణంలో మరియు సురక్షితంగా ఉంచుతుంది.
  • include: సంబంధిత డేటాను మీ రిజల్ట్‌లోకి జాయిన్ చేయండి. ఇది నెస్టెడ్ ఆబ్జెక్ట్‌లను (nested objects) తీసుకువస్తుంది.
  • గమనిక: మీరు select మరియు includeలను ఒకే లెవల్‌లో ఉపయోగించలేరు. మీరు ఒకదానిని మాత్రమే ఎంచుకోవాలి. అయితే, జాయిన్ చేసిన రిలేషన్ నుండి నిర్దిష్ట ఫీల్డ్‌లను ఎంచుకోవడానికి మీరు include లోపల selectను ఉపయోగించవచ్చు.

ఆపరేషన్స్ మరియు భద్రత

  • createMany: ఒకేసారి అనేక రోలను (rows) సృష్టించండి. ఇది వేగంగా ఉంటుంది కానీ నెస్టెడ్ రైట్స్ (nested writes) ను సపోర్ట్ చేయదు.
  • upsert: రికార్డు ఉంటే అప్‌డేట్ చేస్తుంది లేదా లేకపోతే కొత్తది సృష్టిస్తుంది. ఇది షాపింగ్ కార్ట్‌లకు చాలా ఉపయోగకరంగా ఉంటుంది.
  • update: ఎటువంటి లోపాలు లేకుండా నంబర్లను మార్చడానికి increment లేదా decrement వంటి అటామిక్ ఆపరేషన్లను ఉపయోగించండి.
  • $transaction: బహుళ రైట్స్‌ను ఒక సమూహంగా చేయండి. ఒక భాగం విఫలమైతే, మొత్తం సమూహం రోల్‌బ్యాక్ (roll back) అవుతుంది. ఇది పాక్షిక డేటా లోపాలను నివారిస్తుంది.

పేజినేషన్

పేజీలను రూపొందించడానికి "take" మరియు "skip"లను కలిపి ఉపయోగించండి.

  • take: ఎన్ని రికార్డులను చూపించాలో తెలియజేస్తుంది.
  • skip: ఎన్ని రికార్డులను వదిలివేయాలా అని తెలియజేస్తుంది.

మూలం: https://dev.to/chinwuba_jeffrey/understanding-prisma-and-sql-relationships-schema-and-querying-l7k