Модель Role
в Prisma описывает сущность «Роль» в базе данных. Давайте разберём её структуру и особенности.
Описание модели
prisma
1 2 3 4 5 6 | model Role { id Int @id @default(autoincrement()) title String @unique // наименование роли User User? @relation(fields: [userId], references: [id]) userId Int? } |
1. Поля модели
id
- Тип:
Int
(целое число). - Атрибуты:
@id
: Указывает, что это первичный ключ (Primary Key) таблицы.@default(autoincrement())
: Значение этого поля будет автоматически увеличиваться при добавлении новой записи (аналогAUTO_INCREMENT
в SQL).
- Назначение: Уникальный идентификатор для каждой роли.
title
- Тип:
String
(строка). - Атрибуты:
@unique
: Указывает, что значение этого поля должно быть уникальным в таблице.
- Назначение: Название роли (например, «Администратор», «Пользователь»).
User
- Тип:
User?
(опциональная связь с модельюUser
). - Атрибуты:
@relation(fields: [userId], references: [id])
: Указывает, что это поле связано с модельюUser
через внешний ключuserId
, который ссылается на полеid
в моделиUser
.
- Назначение: Связь между ролью и пользователем. Это поле позволяет определить, какой пользователь связан с данной ролью.
userId
- Тип:
Int?
(опциональное целое число). - Назначение: Внешний ключ, который хранит идентификатор пользователя (
id
из моделиUser
), связанного с этой ролью.
2. Связь с моделью User
Модель Role
имеет связь с моделью User
. Это реализовано через поле User
и внешний ключ userId
.
Тип связи
- Один-к-одному (1:1): Каждая роль может быть связана с одним пользователем, но связь является опциональной (пользователь может не быть связан с ролью).
Пример модели User
Для работы этой связи в модели User
должно быть определено поле, которое ссылается на модель Role
. Например:
prisma
1 2 3 4 5 6 7 | model User { id Int @id @default(autoincrement()) name String email String @unique role Role? @relation(fields: [roleId], references: [id]) roleId Int? } |
3. Особенности модели
- Уникальность
title
:- Поле
title
уникально, что гарантирует, что в базе данных не будет двух ролей с одинаковым названием.
- Поле
- Опциональная связь:
- Поля
User
иuserId
являются опциональными (?
), что означает, что роль может существовать без привязки к пользователю.
- Поля
- Автоинкремент для
id
:- Поле
id
автоматически увеличивается при добавлении новой записи, что упрощает управление идентификаторами.
- Поле
Пример использования
Создание роли
javascript
1 2 3 4 5 | const newRole = await prisma.role.create({ data: { title: "Администратор", }, }); |
Создание пользователя с ролью
javascript
1 2 3 4 5 6 7 8 9 10 11 | const newUser = await prisma.user.create({ data: { name: "Иван Иванов", email: "ivan@example.com", role: { create: { title: "Пользователь", }, }, }, }); |
Получение роли с пользователем
javascript
1 2 3 4 5 | const roleWithUser = await prisma.role.findUnique({ where: { id: 1 }, include: { User: true }, }); console.log(roleWithUser); |
Заключение
Модель Role
в Prisma описывает сущность «Роль» с уникальным названием и опциональной связью с пользователем. Она полезна для управления ролями в приложении, например, для разграничения прав доступа (администратор, пользователь и т.д.).