Guies

Què és un ORM? Com les aplicacions parlen amb les bases de dades, explicat

Un ORM (object-relational mapper) és una biblioteca de codi que se situa entre una aplicació i una base de dades relacional. En lloc d'escriure consultes de base de dades en SQL, els desenvolupadors treballen amb les dades com a objectes normals del seu llenguatge de programació —db.booking.create(...) o Booking.find(...)— i l'ORM ho tradueix a SQL, l'executa i torna els resultats convertits en objectes. Exemples populars són Prisma i Drizzle per a TypeScript, SQLAlchemy per a Python i Entity Framework Core per a C#.

Per què importen els ORM quan construeixes amb IA

Quan un constructor d'aplicacions amb IA afegeix una base de dades a la teva aplicació, normalment també hi afegeix un ORM per parlar-hi. No hauràs d'escriure codi d'ORM, però ajuda saber que hi és:

  • El model de dades viu al codi. El fitxer d'esquema de l'ORM sovint és la descripció més clara de les dades de la teva aplicació: quines taules existeixen, quins camps té cadascuna i com es connecten. Llegir-lo és una manera ràpida de comprovar que la IA ho ha entès.
  • Els canvis a la base de dades passen per migracions. Quan demanes «afegeix un número de telèfon als clients», la IA actualitza el model i crea una migració. Saber-ho t'ajuda a entendre per què un canvi pot haver d'aplicar-se abans de funcionar en directe.
  • Seguretat per defecte. Els ORM construeixen les consultes de manera que es protegeixen contra la injecció SQL, un dels forats de seguretat més habituals en aplicacions que munten consultes a mà.
  • Trampes de velocitat. Els ORM fan fàcil executar sense voler centenars de consultes petites quan en bastaria una. És una causa habitual de pàgines lentes en aplicacions construïdes amb IA.

Una analogia del dia a dia

Imagina un viatger català i un botiguer japonès que no comparteixen idioma i es comuniquen a través d'un intèrpret.

El viatger (la teva aplicació) diu: «M'agradaria els tres tès més barats que tingueu». L'intèrpret (l'ORM) ho tradueix a un japonès precís (SQL), ho passa al botiguer (la base de dades) i tradueix la resposta de nou al català.

El viatger no aprèn japonès, i per a la majoria de converses això és suficient. Però per a una negociació complicada pot ajudar parlar directament, per això la majoria d'ORM deixen als desenvolupadors escriure SQL en brut quan cal.

Com funciona un ORM

Bases de dades com Postgres emmagatzemen les dades en taules de files i columnes, i es consulten amb SQL. Els llenguatges de programació treballen amb objectes: una reserva amb una data, un client i un estat. L'ORM relaciona un món amb l'altre:

Costat de la base de dadesCostat de l'ORM / codi
Taula bookingsModel Booking
FilaUn objecte de reserva
Columna starts_atCamp startsAt
Clau forana customer_idRelació booking.customer
SELECT, INSERT, UPDATE, DELETEMètodes find, create, update, delete

Aquestes quatre operacions són les accions CRUD sobre les quals es basa gairebé qualsevol aplicació.

Un exemple pas a pas: reserves amb Prisma

Aquí teniu un esquema simplificat de Prisma per a una aplicació de reserves d'una perruqueria. Descriu dues taules i com s'enllacen:

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
}

En paraules senzilles: un client té un nom, un correu electrònic únic i moltes reserves; cada reserva té una hora d'inici, un servei i pertany a un sol client.

Ara l'aplicació vol «les properes reserves de la Lena, la més propera primer»:

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

L'ORM ho converteix en SQL més o menys així, l'executa i retorna una llista d'objectes de reserva:

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;

Els $1 i $2 són marcadors de posició: el correu electrònic i la data s'envien per separat del text de la consulta, i això és el que impedeix la injecció SQL.

Migracions

Si després demanes «deixa que els clients afegeixin un número de telèfon», la IA afegeix phone String? al model Customer (el ? vol dir que és opcional) i genera una migració: un petit script SQL com ALTER TABLE "Customer" ADD COLUMN "phone" TEXT;. Les migracions es desen en ordre, de manera que cada còpia de la base de dades es pot portar a la mateixa estructura, i es conserva l'historial de canvis.

ORM habituals per llenguatge

LlenguatgeORM habituals
TypeScript / JavaScriptPrisma, Drizzle, TypeORM, Sequelize
PythonSQLAlchemy, ORM de Django, SQLModel
C#Entity Framework Core
JavaHibernate (sovint amb Spring Data JPA)
RubyActive Record

Els ORM varien en quant amaguen el SQL. Prisma utilitza el seu propi llenguatge d'esquema i el seu estil de consulta; Drizzle manté deliberadament la forma propera al SQL i alhora tot tipat. Les eines més lleugeres anomenades constructors de consultes (query builders), com Knex o Kysely per a TypeScript, ajuden a construir SQL en el codi sense relacionar les files amb objectes complets.

Termes clau

TermeSignificat
ModelLa definició en codi d'una taula i dels seus camps.
EsquemaLa descripció completa de totes les taules, camps i relacions.
RelacióUn enllaç entre models, com una reserva que pertany a un client.
MigracióUn script versionat que canvia l'estructura de la base de dades.
Constructor de consultesUna eina més lleugera per construir SQL en el codi sense el mapatge complet a objectes.
Problema N+1Executar una consulta per a una llista i després una més per a cada element: lent a gran escala.
SQL en brutSQL escrit a mà, usat quan l'ORM es interposa.

Idees errònies habituals

  • «Un ORM és una base de dades». No ho és. És un traductor. Encara necessites una base de dades com Postgres.
  • «Amb un ORM no cal entendre les dades». Les taules mal dissenyades fan el mateix mal a través d'un ORM. Un bon model de dades importa més que l'eina.
  • «Els ORM sempre són lents». Les consultes del dia a dia van bé. La lentitud sol venir de patrons com les consultes N+1 o de la falta d'índexs, i això es pot arreglar.
  • «ORM vol dir que no hi ha mai risc d'injecció SQL». Els mètodes estàndard de l'ORM són segurs, però el SQL en brut amb entrada d'usuari enganxada encara és perillós.
  • «Editar el fitxer d'esquema canvia la base de dades en directe». Només ho fa quan es crea una migració i s'aplica a aquella base de dades.

Què preguntar al teu constructor d'IA

  • «Mostra'm l'esquema de la base de dades i explica cada taula i relació en català senzill.»
  • «Quin ORM fa servir aquest projecte i on són les migracions?»
  • «Abans de canviar qualsevol taula, digues-me si les dades existents es veuran afectades, i no eliminis mai una columna amb dades sense preguntar.»
  • «Revisa les pàgines més lentes per detectar consultes N+1 i afegeix índexs on es filtrin o ordenin llistes.»
  • «Assegura't que cada consulta que usa dades d'usuari passi per l'ORM o usi paràmetres: res de SQL construït amb cadenes de text.»

Els ORM a Mythex

Quan la teva aplicació necessita desar dades, Mythex afegeix una base de dades Postgres dedicada al projecte —demana-ho al xat o fes servir l'ordre /database— i injecta els seus detalls de connexió a l'espai de treball i a l'aplicació publicada (Base de dades). Després, l'agent escriu el codi que llegeix i desa les teves dades. Si tens una preferència —«fes servir Prisma», «fes servir SQLAlchemy» o «SQL pur, sense ORM»— digues-ho al xat. Demana-li que t'expliqui l'esquema sempre que vulguis comprovar l'estructura; pots llegir els fitxers a l'editor de codi. Per a la visió general, consulta què és una base de dades i SQL vs NoSQL.

Preguntes

Què és un ORM, en termes senzills?

Un ORM (object-relational mapper, o mapejador objecte-relacional) és una biblioteca de codi que se situa entre la teva aplicació i una base de dades relacional. Permet als desenvolupadors llegir i desar dades com a objectes normals del seu llenguatge de programació, i escriu per ells les consultes SQL entre bastidors.

Quins són alguns exemples d'ORM?

Els ORM més comuns són Prisma i Drizzle per a TypeScript i JavaScript, SQLAlchemy i l'ORM de Django per a Python, Entity Framework Core per a C#, Hibernate per a Java i Active Record a Ruby on Rails.

És millor un ORM que escriure SQL?

Depèn de la feina. Un ORM fa que les lectures i escriptures del dia a dia siguin més ràpides d'escriure, més segures i més fàcils de canviar, mentre que el SQL escrit a mà dona control total per a informes complexos o consultes crítiques per al rendiment. La majoria d'ORM et deixen baixar a SQL en brut quan ho necessitis.

Què és una migració?

Una migració és un script petit i versionat que canvia l'estructura de la base de dades, com ara afegir una taula o una columna. Els ORM poden generar migracions a partir del model de dades perquè cada còpia de la base de dades —al portàtil, en les proves i en producció— acabi amb la mateixa estructura.

Mythex · Pricing · Crea qualsevol cosa amb IA · Plantilles de llocs web i aplicacions · Mythex comparat · Glossari de creació d’aplicacions amb IA · Eines gratuïtes per crear aplicacions amb IA · English

English አማርኛ العربية Български বাংলা Bosanski Č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 简体中文 繁體中文(香港) 繁體中文(台灣)