Галоўная / Артыкулы / Практычныя прытамулкі: Drizzle проты Prisma: як выбраць правыя ORM для TypeScript у 2026 годзе

Практычныя прытамулкі: Drizzle проты Prisma: як выбраць правыя ORM для TypeScript у 2026 годзе

Практычныя прыказкі: Drizzle проты Prisma: як выбраць правыя ORM для TypeScript у 2026 годзе: контракты, перакрыцці та месца для додавання коду для команд, якія викорыстоўваюць гэты патерн.

2401 слоў

У гэтым карыце парадоксу перадстаўляецца шлях ад сыр'ёчных матэрыялаў да рабочай системы для: Drizzle vs Prisma: Выбір правильнага TypeScript ORM у 2026 годзе (Дэплайн-аналіз). Акцэнт ставяцца на практычныя крокі, чыстае перакананне і код, які можна проста дадаць у репазітарый без неабяснення меты. У стадзіі агляду неабходна практычна з'явіць інпуты, адпаведальную за крок особу і критэрыя завершэння прычымкі перад зменай коду. Аператары должны магчымае перадзначыць крок з вядомай точкі контролю без неабяснення схованага стану. Конфігурацыю трэба залічыць параду ад коду прыкладнення. Файлы сераўіса, хранальнікі секрэтных дадзеных і флагі функцый належаць у аднам месца, якое аператары можаць пераглядаць без чытання всей структуры.

Drizzle ORM

Калі працюеце з фазай Drizzle ORM, спачатку запісаце кантракт: неабяжлівыя даннэ, сігнал успеху і тое, што выходзіць пад часты няудачны результат. Такі список контроля дапамагае заліцьварыць пазнейшыя змены коду чыстымі. Документавайце як шлях успеху, так і шлях вярнення. Перапрыбуткі, людзкіе перакрыцця і обробка некоректных паведамленняў ёсць часткай продукту, а не пазнейшым дапрацоўкам. Напісце кароткі посібнік: як роцыяваць клучы, як апустошыць чергу, як вярнуць стан да пачатковага праз анулювання последнейго запісу.

Prisma

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

Адзынакаванне схемы

Калі працюеце над стадзіяй адынавання схемы, спачатку запісайце угоду: неабяжныя вхідныя даны, сігнал успеху і тое, што выходзіць у разе частковага невыпання. Такі список пераконвае ў тым, што пазнейшыя змены коду будуць чыстымі. Спрэчвайце гэтую стадзію як угоду межа вхіднымі данымі і перакананымі выходнымі рэзультатамі. Дайце назвы артыкулам, задаце перакананні успеху і адмовіцеся ад тыхоўскага частковага завершэння. Напісце кароткі посібнік: як роцыяваць канты, як спрабавіць очысціць чергу, як анулюваць пасляпэўныя дзеянні. Калі працюеце над стадзіяй адынавання схемы, спачатку запісайце угоду: неабяжныя вхідныя даны, сігнал успеху і тое, што выходзіць у разе частковага невыпання. Такі список пераконвае ў тым, што пазнейшыя змены коду будуць чыстымі. Зберагачыце настройкі за межамі коду прыемніка. Файлы сераўіса, хранільнікі секрэтных данных і флагі функцыйяў должны знаходзіцца ў аднам месцы, куды аператары можаць адбавіць аудыт без неабяжнага чытання всіх элементаў.

Drizzle ORM

Этап Drizzle ORM працюе найкраща, калі яго розглядаць як меркавыя парадакты. Запісайце адны ідеальны прыклад роботы, адну справу з бягам і прыметку па поверненні да пачатковага стану пры расширэнні масштаба. Дакументавайце як успешны, так і варыянты восстанавлення працэй. Перапрыбуткі, людзкі контроль і обработка некоректных паведамленняў ёсць часткай продукту, а не чымось, што дадаецца пазней.

import { pgTable, serial, varchar, text, integer, timestamp } from "drizzle-orm/pg-core";

// Authors table
export const authors = pgTable("authors", {
  id: serial("id").primaryKey(),
  name: varchar("name", { length: 100 }).notNull(),
  bio: text("bio"),
});

// Books table referencing Authors
export const books = pgTable("books", {
  id: serial("id").primaryKey(),
  title: varchar("title", { length: 150 }).notNull(),
  summary: text("summary"),
  authorId: integer("author_id")
    .notNull()
    .references(() => authors.id),
  publishedAt: timestamp("published_at").defaultNow(),
});

Prisma

Этап Prisma працюе найкраща, калі яго розглядаць як меркавыя парадакты. Запісайце адны ідеальны прыклад роботы, адну справу з бягам і прыметку па поверненні да пачатковага стану пры расширэнні масштаба. Валіце маленькія, тэставаныя елементы замест большых скрыптов. Калі якісь крок не выйшае, прычына бягу должна быць адносаваная да конкрэтнай адпаведальнасці, а не да заплутанага ланцоўка дзеянняў. Фіксуйце версіі залежнасцяў і запісайце хэш адображэння, якое выканало дамэ. Возможнасць павторнага стварэння ситуацыі важлівей, чым традыцыйныя знання групы.

model Author {
  id    Int     @id @default(autoincrement())
  name  String
  bio   String?
  books Book[]
}

model Book {
  id          Int      @id @default(autoincrement())
  title       String
  summary     String?
  publishedAt DateTime @default(now())
  authorId    Int
  author      Author   @relation(fields: [authorId], references: [id])
}

Стварэнне запытку

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

Drizzle ORM

Для стадіі Drizzle ORM неабяжна ўзначыць вхідныя даны, адпаведальнага за крок і крэтыяры завершэння пры змены коду. Аперацыйныя працавнікі должны магчымае запускаць крок з вядомай точкі контролю, не падозрываючы схованы стан. Неабяжна задокументаваць як шлях успеху, так і шлях вярнення. Перапрыбуткі, людзкіе перакрыцця і обробка некоректных паведамленняў є часткай продукту, а не чымсь, што дадаецца пазней. Калі дозволяе бюджет, неабяжна дадаць тэст на працэс, які пераблакуе критычны шлях у CI з викорыстаннем фіксатываў, а не рэальных платных API.

const results = await db
  .select({
    bookId: books.id,
    title: books.title,
    publishedAt: books.publishedAt,
    authorName: authors.name,
  })
  .from(books)
  .leftJoin(authors, eq(books.authorId, authors.id))
  .where(eq(authors.id, authorId))
  .orderBy(books.publishedAt);
const result = await db.transaction(async (tx) => {
  const [newAuthor] = await tx.insert(authors).values({
    name: "Alice",
    bio: "Fantasy author",
  }).returning({ id: authors.id });

  const [newBook] = await tx.insert(books).values({
    title: "The Dream Forest",
    authorId: newAuthor.id,
  }).returning();

  return { newAuthor, newBook };
});

Prisma

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

const results = await prisma.book.findMany({
  where: { authorId },
  select: {
    id: true,
    title: true,
    publishedAt: true,
    author: {
      select: { name: true },
    },
  },
  orderBy: { publishedAt: "asc" },
});
const newBook = await prisma.book.create({
  data: {
    title: "The Dream Forest",
    summary: "A surreal adventure.",
    author: {
      create: {
        name: "Alice",
        bio: "Fantasy author",
      },
    },
  },
});

Падтрымка міграцыі

Для стадіі падкпарацыі пераказоў неабходна ўзначыць вхідныя даны, адпаведальнага за выкананне крока і крэтырыя завершэння пры перамены коду. Аператары должны магчымае запускаваць крок з вядомай точкі контролю, не спрабоўваючы здагадвацца пра схованы стан. Спрыяйце цій стадіі як даговору межа вхідных даных і перакананых выходных рэзультатаў. Даць назвы артыфактам, узначыць крэтырыі успеху і не падтрымваць бяспечнае частковае завершэння. Дадзіце тэст на перакананне, які працюе з крытычным шляхам у системе CI за дапамою фіксатараў, а не з рэальнымі платнымі API, калі тое дазволяе бюджет. Для стадіі падкпарацыі пераказоў неабходна ўзначыць вхідныя даны, адпаведальнага за выкананне крока і крэтырыя завершэння пры перамены коду. Аператары должны магчымае запускаваць крок з вядомай точкі контролю, не спрабоўваючы здагадвацца пра схованы стан. Храніце настройкі праза код аплікацыі. Файлы сяродавішча, хранальнікі секрэтных дадзеных і флагі функций должны знаходзіцца ў аднам месцы, якое аператары можаць пераглядаць, не чытаяўшы весь код.

Drizzle ORM

Калі працюеце над стадзіяй Drizzle ORM, спачатку запісайце контракт: неабяжлівыя вхідныя даны, сигнал успеху і тое, што выходзіць у разе частковага невыпання. Такі список контроля дапамагае заліцьварыць пазнейшыя змены ў кодзе. Документавайце як правільны, так і альтернатыўны шляхы роботы. Практыкі перапрыбутку, людзкія контрольны пункты і обработка некоректных паведамленняў є часткай продукту, а не элементамі пазнейшага дапрацоўвання. Напісайце кароткі посібнік: як зменяць кантрольныя ключы, як спрачысці кола заповнення, як анулюваць пасляпэўныя дзеянні.

npx drizzle-kit generate
npx drizzle-kit migrate
npx drizzle-kit push

Prisma

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

npx prisma migrate deploy
npx prisma db push

Адрабатка транзакцый

Калі працуеце над стадзіяй обробкі транзакцый, спачатку запісайце контракт: неабяжлівыя даннэ, сігнал успеху і тое, што выходзіць у разе частковага нявыпання. Такі список перакладзець пазнейшыя змены коду ў правільны направленні. Спрэцьвуйце да гэтай стадзіі як да контракту межа даннэмі і перакананымі выходамі. Дайце назвы элементам, задаце критэрыя успеху і не падзволяйце частковаму завершэнню без паведамлення. Напісайце кароткі посібнік: як зменяць кантроллеры, як апошніць чергу, як вярнуць стан да пачатковага праз анулювання последней транзакцыі. Калі працуеце над стадзіяй обробкі транзакцый, спачатку запісайце контракт: неабяжлівыя даннэ, сігнал успеху і тое, што выходзіць у разе частковага нявыпання. Такі список перакладзець пазнейшыя змены коду ў правільны направленні. Зберагаце настройкі паза кодам прыемніка. Файлы сераўіса, храненні секрэтных данных і флагі функцыйяў должны знаходзіцца ў аднам месцы, куда аператары можуць адбавіць аудыт без неабяжлівага чытання всей структуры.

Drizzle ORM

Этап Drizzle ORM працюе найкраща, калі яго розглядаць як меркавыя парадакты. Запісайце адны ідеальны прыклад роботы, адну справу з бягам і прыметку па поверненні да пачатковага стану пры расширэнні масштаба. Дакументавайце як успешны, так і варыянты восстанавлення працэй. Перапрыбуткі, людзкі контроль і обработка некоректных паведамленняў є часткай продукту, а не чымсь, што дадаецца пазней.

await db.transaction(async (tx) => {
  const newAuthor = await tx.insert(authors).values({
    name: "Alice Walker",
    bio: "Pulitzer Prize-winning author",
  }).returning();

  await tx.insert(books).values({
    title: "Journey to the Mountains",
    summary: "A story about adventure and discovery.",
    authorId: newAuthor[0].id,
  });
});

Prisma

Этап Prisma працюе найкраща, калі яго розглядаць як меркавыя парадакты. Запісайце адны ідеальны прыклад роботы, адну справу з бягам і прыметку па поверненні да пачатковага стану пры расширэнні масштаба. Валіце маленькія, тэставаныя елементы замест большых скрыптов. Калі якісь крок не выйшае, прычына бягу должна быць адносаваная да конкрэтнай адпаведальнасці, а не да заплутанага ланцоўка дзеянняў. Фіксуйце версіі залежнасцяў і запісайце хэш адображэння, якое выканало дамэ. Возможнасць павторнага стварэння ситуацыі лепшая за традыцыйныя знання групы.

await prisma.$transaction(async (tx) => {
  const newAuthor = await tx.author.create({
    data: {
      name: "Alice Walker",
      bio: "Pulitzer Prize-winning author",
    },
  });

  await tx.book.create({
    data: {
      title: "Journey to the Mountains",
      summary: "A story about adventure and discovery.",
      authorId: newAuthor.id,
    },
  });
});

Прыткасць працы

Этап «Прыткасць працы» работае наяўней, калі яго спрыяваць як мерыемую паверхню. Зафіксавайце адна ідеальная версія роботы, адзін прыклад неудачы і запіс пра вярненне да пачатковага стану перш чым расширваць масштабы. Спрыяйце цэму этапу як даговор між вхіднымі данымі і перакананымі выходнымі рэзультатамі. Дайце назвы артыфактам, задаць критэрыя успеху і не падзеўляйцеся частым, непূরным выкананнем задач. Зафіксавайце версіі залежнасцяў і запісаўце хеш-значэнне зображэння, якое выканало дамаўку. Возможнасць павторэння перажыцця важлівей, чым традыцыйныя знання. Этап «Прыткасць працы» работае наяўней, калі яго спрыяваць як мерыемую паверхню. Зафіксавайце адна ідеальная версія роботы, адзін прыклад неудачы і запіс пра вярненне да пачатковага стану перш чым расширваць масштабы. Зберагаўце настройкі праза код аплікацыі. Файлы сяродавішча, хранільнікі секрэтных дадзенняў і флагі функцыйяў должны знаходзіцца ў аднам месцы, якое аператары можаць пераглядаць без неабходнасці чытання всей структуры.

Drizzle ORM

Для стадіі Drizzle ORM неабяжна ўскладнення: паўтарыць заданне, власнік крока і крэтырыя завершэння, прычаму трэба зменіць код. Аператары должны магчымае запускіць крок з вядомай точкі контролю, не спрабоўваючы здагадвацца пра схованы стан. Неабяжна задокументаваць як шлях успеху, так і шлях вярнення. Паўтарыць спробы, людзкія перакрыцця і обработка некоректных паведамленняў ёсць часткай продукту, а не пасляднім дапрацоўкам. Калі бюджет дазволяе, неабяжна адключыць тэст на працэс у CI, які перабяжвае критычны шлях за дапамою фікстураў, а не рэальных платных API.

Prisma

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

Заключныя меркі

У стадії «Заключныя заўважэнні» неабходна практычна адзначыць вхідныя даны, адпаведальнага за крок і критэрыя завершэння пры перадзеіснаванні коду. Аператары должны магчымаць перзапуск кроку з вядомай точкі контролю, не падозрываючы прыхованы стан. Спрыяйце цій стадіўцы як даговору межа вхідных даных і перакананых выходных рэзультатаў. Даць назвы артыфактам, практычна адзначыць перакананні ў успеху і не прабачаць бяспечнага частковага завершэння. Дадзіце тэст на перакананне, які працюе з критычным шляхам у системе CI за дапамою фіксатараў, а не з рэальнымі платнымі API, калі тое дазволяе бюджэт. У стадії «Заключныя заўважэнні» неабходна практычна адзначыць вхідныя даны, адпаведальнага за крок і критэрыя завершэння пры перадзеіснаванні коду. Аператары должны магчымаць перзапуск кроку з вядомай точкі контролю, не падозрываючы прыхованы стан. Храніце настройкі параду ад коду прыемленае. Файлы сяродавішча, хранільнікі секрэтных дадзеных і флагі функций должны знаходзіцца ў аднам месцы, якое аператары можаць пераглядаць, не чытаяўшы весь граф.

Чэкліст аператыўнай роботы

Этап чэкліста аператыўнай роботы працюе наякша, калі яго спрыяваць як мерыемую структуру. Запісайте адну ідеальную версію роботы, адзін прыклад неудачы і зьмест крока абратнага запуску прычын перад расшырэньем масштаба.

Запісвайце часы выконання і косты токеноў або запытаў па боку ад функцыйнаых рэзультатаў. Візуабельнасьц костаў з самага пачатку запобегае неспакойным рахункам, калі працэс пераходзіць з дэмавай версіі ў спяльныя среды.

Зафіксавайце версіі залежнасьцей і запісвайце хеш адображэння, якое выканало дэму. Возможнасьц перадаравання результатаў лепшая за традыцыйныя знаёмства.

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

Напісце кароткі посьбнік: як змяняць клучы, як спрачыслаць чергу запытаў, як абратна запусціць пярэдні крок.

Лепшыя маленькія, тэставаныя елементы чым велікія скрыпты. Калі якісь крок не выйшае, адказнасць за гэта патрабуецца на аднай відпаведальной часткаўкі, а не на заплутанай лінійцы задач.

Перш чым пераходзіць да наступнага кроку, заморозьце версіі, зафіксавайце ідеальны прымер дзейнаў для критычнага маршруту і паказвайце способы вярнення да пачатковага стану. У спільных средах неабходны ліміты частоты запытоў, пераказкі стану аб’ектаў і чысткая адпаведальнасць за зміну секрэтных даных. Лепшая надзеяная надзейнасць чым крэатывныя, але разовыя дамахі.

Запіс для пакета 63abb6aa882b: не кладзіце ключы прадаўцаў у репазітарый, задаце ліміт токена на кожную сесію і зберагаце прымеры дзейнаў разам з фіксатрамі для ацэнкі, каб пазнейшыя замены моделей заставаліся пораўнанымі.