# ORM (Nesne-İlişkisel Eşleme)

Adres: https://softwaredictionary.org/tr/terimler/orm
Kategori: Veritabanları
Son güncelleme: 2026-09-29

Kısaca: ORM, veritabanı tablolarını programlama dilinizdeki nesnelere eşleyen ve ham SQL yerine kodla veri okuyup yazmanızı sağlayan bir kütüphanedir.

## ORM nedir?

Nesne-ilişkisel eşleme (object-relational mapping) anlamına gelen ORM, iki farklı dünya arasında köprü kurar: uygulama kodunuzun kullandığı nesneler ve sınıflar ile ilişkisel bir veritabanının kullandığı tablolar ve satırlar. Bir ORM ile `users` tablosundaki bir satır bir `User` nesnesi olur ve bu nesneyi kaydetmek değişikliği veritabanına geri yazar.

Arka planda ORM sizin için SQL üretir. Tablolarınızı tarif eden modeller tanımlar, sonra `find`, `create` ya da `update` gibi metotları çağırırsınız; ORM bu çağrıları SQL sorgularına çevirir, çalıştırır ve sonuçları yeniden nesnelere dönüştürür. Çoğu ORM ayrıca şema geçişlerini (migration), tablolar arasındaki ilişkileri ve SQL injection'a karşı koruyan parametreli sorguları da yönetir.

Popüler ORM'ler arasında Java için Hibernate, .NET için Entity Framework, Python için Django ORM ve SQLAlchemy, Ruby on Rails için Active Record ve TypeScript için Prisma, Drizzle ve TypeORM bulunur. ORM'i bir tercüman gibi düşünebilirsiniz: siz programlama dilinizi konuşursunuz, o da veritabanı için SQL'e çevirir.

ORM'ler zaman kazandırır ve tekrarlayan kodu azaltır, ancak hangi sorguların gerçekten çalıştığını gizleyebilirler. Yaygın bir tuzak N+1 sorgu sorunudur: bir liste yüklenip ardından her öğenin ilişkili kayıtları yüklendiğinde, tek bir birleştirilmiş sorgu yerine öğe başına bir sorgu çalışır. Birçok ekip günlük işlemler için ORM kullanır; karmaşık ya da performansın kritik olduğu sorgular için ham SQL yazar veya daha hafif bir sorgu oluşturucu (query builder) kullanır.

## Önemli noktalar

- ORM, veritabanı tablolarını sınıflara, satırları nesnelere eşler.
- Sizin için SQL üretir; böylece programlama dilinizde çalışırsınız.
- Çoğu ORM ilişkileri, migration'ları ve parametreli sorguları yönetir.
- N+1 sorgu sorunu gibi gizli verimsizliklere dikkat edin.

## Örnek: Bir ORM (Prisma) ile kayıt oluşturmak ve sorgulamak

```typescript
// Insert a row without writing SQL by hand
const user = await prisma.user.create({
  data: { name: "Ada", email: "ada@example.com" },
});

// Roughly equivalent to:
// SELECT * FROM "User" WHERE email LIKE '%@example.com' ORDER BY name;
const users = await prisma.user.findMany({
  where: { email: { endsWith: "@example.com" } },
  orderBy: { name: "asc" },
});
```

## Sık sorulan sorular

**ORM mi yoksa ham SQL mi kullanmalıyım?**

Günlük oluşturma, okuma, güncelleme ve silme işlemleri için ORM genellikle iyi bir varsayılandır; çünkü yazması daha hızlı ve daha güvenlidir. Karmaşık raporlar ya da performansın kritik olduğu sorgular için ham SQL çoğu zaman daha iyidir ve birçok proje ikisini birlikte kullanır.

**ORM, SQL injection'ı önler mi?**

ORM'ler varsayılan olarak parametreli sorgular kullanır; bu da SQL injection'ların çoğuna karşı koruma sağlar. Kullanıcı girdisini ORM'in ham SQL özelliklerine parametresiz eklerseniz yine de savunmasız kalabilirsiniz.

**N+1 sorgu sorunu nedir?**

Kod, bir kayıt listesini yüklemek için bir sorgu, ardından her kaydın ilişkili verisi için ayrıca birer sorgu çalıştırdığında ortaya çıkar. Çoğu ORM bunu, ilişkili veriyi baştan bir ya da iki sorguyla getiren eager loading ile çözer.

---

Software Dictionary: https://softwaredictionary.org/tr · https://softwaredictionary.org/tr/llms.txt
