Модель Role
в Prisma описывает сущность «Роль» в базе данных. Давайте разберём её структуру и особенности.
Описание модели
prisma
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
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
const newRole = await prisma.role.create({
data: {
title: "Администратор",
},
});
Создание пользователя с ролью
javascript
const newUser = await prisma.user.create({
data: {
name: "Иван Иванов",
email: "ivan@example.com",
role: {
create: {
title: "Пользователь",
},
},
},
});
Получение роли с пользователем
javascript
const roleWithUser = await prisma.role.findUnique({
where: { id: 1 },
include: { User: true },
});
console.log(roleWithUser);
Заключение
Модель Role
в Prisma описывает сущность «Роль» с уникальным названием и опциональной связью с пользователем. Она полезна для управления ролями в приложении, например, для разграничения прав доступа (администратор, пользователь и т.д.).