Prisma ਅਤੇ SQL ਰਿਲੇਸ਼ਨਸ਼ਿਪਸ ਵਿੱਚ ਮਾਹਰ ਬਣਨਾ

ਜੇਕਰ ਤੁਸੀਂ ਸਮਝ ਲੈਂਦੇ ਹੋ ਕਿ Prisma ਕਨੈਕਸ਼ਨਾਂ ਨੂੰ ਕਿਵੇਂ ਸੰਭਾਲਦਾ ਹੈ, ਤਾਂ ਇਹ ਡਾਟਾਬੇਸ ਦੇ ਕੰਮ ਨੂੰ ਸਰਲ ਬਣਾ ਦਿੰਦਾ ਹੈ। ਇੱਥੇ ਸਕੀਮਾ (schemas), ਰਿਲੇਸ਼ਨਜ਼ (relations), ਅਤੇ ਕੁਐਰੀਜ਼ (queries) ਲਈ ਇੱਕ ਗਾਈਡ ਦਿੱਤੀ ਗਈ ਹੈ।

ਸਕੀਮਾ ਅਤੇ ਰਿਲੇਸ਼ਨਸ਼ਿਪਸ

ਰਿਲੇਸ਼ਨਸ਼ਿਪਸ ਇਹ ਨਿਰਧਾਰਤ ਕਰਦੀਆਂ ਹਨ ਕਿ ਤੁਹਾਡਾ ਡਾਟਾ ਕਿਵੇਂ ਜੁੜਿਆ ਹੋਇਆ ਹੈ।

  • One-to-Many: ਇੱਕ ਯੂਜ਼ਰ (user) ਦੀਆਂ ਕਈ ਪੋਸਟਾਂ (posts) ਹੋ ਸਕਦੀਆਂ ਹਨ। Post ਮਾਡਲ ਵਿੱਚ ਫੋਰਨ ਕੀ (foreign key) (authorId) ਹੁੰਦੀ ਹੈ। User ਮਾਡਲ ਸਿਰਫ਼ ਇੱਕ ਰੈਫਰੈਂਸ (reference) ਰੱਖਦਾ ਹੈ।
  • Many-to-Many: ਇੱਕ ਯੂਜ਼ਰ ਕਈ ਪ੍ਰੋਜੈਕਟਾਂ ਨਾਲ ਜੁੜਿਆ ਹੋ ਸਕਦਾ ਹੈ, ਅਤੇ ਇੱਕ ਪ੍ਰੋਜੈਕਟ ਵਿੱਚ ਕਈ ਯੂਜ਼ਰ ਹੋ ਸਕਦੇ ਹਨ। ਇਸਦੇ ਵਿਚਕਾਰ ਇੱਕ ਜੰਕਸ਼ਨ ਟੇਬਲ (junction table) (ProjectMember) ਦੀ ਲੋੜ ਹੁੰਦੀ ਹੈ। ਇਹ ਟੇਬਲ ਦੋਵਾਂ ਪਾਸਿਆਂ ਲਈ ਫੋਰਨ ਕੀਜ਼ (foreign keys) ਰੱਖਦਾ ਹੈ।
  • Self-Relations: ਇੱਕ ਯੂਜ਼ਰ ਦੂਜੇ ਯੂਜ਼ਰ ਨੂੰ ਫਾਲੋ (follow) ਕਰਦਾ ਹੈ। ਤੁਸੀਂ "Follower" ਅਤੇ "Following" ਵਰਗੇ ਨਾਮ ਵਾਲੇ ਰਿਲੇਸ਼ਨਜ਼ ਦੀ ਵਰਤੋਂ ਕਰਦੇ ਹੋ ਤਾਂ ਜੋ Prisma ਨੂੰ ਪਤਾ ਲੱਗ ਸਕੇ ਕਿ ਕਿਹੜਾ ਪਾਸਾ ਕਿਹੜਾ ਹੈ।

ਮੁੱਖ ਕੁਐਰੀ ਮੈਥਡਸ

  • findUnique: ਇਸਦੀ ਵਰਤੋਂ @id ਜਾਂ @unique ਫੀਲਡ ਵਾਲੇ ਰਿਕਾਰਡਾਂ ਲਈ ਕਰੋ। ਜੇ ਕੁਝ ਨਹੀਂ ਮਿਲਦਾ ਤਾਂ ਇਹ null ਰਿਟਰਨ ਕਰਦਾ ਹੈ।
  • findMany: ਇੱਕ ਲਿਸਟ ਪ੍ਰਾਪਤ ਕਰਨ ਲਈ ਇਸਦੀ ਵਰਤੋਂ ਕਰੋ। ਤੁਸੀਂ ਫਿਲਟਰ (filter), ਸੌਰਟ (sort), ਅਤੇ ਪੇਜਿਨੇਟ (paginate) ਕਰ ਸਕਦੇ ਹੋ।
  • findFirst: ਇਸਦੀ ਵਰਤੋਂ ਉਦੋਂ ਕਰੋ ਜਦੋਂ ਤੁਹਾਨੂੰ ਇੱਕ ਰਿਕਾਰਡ ਦੀ ਲੋੜ ਹੋਵੇ ਪਰ ਫਿਲਟਰ ਕੋਈ ਯੂਨੀਕ ਫੀਲਡ ਨਾ ਹੋਵੇ।

"where" ਨਾਲ ਫਿਲਟਰਿੰਗ

"where" ਕਲਾਜ਼ (clause) ਸਿੱਧੇ ਤੌਰ 'ਤੇ 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: ਆਪਣੇ ਨਤੀਜੇ ਵਿੱਚ ਸਬੰਧਤ ਡਾਟਾ ਨੂੰ ਜੋੜੋ। ਇਹ ਨੇਸਟਡ (nested) ਆਬਜੈਕਟਸ ਨੂੰ ਸ਼ਾਮਲ ਕਰਦਾ ਹੈ।
  • Note: ਤੁਸੀਂ ਇੱਕੋ ਲੈਵਲ 'ਤੇ select ਅਤੇ include ਦੀ ਵਰਤੋਂ ਨਹੀਂ ਕਰ ਸਕਦੇ। ਤੁਹਾਨੂੰ ਇੱਕ ਨੂੰ ਚੁਣਨਾ ਪਵੇਗਾ। ਹਾਲਾਂਕਿ, ਤੁਸੀਂ ਇੱਕ ਜੁੜੇ ਹੋਏ ਰਿਲੇਸ਼ਨ ਤੋਂ ਖਾਸ ਫੀਲਡਾਂ ਨੂੰ ਚੁਣਨ ਲਈ include ਦੇ ਅੰਦਰ select ਦੀ ਵਰਤੋਂ ਕਰ ਸਕਦੇ ਹੋ।

ਓਪਰੇਸ਼ਨ ਅਤੇ ਸੁਰੱਖਿਆ

  • createMany: ਇੱਕੋ ਵਾਰ ਵਿੱਚ ਕਈ ਰੋਅ (rows) ਬਣਾਓ। ਇਹ ਤੇਜ਼ ਹੈ ਪਰ ਨੇਸਟਡ ਰਾਈਟਸ (nested writes) ਦਾ ਸਮਰਥਨ ਨਹੀਂ ਕਰਦਾ।
  • upsert: ਜੇਕਰ ਰਿਕਾਰਡ ਮੌਜੂਦ ਹੈ ਤਾਂ ਉਸਨੂੰ ਅਪਡੇਟ ਕਰਦਾ ਹੈ ਜਾਂ ਜੇ ਨਹੀਂ ਹੈ ਤਾਂ ਨਵਾਂ ਬਣਾਉਂਦਾ ਹੈ। ਇਹ ਸ਼ਾਪਿੰਗ ਕਾਰਟਾਂ ਲਈ ਬਹੁਤ ਵਧੀਆ ਹੈ।
  • update: ਗਲਤੀਆਂ ਤੋਂ ਬਿਨਾਂ ਨੰਬਰਾਂ ਨੂੰ ਬਦਲਣ ਲਈ increment ਜਾਂ decrement ਵਰਗੇ ਐਟੋਮਿਕ (atomic) ਓਪਰੇਸ਼ਨਾਂ ਦੀ ਵਰਤੋਂ ਕਰੋ।
  • $transaction: ਕਈ ਰਾਈਟਸ ਨੂੰ ਇਕੱਠੇ ਗਰੁੱਪ ਕਰੋ। ਜੇਕਰ ਇੱਕ ਹਿੱਸਾ ਫੇਲ ਹੋ ਜਾਂਦਾ ਹੈ, ਤਾਂ ਪੂਰਾ ਗਰੁੱਪ ਰੋਲਬੈਕ (rollback) ਹੋ ਜਾਂਦਾ ਹੈ। ਇਹ ਅਧੂਰੇ ਡਾਟਾ ਦੀਆਂ ਗਲਤੀਆਂ ਨੂੰ ਰੋਕਦਾ ਹੈ।

ਪੇਜਿਨੇਸ਼ਨ

ਪੇਜ ਬਣਾਉਣ ਲਈ "take" ਅਤੇ "skip" ਨੂੰ ਮਿਲਾਓ।

  • take: ਕਿੰਨੇ ਰਿਕਾਰਡ ਦਿਖਾਉਣੇ ਹਨ।
  • skip: ਕਿੰਨੇ ਰਿਕਾਰਡ ਨੂੰ ਛੱਡਣਾ ਹੈ।

ਸਰੋਤ: https://dev.to/chinwuba_jeffrey/understanding-prisma-and-sql-relationships-schema-and-querying-l7k