𝗣𝗿𝗶𝘀𝗺𝗮, 𝗦𝗤𝗟 𝗿𝗲𝗹𝗮𝘁𝗶𝗼𝗻𝘀𝗵𝗶𝗽𝘀 𝗲𝗻𝗻𝗶𝘃𝗶𝗹 𝗽𝗿𝗮𝘃𝗲𝗲𝗻𝘆𝗮𝗺 𝗻𝗲𝗱𝗮𝗮𝗺

കണക്ഷനുകൾ Prisma എങ്ങനെ കൈകാര്യം ചെയ്യുന്നു എന്ന് മനസ്സിലാക്കിയാൽ ഡാറ്റാബേസ് ജോലികൾ ലളിതമാകും. സ്കീമകൾ (schemas), റിലേഷനുകൾ (relations), ക്വറികൾ (queries) എന്നിവയെക്കുറിച്ചുള്ള ഒരു ഗൈഡ് ഇതാ.

𝗧𝗵𝗲 𝗦𝗰𝗵𝗲𝗺𝗮 𝗮𝗻𝗱 𝗥𝗲𝗹𝗮𝘁𝗶𝗼𝗻𝘀𝗵𝗶𝗽𝘀

ഡാറ്റ എങ്ങനെ പരസ്പരം ബന്ധപ്പെട്ടിരിക്കുന്നു എന്ന് റിലേഷൻഷിപ്പുകൾ നിർവചിക്കുന്നു.

  • One-to-Many: ഒരു ഉപയോക്താവിന് (user) ഒന്നിലധികം പോസ്റ്റുകൾ ഉണ്ടാകാം. Post മോഡൽ ഫോറിൻ കീ (foreign key - authorId) സൂക്ഷിക്കുന്നു. User മോഡൽ ഒരു റഫറൻസ് മാത്രമാണ് സൂക്ഷിക്കുന്നത്.
  • Many-to-Many: ഒരു ഉപയോക്താവ് ഒന്നിലധികം പ്രോജക്റ്റുകളിൽ അംഗമാകാം, അതുപോലെ ഒരു പ്രോജക്റ്റിൽ ഒന്നിലധികം ഉപയോക്താക്കളും ഉണ്ടാകാം. ഇവയെ ബന്ധിപ്പിക്കാൻ ഒരു ജംഗ്ഷൻ ടേബിൾ (junction table - ProjectMember) ആവശ്യമാണ്. ഈ ടേബിൾ രണ്ട് വശങ്ങളിലെയും ഫോറിൻ കീകൾ സൂക്ഷിക്കുന്നു.
  • Self-Relations: ഒരു ഉപയോക്താവ് മറ്റൊരു ഉപയോക്താവിനെ ഫോളോ ചെയ്യുന്നു. ഏത് വശമാണ് ഏതെന്ന് Prisma-യ്ക്ക് മനസ്സിലാക്കാൻ "Follower", "Following" എന്നിങ്ങനെയുള്ള പേരുള്ള റിലേഷനുകൾ ഉപയോഗിക്കാം.

𝗞𝗲𝘆 𝗤𝘂𝗲𝗿𝘆 𝗠𝗲𝘁𝗵𝗼𝗱𝘀

  • findUnique: @id അല്ലെങ്കിൽ @unique ഫീൽഡുള്ള റെക്കോർഡുകൾക്കായി ഇത് ഉപയോഗിക്കുക. ഒന്നും കണ്ടെത്തിയില്ലെങ്കിൽ ഇത് null നൽകുന്നു.
  • findMany: ഒരു ലിസ്റ്റ് ലഭിക്കാൻ ഇത് ഉപയോഗിക്കുക. നിങ്ങൾക്ക് ഫിൽട്ടർ ചെയ്യാനും (filter), സോർട്ട് ചെയ്യാനും (sort), പേജിനേറ്റ് ചെയ്യാനും (paginate) സാധിക്കും.
  • findFirst: ഒരു റെക്കോർഡ് മാത്രം ആവശ്യമുള്ളപ്പോൾ, എന്നാൽ ഫിൽട്ടർ ചെയ്ത ഫീൽഡ് ഒരു യുണീക് (unique) ഫീൽഡ് അല്ല എങ്കിൽ ഇത് ഉപയോഗിക്കുക.

𝗙𝗶𝗹𝘁𝗲𝗿𝗶𝗻𝗴 𝘄𝗶𝘁𝗵 𝗪𝗵𝗲𝗿𝗲

"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: ബന്ധപ്പെട്ട ഡാറ്റ റിസൾട്ടിനൊപ്പം ചേർക്കാം. ഇത് നെസ്റ്റഡ് ഒബ്‌ജക്റ്റുകളെ (nested objects) ഉൾപ്പെടുത്താൻ സഹായിക്കുന്നു.
  • Note: ഒരേ ലെവലിൽ select-ഉം include-ഉം ഒരേസമയം ഉപയോഗിക്കാൻ കഴിയില്ല. ഇതിൽ ഒന്ന് മാത്രമേ തിരഞ്ഞെടുക്കാവൂ. എന്നാൽ, ഒരു ജോയിൻ ചെയ്ത റിലേഷനിൽ നിന്ന് പ്രത്യേക ഫീൽഡുകൾ തിരഞ്ഞെടുക്കാൻ include-നുള്ളിൽ select ഉപയോഗിക്കാം.

𝗢𝗽𝗲𝗿𝗮𝘁𝗶𝗼𝗻𝘀 𝗮𝗻𝗱 𝗦𝗮𝗳𝗲𝘁𝘆

  • createMany: ഒരേസമയം ഒന്നിലധികം റോകൾ (rows) നിർമ്മിക്കാം. ഇത് വേഗതയുള്ളതാണ്, എന്നാൽ നെസ്റ്റഡ് റൈറ്റുകളെ (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