Always wrap multiple related database operations in a transaction to ensure data consistency and prevent partial updates. This applies to operations across different tables or when coordinating database updates with external services (e.g., Redis cache).

Example:

- const dbPromise = prisma.label.upsert({ ... })
- const redisPromise = saveUserLabel({ ... })
- await Promise.all([dbPromise, redisPromise])

+ await prisma.$transaction(async (tx) => {
+   const dbResult = await tx.label.upsert({ ... });
+   await saveUserLabel({ ... });
+ });

Key benefits:

Apply this pattern when: