Если вы бэкэнд или разработчик полного стека, работающий в экосистеме Node.js, вы, вероятно, работали с разными инструментами доступа к базе данных.

Если вы работаете с базами данных SQL, такими как MySQL, возможно, вы знакомы с библиотеками ORM (Object Relational Mapper), такими как Sequelize, Typeorm, построителями запросов, например Knex или собственные драйверы баз данных, такие как mysql , которые помогут писать необработанные SQL-запросы.

У каждого из этих инструментов или методов есть свои плюсы и минусы.

Я обнаружил, что среди этих инструментов Prisma намного удобнее для разработчиков.

В этой статье я расскажу новичку о Prisma и покажу, как мы можем разработать гибкие и масштабируемые серверные модули.

Что такое Призма?

Prisma - это ORM нового поколения с открытым исходным кодом, который позволяет легко управлять базой данных и взаимодействовать с ней.

Текущая версия Prisma состоит из 3 основных частей.

  1. Prisma Migrate: инструмент обязательной миграции схемы базы данных.
  2. Клиент Prisma: автоматически генерируемый и безопасный для типов конструктор запросов.
  3. Prisma Studio: визуальный редактор данных в вашей базе данных.

Без дополнительных объяснений давайте начнем что-нибудь строить, чтобы идеи, лежащие в основе Prisma, были хорошо видны.

Давай нырнем

Мы примем во внимание очень простой сценарий сообщения в блоге, когда пользователь создает сообщение в блоге.

  • Для простоты здесь всего 2 сущности: Пользователь и Публикация.
  • Все данные будут храниться в базе данных MySQL.
  • Такие функции, как аутентификация, также отбрасываются для простоты.

В конце будет построен минимальный сценарий TypeScript для запросов к базе данных.

Если вам нужно руководство по настройке MySQL в среде разработки, ознакомьтесь с этим в Руководстве по данным Prisma.



Весь код, который вы найдете здесь, можно найти в следующем репозитории. Он разделен на отдельные ветки по каждой теме, затронутой в этой статье.



Мы начнем с простого сценария Typescript и сначала установим Prisma. Вы можете найти стартовый код в ветке 0-Initial-Script.

1. Настройка Prisma

Во-первых, нам нужно установить Prisma как зависимость для разработки, чтобы мы могли использовать команды Prisma CLI в проекте.

$ npm install prisma --save-dev

Теперь вы можете вызвать Prisma CLI в каталоге, добавив к нему префикс npx. Давайте инициализируем файл схемы Prisma с помощью следующей команды.

$ npx prisma init

Это создаст каталог Prisma с файлом schema.prisma и файлом .env.

Вы можете переместить этот файл .env в корневой каталог, то есть на тот же уровень, что и package.json.

Подождите, что такое схема Prisma?

Схема Prisma - это основной файл конфигурации в вашей настройке Prisma. Он служит источником истины для схемы вашей базы данных и моделей в приложении.

Вы можете использовать схему Prisma,

  • Сгенерируйте правильный клиентский код источника данных (Prisma Client). Он действует как построитель запросов для ваших данных.
  • Создайте миграции для обновления схемы базы данных.

Схема Prisma состоит из следующих частей

  1. Источник данных: определяет подключение к источнику данных.
  2. Генераторы: определяет, что нужно генерировать клиентам на основе модели данных.
  3. Определение (я) модели данных: модель (ы) вашего приложения.

Созданная схема по умолчанию использует PostgreSQL в качестве поставщика. Итак, первое, что нужно сделать, это переключить его на mysql.

datasource db {
  provider = "mysql"
  url      = env("DATABASE_URL")
}

Чтобы подключиться к нашей базе данных, необходимо изменить поле url. Вместо жесткого кодирования вы можете установить это как переменную среды.

Это необходимо указать в следующем общем формате.

DATABASE_URL=mysql://USER:PASSWORD@HOST:PORT/DATABASE

2. Создание схемы базы данных с миграциями

С помощью Prisma Migrate вы можете синхронизировать вашу схему Prisma со схемой базы данных. Это также может помочь вам поддерживать существующие данные в вашей базе данных.

Давайте перейдем к изменению схемы Prisma, подходящей для нашего сценария. Мы можем начать писать нашу модель данных.

model User {
  id        Int     @id @default(autoincrement()) 
  username  String  @unique 
  email     String  @unique 
  posts     Post[] 
}
model Post { 
  id        Int     @id @default(autoincrement()) 
  title     String 
  content   String? 
  authorId  Int 
  author    User?   @relation(fields: [authorId], references: [id]) 
}

Если эта модель кажется немного утомительной и трудной для понимания того, как она будет отображаться в нашей схеме базы данных, вам поможет следующее визуальное представление.

В нашей схеме Prisma есть несколько атрибутов, которые представляют, какими должны быть поля таблицы.

  • @id - Первичные ключи
  • @unique - Уникальные ключи
  • @default - значения по умолчанию
  • @relation - Связь между двумя таблицами

Вы можете найти более подробную информацию в разделе атрибутов справочника по схеме Prisma.

Чтобы сгенерировать миграции,

$ npx prisma migrate dev --name init

Это будет,

  1. Создайте файл миграции SQL для этой миграции.
  2. Запускает сгенерированный файл миграции для базы данных.
  3. Создайте клиент Prisma и обновите его в списке зависимостей package.json, если он недоступен.

Если вам нужно внести изменения в схему базы данных, все, что вам нужно сделать, это внести соответствующие изменения в схему Prisma, а затем запустить команду миграции Prisma.

Если вы использовали TypeORM, этот процесс может быть вам знаком. TypeORM также может автоматически создавать файлы миграции с внесенными вами изменениями схемы.
Но разница в том, что в TypeORM вам нужно управлять отдельными файлами модели, которые сопоставляются с файлами миграции. С Prisma вам нужно только изменить модель (ы) в файле схемы Prisma.

В следующей статье мы подробнее рассмотрим миграцию баз данных с помощью Prisma.

В Prisma есть еще несколько изменений в правилах игры 🚀

3. Самоанализ базы данных

Prisma может создавать модель данных в схеме Prisma для существующей схемы базы данных. Это делается с помощью Самоанализа.

Допустим, вы не хотите использовать миграцию Prisma и выполняете миграцию с помощью простого SQL или любого другого инструмента миграции. С помощью Prisma вы можете повторно проанализировать свою базу данных и заново сгенерировать схему Prisma, а затем отразить эти изменения в своем клиенте Prisma (что мы увидим в дальнейшем).

Таким образом, вы можете постепенно адаптировать Prisma к существующему приложению без больших компромиссов.

4. Клиент Prisma

Prisma client играет ключевую роль в написании логики вашего приложения. Это автоматически созданный конструктор запросов, безопасный для типов.

В случае, если клиента Prisma нет в вашем списке зависимостей package.json, лучше установить пакет @ prisma / client в качестве зависимости.

npm install @prisma/client

Каждый раз, когда схема Prisma изменяется, вам необходимо вызывать prisma generate, чтобы отразить эти изменения в вашем клиенте Prisma.

Давайте внесем изменения в app.ts для запроса данных.

(P.S: на вашей консоли npm run serve запустит сценарий)

Сначала вам нужно импортировать созданный клиент Prisma и создать объект Prisma.

import { PrismaClient } from "@prisma/client";
const prisma = new PrismaClient();

Чтобы создать запись пользователя

Чтобы создать несколько сообщений

Чтобы создать пользователя с сообщениями

Опросить всех пользователей.

Чтобы найти пользователя по электронной почте, но нужно только имя пользователя и заголовки сообщений.

Поскольку типы генерируются автоматически на основе модели данных, которую мы определили в схеме Prisma, все аспекты, от написания логики приложения до управления базой кода, намного проще. Нам вообще не нужно писать какой-либо шаблонный код.

5. Данные о семенах

В некоторых случаях, как только мы создаем схему нашей базы данных, нам необходимо обновить некоторые таблицы базы данных записями для работы. Для этого мы можем заполнить нашу базу данных.
Prisma имеет встроенную функцию посева.

В настоящее время это все еще функция предварительного просмотра и не рекомендуется для использования в производственной среде.

Это будет полностью доступно в следующих выпусках Prisma.

Чтобы это работало, сначала нам понадобятся ts-node и типы узлов в качестве зависимостей разработчика.

npm install ts-node @types/node --save-dev

Нам нужно изменить скрипт package.json, как показано ниже.

Исходный файл должен находиться в том же месте, что и файл схемы Prisma. Пример приведен ниже.

Чтобы засеять эти данные,

$ npx prisma db seed — preview-feature

6. Prisma Studio

Prisma studio - это визуальная студия для данных в вашей базе данных.

Вы можете запустить его,

$ npx prisma studio

Таким образом, вам, вероятно, не потребуется интегрировать инструмент администрирования базы данных, такой как phpMyAdmin, только для визуализации ваших данных.

Заключение

Prisma имеет множество функций для ORM и, безусловно, облегчает жизнь разработчикам.

Помимо тех, которые мы обсуждали, в будущем будет добавлено еще много мощных функций. Поддержка MongoDB и SQL Server, визуализация схемы - это лишь некоторые из них. Ознакомиться с планом на будущее можно в Prisma Roadmap. В Prisma также есть процветающее сообщество разработчиков со всего мира.

Надеюсь, эта статья помогла вам понять основные потоки Prisma и почему это такой мощный инструмент для внутренней разработки. Если у вас есть какие-либо вопросы или отзывы, оставьте комментарий ниже.

Спасибо за прочтение!

Больше контента на plainenglish.io