Гарын авлагууд

ORM гэж юу вэ? Апп өгөгдлийн сантай хэрхэн харилцдаг вэ, энгийнээр тайлбарлая

ORM (object-relational mapper) бол апп болон харилцаат өгөгдлийн сангийн хооронд байдаг кодын сан юм. Хөгжүүлэгчид өгөгдлийн сангийн асуулгыг SQL-ээр бичихийн оронд өгөгдлөө програмчлалын хэлэндээ энгийн объектоор ажиллуулдаг — db.booking.create(...) эсвэл Booking.find(...) гэх мэтээр — ORM үүнийг SQL болгон хөрвүүлж, ажиллуулж, үр дүнг буцаан объект болгодог. Түгээмэл жишээ нь TypeScript-д Prisma ба Drizzle, Python-д SQLAlchemy, C#-д Entity Framework Core.

AI-аар бүтээхэд ORM яагаад чухал вэ

AI апп builder таны аппэд өгөгдлийн сан нэмэхдээ ихэвчлэн түүнтэй холбогдох ORM-ийг бас нэмдэг. Та ORM код бичих шаардлагагүй, гэхдээ түүний байгааг мэдэх нь тустай:

  • Таны өгөгдлийн загвар кодонд амьдардаг. ORM-ийн schema файл нь таны аппын өгөгдлийн хамгийн тодорхой тайлбар байдаг: ямар хүснэгт байгаа, хүснэгт бүрт ямар талбар байгаа, мөн тэдгээр хэрхэн холбогддог. Үүнийг уншвал AI таны аппыг зөв ойлгосон эсэхийг хурдан шалгаж болно.
  • Өгөгдлийн сангийн өөрчлөлт migration-ээр дамжина. Таныг «customers-т утасны дугаар нэм» гэхэд AI загварыг шинэчилж, migration үүсгэдэг. Үүнийг мэдэх нь яагаад өөрчлөлт амьд болохоосоо өмнө хэрэглэгдэх шаардлагатайг ойлгоход тусална.
  • Анхдагчаар аюулгүй. ORM асуулгыг SQL injection-ээс хамгаалах байдлаар бүтээдэг; энэ нь гараар SQL угсардаг аппуудын хамгийн түгээмэл аюулгүй байдлын нүхнүүдийн нэг юм.
  • Хурдны урхи. ORM нь нэг асуулга хангалттай байх газарт хэдэн зуун жижиг асуулга санамсаргүй ажиллуулахад хялбар болгодог. Энэ нь AI-аар бүтээсэн аппуудад хуудас удаан байдлын түгээмэл шалтгаан юм.

Өдөр тутмын жишээ

Хоорондоо хэл ойлгодоггүй хоёр хүн — нэг англи аялагч, нэг японы дэлгүүрийн эзэн — орчуулагчаар дамжуулан харилцаж байгааг бодоорой.

Аялагч (таны апп) «Надад хамгийн хямд гурван цай хэрэгтэй» гэнэ. Орчуулагч (ORM) үүнийг нарийн япон хэл (SQL) болгон хөрвүүлж, дэлгүүрийн эзэнд (өгөгдлийн сан) дамжуулна, хариуг англи хэл рүү буцаан орчуулна.

Аялагч японы хэл сурах шаардлагагүй, ихэнх ярианд энэ нь зүгээр. Гэвч нарийн хэлцэлд шууд ярих нь тустай байдаг — тийм учраас ихэнх ORM хөгжүүлэгчдэд шаардлагатай үед raw SQL бичих боломжийг олгодог.

ORM хэрхэн ажилладаг вэ

Postgres зэрэг өгөгдлийн сангууд өгөгдлөө мөр, баганатай хүснэгт-үүдэд хадгалдаг бөгөөд SQL-ээр асуудаг. Програмчлалын хэлнүүд объект-тэй ажилладаг: date, customer, status талбартай захиалга. ORM нь эдгээрийг хооронд нь зурдаг:

Өгөгдлийн сангийн талORM / кодын тал
Хүснэгт bookingsЗагвар Booking
МөрНэг захиалгын объект
Багана starts_atТалбар startsAt
Foreign key customer_idХолбоос booking.customer
SELECT, INSERT, UPDATE, DELETEfind, create, update, delete методууд

Эдгээр дөрвөн үйлдэл бол бараг бүх аппын суурь болдог CRUD үйлдлүүд юм.

Жишээ: Prisma-аар захиалгууд

Энд гоо сайхны салоны захиалгын аппд зориулсан хялбаршуулсан Prisma schema байна. Энэ нь хоёр хүснэгт болон тэдгээрийн холбоосыг дүрсэлдэг:

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
}

Энгийн үгээр: харилцагч нь нэр, давтагдашгүй имэйл, олон захиалгатай; захиалга бүр эхлэх цаг, үйлчилгээтэй бөгөөд нэг харилцагчид хамаарна.

Одоо апп «Lena-ийн ирэх захиалгууд, хамгийн эрт нь эхэнд» гэж хүсэж байна:

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-ээс сэргийлдэг.

Migration

Дараа нь та «харилцагчид утасны дугаараа нэмэх боломжтой болго» гэвэл AI Customer загварт phone String? нэмдэг (? нь заавал биш гэсэн утгатай) бөгөөд migration үүсгэдэг — ALTER TABLE "Customer" ADD COLUMN "phone" TEXT; шиг жижиг SQL скрипт. Migration нь дарааллаар хадгалагддаг тул өгөгдлийн сан бүрийг ижил бүтцэд авчирч болно, мөн өөрчлөлтийн түүх хадгалагдана.

Хэлээр нь түгээмэл ORM-үүд

ХэлТүгээмэл ORM-үүд
TypeScript / JavaScriptPrisma, Drizzle, TypeORM, Sequelize
PythonSQLAlchemy, Django ORM, SQLModel
C#Entity Framework Core
JavaHibernate (ихэвчлэн Spring Data JPA-гаар)
RubyActive Record

ORM-ууд SQL-ийг хэр нуудаг нь өөр өөр байдаг. Prisma нь өөрийн schema хэл, асуулгын хэв маягийг ашигладаг; Drizzle нь SQL-ийн хэлбэрт зориуд ойр байж, бүгдийг типтэй байлгадаг. Knex эсвэл Kysely зэрэг query builder гэдэг илүү хөнгөн хэрэгслүүд нь мөрүүдийг бүрэн объектод зурахгүйгээр кодонд SQL угсрахад тусалдаг.

Гол нэр томьёо

Нэр томьёоУтга
Загвар (Model)Хүснэгт болон түүний талбаруудын кодын тодорхойлолт.
SchemaБүх хүснэгт, талбар, холбоосын бүрэн тайлбар.
RelationЗагваруудын хоорондох холбоос, жишээлбэл захиалга харилцагчид хамаарах.
MigrationӨгөгдлийн сангийн бүтцийг өөрчилдөг хувилбартай скрипт.
Query builderБүрэн объект зураглалгүйгээр кодонд SQL угсрах илүү хөнгөн хэрэгсэл.
N+1 асуудалЖагсаалтад нэг асуулга, дараа нь зүйл бүрт нэмэлт асуулга ажиллуулах — хэмжээ нэмэгдэхэд удаан.
Raw SQLГараар бичсэн SQL, ORM саад болох үед ашиглана.

Түгээмэл буруу ойлголтууд

  • «ORM бол өгөгдлийн сан.» Биш ээ. Энэ бол орчуулагч. Танд Postgres зэрэг өгөгдлийн сан хэрэгтэй хэвээр.
  • «ORM-тэй бол өгөгдлөө ойлгох шаардлагагүй.» Сайн зохион байгуулаагүй хүснэгтүүд ORM-оор ч гэсэн зовуурьтай байдаг. Сайн өгөгдлийн загвар хэрэгслээс илүү чухал.
  • «ORM үргэлж удаан.» Өдөр тутмын асуулгууд сайн. Удаан байдал ихэвчлэн N+1 асуулга эсвэл индекс байхгүйгээс үүсдэг бөгөөд эдгээрийг засч болно.
  • «ORM гэдэг нь SQL injection эрсдэл огт байхгүй гэсэн үг.» Стандарт ORM арга нь аюулгүй боловч хэрэглэгчийн оруулсан утгыг шууд залгасан raw SQL одоо ч аюултай.
  • «Schema файлыг засахад амьд өгөгдлийн сан өөрчлөгдөнө.» Зөвхөн migration үүсгэж, тэр өгөгдлийн санд хэрэглэсний дараа.

AI builder-оосоо юу асуух вэ

  • «Өгөгдлийн схемийг надад үзүүл, хүснэгт бүр болон холбоосыг энгийн хэлээр тайлбарла.»
  • «Энэ төсөл аль ORM ашигладаг вэ, migration-ууд хаана байдаг вэ?»
  • «Ямар ч хүснэгтийг өөрчлөхийн өмнө, одоо байгаа өгөгдөлд нөлөөлөх эсэхийг надад хэл, мөн өгөгдөлтэй баганыг надаас асуусны дараа л хэзээ ч бүү устга.»
  • «Хамгийн удаан хуудсуудыг N+1 асуулгын хувьд шалгаад, шүүж эсвэл эрэмбэлдэг жагсаалтуудад индекс нэм.»
  • «Хэрэглэгчийн оруулсан утга агуулсан асуулга бүр ORM-оор эсвэл параметрээр дамжих ёстой — мөр болгон угсарсан SQL байхгүй байх ёстой.»

Mythex дээрх ORM

Таны апп өгөгдлөө хадгалах шаардлагатай үед Mythex төсөлд зориулсан Postgres өгөгдлийн сан нэмдэг — чатаар асуух эсвэл /database командыг ашиглана уу — мөн түүний холболтын мэдээллийг workspace болон нийтлэгдсэн апп руу оруулдаг (Өгөгдлийн сан). Дараа нь агент таны өгөгдлийг уншиж, хадгалах кодыг бичдэг. Хэрэв танд сонголт байгаа бол — «Prisma ашигла», «SQLAlchemy ашигла», эсвэл «зөвхөн plain SQL, ORM хэрэггүй» — чатад хэлээрэй. Schema-г тайлбарлуулахыг хүссэн үедээ асуугаарай; файлуудыг код засварлагч дээрээс уншиж болно. Илүү өргөн хүрээний талаар өгөгдлийн сан гэж юу вэ болон SQL vs NoSQL гэдгийг үзнэ үү.

Асуултууд

ORM гэж энгийнээр юу вэ?

ORM (object-relational mapper) бол аппынхаа болон харилцаат өгөгдлийн сангийн хооронд байдаг кодын сан юм. Энэ нь хөгжүүлэгчид өгөгдлийг програмчлалын хэл дээрх энгийн объектоор уншиж, хадгалах боломжийг олгодог бөгөөд SQL асуулгыг арын талд нь өөрөө бичдэг.

ORM-ийн жишээ ямар вэ?

Түгээмэл ORM-үүд нь TypeScript болон JavaScript-д Prisma ба Drizzle, Python-д SQLAlchemy ба Django ORM, C#-д Entity Framework Core, Java-д Hibernate, Ruby on Rails-д Active Record орно.

ORM нь SQL бичихээс илүү сайн уу?

Ажлаас хамаарна. ORM нь өдөр тутмын уншилт, бичилтийг бичихэд илүү хурдан, аюулгүй, өөрчлөхөд хялбар болгодог, харин гараар бичсэн SQL нь нарийн төвөгтэй тайлан эсвэл гүйцэтгэлд чухал асуулгад бүрэн хяналт өгдөг. Ихэнх ORM таньд хэрэгтэй үед raw SQL рүү шилжих боломжийг олгодог.

Migration гэж юу вэ?

Migration бол өгөгдлийн сангийн бүтцийг өөрчилдөг, жишээлбэл хүснэгт эсвэл багана нэмдэг жижиг, хувилбартай скрипт юм. ORM нь таны өгөгдлийн загвараас migration үүсгэж чаддаг тул лаптоп, туршилт болон продакшн дээрх өгөгдлийн сан бүр ижил бүтэцтэй байдаг.

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 简体中文 繁體中文(香港) 繁體中文(台灣)