Водичи

Што е ORM? Како апликациите комуницираат со базите на податоци, објаснето

ORM (објектно-релациски мапер) е библиотека за код што се наоѓа помеѓу апликацијата и релациона база на податоци. Наместо да пишуваат барања во SQL, програмерите работат со податоците како со обични објекти во својот програмски јазик — db.booking.create(...) или Booking.find(...) — а ORM-от тоа го преведува во SQL, го извршува и резултатите ги враќа назад како објекти. Познати примери се Prisma и Drizzle за TypeScript, SQLAlchemy за Python и Entity Framework Core за C#.

Зошто ORM-ите се важни кога градите со AI

Кога AI алатката за градење апликации ќе додаде база на податоци во вашата апликација, обично додава и ORM за да комуницира со неа. Нема да треба да пишувате ORM код, но корисно е да знаете дека постои:

  • Вашиот модел на податоци живее во кодот. Датотеката со шема на ORM-от често е најјасниот опис на податоците во вашата апликација: кои табели постојат, кои полиња има секоја и како се поврзуваат. Ако ја прочитате, брзо ќе проверите дали AI ја разбрал вашата апликација.
  • Промените во базата минуваат преку миграции. Кога ќе побарате „додај телефонски број на клиентите“, AI ќе го ажурира моделот и ќе создаде миграција. Со тоа разбирате зошто една промена понекогаш мора прво да се примени за да проработи во живо.
  • Безбедност по основно. ORM-ите ги градат упитите на начин што ве штити од SQL injection, еден од најчестите безбедносни пропусти во апликациите што ги склопуваат упитите рачно.
  • Замки за брзина. ORM-ите лесно може случајно да извршат стотици мали упити таму каде што би доволел еден. Тоа е честа причина за бавни страници во апликациите направени со AI.

Секојдневна аналогија

Замислете патник од Британија и продавач во Јапонија кои не зборуваат ист јазик и разговараат преку преведувач.

Патникот (вашата апликација) вели: „Би сакал трите најевтини чаја што ги имате.“ Преведувачот (ORM-от) го пренесува тоа на прецизен јапонски (SQL), го предава на продавачот (базата) и одговорот го преведува назад на англиски.

Патникот никогаш не научува јапонски, и за повеќето разговори тоа е во ред. Но за сложено преговарање може да биде корисно да се зборува директно — затоа повеќето ORM-и дозволуваат програмерите да пишуваат чист SQL кога е потребно.

Како работи ORM-от

Базите како Postgres ги чуваат податоците во табели со редови и колони и се прашуваат со SQL. Програмските јазици работат со објекти: резервација со date, customer и status. ORM-от ги мапира едното на другото:

Страна на базатаСтрана на ORM / кодот
Табела bookingsМодел Booking
РедЕден објект на резервација
Колона starts_atПоле startsAt
Страниот клуч customer_idВрска booking.customer
SELECT, INSERT, UPDATE, DELETEМетоди find, create, update, delete

Тие четири операции се CRUD акциите на кои се темели речиси секоја апликација.

Работен пример: резервации со Prisma

Ове е поедноставена Prisma шема за апликација за резервации во салон. Опишува две табели и како се поврзани:

model Customer {
  id       Int       @id @default(autoincrement())
  name     String
  email    String    @unique
  bookings Booking[]
}

model Booking {
  id         Int      @id @default(autoincrement())
  startsAt   DateTime
  service    String
  customer   Customer @relation(fields: [customerId], references: [id])
  customerId Int
}

Со обични зборови: клиентот има име, единствена е-пошта и многу резервации; секоја резервација има почетно време, услуга и припаѓа на еден клиент.

Сега апликацијата сака „предстојните резервации на Лена, најблиските прво“:

const bookings = await db.booking.findMany({
  where: {
    customer: { email: "lena@example.com" },
    startsAt: { gte: new Date() },
  },
  orderBy: { startsAt: "asc" },
});

ORM-от го претвора тоа во SQL приближно вака, го извршува и враќа листа од објекти на резервации:

SELECT b.* FROM "Booking" b
JOIN "Customer" c ON c.id = b."customerId"
WHERE c.email = $1 AND b."startsAt" >= $2
ORDER BY b."startsAt" ASC;

Знаците $1 и $2 се места за вредности: е-поштата и датумот се пренесуваат одвоено од текстот на упитот, и тоа е она што го спречува SQL injection.

Миграции

Ако потоа побарате „дозволи на клиентите да додаваат телефонски број“, AI ќе додаде phone String? во моделот Customer (знакот ? значи дека полето е изборно) и ќе генерира миграција — мала SQL скрипта како ALTER TABLE "Customer" ADD COLUMN "phone" TEXT;. Миграциите се зачувуваат по редослед, па секоја копија на базата може да се доведе до иста структура, а историјата на промени се чува.

Вообичаени ORM-и по јазик

ЈазикВообичаени ORM-и
TypeScript / JavaScriptPrisma, Drizzle, TypeORM, Sequelize
PythonSQLAlchemy, Django ORM, SQLModel
C#Entity Framework Core
JavaHibernate (често преку Spring Data JPA)
RubyActive Record

ORM-ите се разликуваат по тоа колку го скриваат SQL-от. Prisma користи сопствен јазик за шеми и стил на упити; Drizzle намерно останува блиску до обликот на SQL, но сè го прави типизирано. Полесни алатки наречени query builders, како Knex или Kysely за TypeScript, помагаат SQL да се склопува во кодот без да се мапираат редовите во целосни објекти.

Клучни поими

ПоимЗначење
ModelКодна дефиниција на табела и нејзините полиња.
SchemaЦелосен опис на сите табели, полиња и врски.
RelationВрска помеѓу модели, како резервација што припаѓа на клиент.
MigrationВерзионирана скрипта што ја менува структурата на базата.
Query builderПолесна алатка за склопување SQL во кодот без целосно мапирање на објекти.
N+1 problemЕден упит за листа, плус по еден за секоја ставка — бавно при зголемување.
Raw SQLРачно напишан SQL, кога ORM-от ќе пречи.

Чести заблуди

  • „ORM е база на податоци.“ Не е. Тој е преведувач. Сè уште ви треба база како Postgres.
  • „Со ORM не треба да ги разбирате податоците.“ Лошо дизајнираните табели се исто толку болни и преку ORM. Добриот модел на податоци е поважен од алатката.
  • „ORM-ите секогаш се бавни.“ Секојдневните упити се во ред. Бавноста обично доаѓа од обрасци како N+1 упити или недостасувачки индекси, а тоа може да се поправи.
  • „ORM значи никаков ризик од SQL injection, никогаш.“ Стандардните ORM методи се безбедни, но сурови SQL-упити со залепен внес од корисник сè уште се опасни.
  • „Измената на датотеката со шема ја менува живата база.“ Само кога ќе се создаде и примени миграција на таа база.

Што да побарате од вашата AI алатка

  • „Покажи ми ја шемата на базата и објасни секоја табела и врска со едноставни зборови.“
  • „Кој ORM го користи овој проект и каде се миграциите?“
  • „Пред да менуваш која било табела, кажи ми дали ќе се засегнат постоечките податоци и никогаш не брши колона со податоци без да прашаш.“
  • „Провери ги најбавните страници за N+1 упити и додај индекси таму каде што листите се филтрираат или подредуваат.“
  • „Осигурај се дека секој упит што користи внес од корисник оди преку ORM или користи параметри — без SQL склопен со стрингови.“

ORM-и во Mythex

Кога вашата апликација треба да зачува податоци, Mythex додава посветена Postgres база во проектот — прашајте во чат или користете ја командата /database — и ги вметнува нејзините податоци за поврзување во работниот простор и објавената апликација (Database). Агентот потоа ја пишува кодот што ги чита и зачувува вашите податоци. Ако имате преференца — „користи Prisma“, „користи SQLAlchemy“ или „чист SQL, без ORM“ — кажете го во чат. Замолете го да ви ја објасни шемата кога сакате да ја проверите структурата; датотеките можете да ги читате во уредникот на кодот. За поширока слика, видете што е база на податоци и SQL vs NoSQL.

Прашања

Што е ORM едноставно кажано?

ORM (објектно-релациски мапер) е библиотека за код што се наоѓа помеѓу вашата апликација и релациона база на податоци. Таа овозможува програмерите да ги читаат и зачувуваат податоците како обични објекти во нивниот програмски јазик, а SQL-барањата ги пишува автоматски во позадина.

Кои се примери за ORM?

Вообичаени ORM-и се Prisma и Drizzle за TypeScript и JavaScript, SQLAlchemy и Django ORM за Python, Entity Framework Core за C#, Hibernate за Java и Active Record во Ruby on Rails.

Дали ORM е подобар од пишување SQL?

Зависи од задачата. ORM ги прави секојдневните читања и запишувања побрзи за пишување, побезбедни и полесни за промена, додека рачниот SQL дава целосна контрола за сложени извештаи или упити критични за перформанси. Повеќето ORM-и дозволуваат да се префрлите на чист SQL кога ќе ви треба.

Што е миграција?

Миграцијата е мала, верзионирана скрипта што ја менува структурата на базата, како додавање табела или колона. ORM-ите можат да генерираат миграции од вашиот модел на податоци, така што секоја копија на базата — на лаптоп, во тестирање и во продукција — ја добива истата структура.

Mythex · Pricing · Градете што било со AI · Шаблони за веб-страници и апликации · Mythex во споредба · Речник за градење апликации со AI · Бесплатни алатки за градење апликации со AI · English

English አማርኛ العربية Български বাংলা Bosanski Català Čeština Dansk Deutsch Ελληνικά Español Español (España) Eesti فارسی Suomi Français Français (Canada) ગુજરાતી हिन्दी Hrvatski Magyar Հայերեն Bahasa Indonesia Íslenska Italiano 日本語 ქართული Қазақ тілі ಕನ್ನಡ 한국어 Lietuvių Latviešu മലയാളം Монгол मराठी Bahasa Melayu မြန်မာ Norsk bokmål Nederlands ਪੰਜਾਬੀ Polski Português (Brasil) Português (Portugal) Română Русский Slovenčina Slovenščina Soomaali Shqip Srpski Svenska Kiswahili தமிழ் తెలుగు ไทย Tagalog Türkçe Українська اردو Tiếng Việt 简体中文 繁體中文(香港) 繁體中文(台灣)