# Using the Prisma Client

> Use `db` from `@kit/database` for type-safe database operations.

*Canonical: https://makerkit.dev/docs/nextjs-prisma/database/client*

---

Import Prisma as `db` from `@kit/database`:

```ts
import { db } from '@kit/database';
```

This guide is part of the [Database Configuration](./overview) documentation.

## Basic Operations

```ts
const users = await db.user.findMany();

const memberships = await db.member.findMany({
  where: { organizationId: currentOrgId },
  include: { user: true },
});

await db.user.update({
  where: { id: userId },
  data: { name: 'Alice Johnson' },
});
```

## Tenant-Scoped Queries

Always filter tenant-owned data by fields such as `organizationId` or `userId`.

```ts
const members = await db.member.findMany({
  where: { organizationId: currentOrgId },
  orderBy: { createdAt: 'desc' },
  take: 20,
});
```

Avoid unscoped tenant queries:

```ts
const allMembers = await db.member.findMany(); // avoid for tenant-owned data
```

## Transactions

```ts
const result = await db.$transaction(async (tx) => {
  const org = await tx.organization.create({
    data: {
      id: orgId,
      name: 'Acme',
      slug: 'acme',
      createdAt: new Date(),
      updatedAt: new Date(),
    },
  });

  const member = await tx.member.create({
    data: {
      id: memberId,
      organizationId: org.id,
      userId: currentUserId,
      role: 'owner',
      createdAt: new Date(),
    },
  });

  return { org, member };
});
```

## Common Pitfalls

- Forgetting ownership filters on tenant data
- Querying large tables without `take`
- Assuming a model exists because it appears in sample code

---

**Next:** [Rate Limit Service →](./rate-limit-service)
