Object-Relational Mapping (ORM) Nedir?

Object-Relational Mapping (ORM), nesne yönelimli programlama ile ilişkisel veri tabanları arasındaki yapısal uyumsuzluğu çözmek amacıyla geliştirilen bir teknolojidir. Modern yazılım geliştirme süreçlerinde, verilerin ilişkisel veri tabanlarında tablo biçiminde saklanması ve uygulamaların nesne yönelimli dillerle yazılması, iki farklı paradigmanın uyumunu zorlaştırmaktadır. ORM, veri tabanındaki tabloları, programlama dilindeki nesnelerle eşleştirerek geliştiricilerin SQL yazma zorunluluğunu ortadan kaldırır ve veri tabanı işlemlerini daha kolay, verimli ve okunabilir hale getirir.

Object-Relational Mapping (ORM) / Nesne-İlişkisel Eşleme

Object-Relational Mapping (ORM) / (Türkçe: Nesne ile İlişkisel Haritalama/Eşleme), nesne tabanlı programlama dilleri ile ilişkisel veri tabanları arasındaki uyumsuzluğu gidermek için kullanılan bir tekniktir. Yazılım geliştirme süreçlerinde, verilerin ilişkisel veri tabanlarında (tablo yapısında) saklanması, ancak uygulamaların nesne yönelimli dillerle yazılması, iki farklı paradigmanın bir araya gelmesini zorlaştırır. ORM, bu iki dünyayı bir araya getirerek, geliştiricilere ilişkisel veri tabanlarıyla çalışırken daha kolay bir yol sunar. ORM araçları, veri tabanı tablosu yapısını programlama dilindeki nesnelerle eşleştirerek, SQL yazma gerekliliğini ortadan kaldırır ya da en aza indirir¹.

ORM’nin Temel Prensipleri

ORM, veri tabanındaki tablolardaki verilerin, nesne yönelimli programlamada kullanılan sınıflar ve nesneler ile ilişkilendirilmesiyle çalışır. Örneğin, bir “Kullanıcı” sınıfı, ilişkisel veri tabanında bir “kullanıcılar” tablosuyla ilişkilendirilebilir. ORM araçları, bu sınıfları kullanarak veri tabanındaki satırları nesneler olarak temsil eder. Geliştiriciler, SQL sorguları yazmak yerine, doğrudan bu sınıflarla etkileşim kurarak verileri çekebilir, güncelleyebilir, ekleyebilir veya silebilir.

ORM’nin temel prensipleri şunlardır:

  1. Tablo-Nesne Eşleşmesi (Mapping): Her veri tabanı tablosu bir sınıfla eşleştirilir. Örneğin, “Kullanıcı” tablosu “Kullanıcı” sınıfına, “Ürün” tablosu “Ürün” sınıfına eşlenebilir.
  2. Satır-Nesne Eşleşmesi: Veri tabanındaki her satır bir nesne olarak temsil edilir. Bir “kullanıcı” tablosundaki her satır, programda bir “Kullanıcı” nesnesine karşılık gelir.
  3. Kolon-Özellik Eşleşmesi: Tablolardaki her kolon, sınıflardaki özelliklere (property) karşılık gelir. Örneğin, “kullanıcı_adı” kolonu, “Kullanıcı” sınıfındaki “kullanıcı_adı” özelliğine bağlanır.
  4. SQL İşlemlerinin Soyutlanması: ORM, SQL sorgularını otomatik olarak oluşturur. Geliştirici, nesneler üzerinde işlemler yapar ve ORM bu işlemleri SQL sorgularına dönüştürüp veri tabanına gönderir.

ORM’nin Avantajları

ORM araçları, yazılım geliştirme süreçlerinde birçok avantaj sağlar:

  1. SQL Bilmeye Gerek Kalmaması: ORM kullanarak, geliştiricilerin SQL sorguları yazma zorunluluğu ortadan kalkar. Nesne yönelimli programlama ile tanımlı yöntemler ve nesneler kullanarak veri tabanı işlemleri yapılabilir.
  2. Zamandan Tasarruf: Özellikle büyük projelerde, veri tabanı işlemleri için sürekli SQL yazmak zaman alıcıdır. ORM ile bu işlemler daha hızlı bir şekilde tamamlanabilir.
  3. Taşınabilirlik: ORM araçları, farklı veri tabanlarıyla çalışabilen soyutlama katmanları sağlar. Örneğin, PostgreSQL ile geliştirilmiş bir uygulama, minimum değişikliklerle MySQL’e geçiş yapabilir.
  4. Bakım Kolaylığı: SQL sorgularının karmaşıklığını yönetmek, özellikle büyüyen projelerde zor olabilir. ORM, kodu daha okunabilir ve yönetilebilir hale getirir.
  5. Tip Güvenliği: Nesneler ve sınıflar üzerinden işlem yapılması, hataların derleme aşamasında tespit edilmesine olanak sağlar. SQL yazarken yapılabilecek tip hataları, ORM sayesinde minimuma iner.

ORM’nin Dezavantajları

Her teknolojide olduğu gibi ORM’nin de bazı dezavantajları vardır:

  1. Performans: ORM araçları, karmaşık SQL sorgularının otomatik olarak oluşturulmasını sağlar, ancak bu durum performans açısından her zaman verimli olmayabilir. Bazı durumlarda, manuel yazılmış SQL sorguları daha optimize edilmiş ve hızlı olabilir.
  2. Yüksek Öğrenme Eğrisi: ORM araçlarının kullanımı bazı geliştiriciler için başlangıçta karmaşık olabilir. Özellikle büyük ve karmaşık projelerde, ORM’nin doğru yapılandırılması zaman alabilir.
  3. Abstraction Overhead: ORM, SQL sorgularını soyutladığı için, bazen geliştirici SQL sorgularının tam olarak nasıl çalıştığını veya nasıl optimize edildiğini gözden kaçırabilir. Bu, beklenmeyen performans sorunlarına yol açabilir.
  4. Esneklik Kaybı: ORM’ler genellikle basit CRUD (Create, Read, Update, Delete) işlemleri için mükemmel çalışır, ancak daha karmaşık sorgular gerektiğinde, ORM’nin sağladığı soyutlama katmanı esnekliği kısıtlayabilir.

ORM Araçları ve Örnekleri

Pek çok farklı ORM aracı mevcuttur ve her biri farklı programlama dilleri için geliştirilmiştir. İşte en popüler ORM araçlarından bazıları:

  1. Hibernate (Java): Java platformu için en popüler ORM araçlarından biridir. Hibernate, Java sınıflarını veri tabanı tablolarıyla ilişkilendirir ve SQL yazmadan veri tabanı işlemlerini gerçekleştirmenizi sağlar.
  2. Entity Framework (C#): Microsoft’un C# programlama dili için geliştirdiği ORM çözümüdür. Entity Framework, SQL Server, PostgreSQL ve MySQL gibi farklı veri tabanlarını destekler.
  3. Django ORM (Python): Django web framework’ünün bir parçası olan Django ORM, Python programcılarına veri tabanı işlemlerini basitleştirme imkânı sağlar. Model sınıfları aracılığıyla veri tabanında işlem yapmayı sağlar.
  4. SQLAlchemy (Python): Python için esnek ve güçlü bir ORM aracıdır. SQLAlchemy, hem ORM hem de SQL sorguları üzerinde daha fazla kontrol sağlamak isteyen geliştiriciler için iki farklı çalışma modu sunar.
  5. Eloquent (PHP): Laravel PHP framework’ünün ORM çözümü olan Eloquent, veri tabanı işlemlerini nesne yönelimli bir yapıda gerçekleştirme imkânı sağlar.

ORM Nasıl Kullanılır? (Örnek Kod)

ORM kullanımını anlamak için basit bir örnek üzerinden gidelim. Bu örnekte, bir “Kullanıcı” tablosuyla etkileşim kuran bir sınıf oluşturacağız. Örnek kod Python ve SQLAlchemy kullanılarak verilmiştir.

from sqlalchemy import create_engine, Column, Integer, String
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker

# ORM için temel bir base sınıfı oluşturuyoruz
Base = declarative_base()

# Kullanıcı tablosuna karşılık gelen sınıf
class Kullanici(Base):
    __tablename__ = 'kullanici'

    id = Column(Integer, primary_key=True)
    ad = Column(String)
    soyad = Column(String)

# Veri tabanı bağlantısını oluşturuyoruz
engine = create_engine('sqlite:///veritabani.db')

# Tabloları oluşturuyoruz
Base.metadata.create_all(engine)

# Oturum açıyoruz
Session = sessionmaker(bind=engine)
session = Session()

# Yeni bir kullanıcı ekliyoruz
yeni_kullanici = Kullanici(ad="Ahmet", soyad="Yılmaz")
session.add(yeni_kullanici)
session.commit()

# Tüm kullanıcıları sorguluyoruz
kullanicilar = session.query(Kullanici).all()
for kullanici in kullanicilar:
    print(kullanici.ad, kullanici.soyad)

Bu basit örnek, ORM’nin nasıl çalıştığını gösterir. SQLAlchemy, Python sınıflarını veri tabanı tablolarıyla eşleştirir ve SQL sorgularını otomatik olarak oluşturur.

Değerlendirme

Object-Relational Mapping (ORM), yazılım geliştiricilere ilişkisel veri tabanlarıyla daha etkili ve verimli bir şekilde çalışma imkânı sağlar. ORM araçları sayesinde SQL sorguları yazmadan veri tabanı işlemleri gerçekleştirilebilir, bu da kodun daha okunabilir, bakımı kolay ve taşınabilir olmasını sağlar. Ancak, ORM’nin her proje için uygun olmayabileceğini ve performans veya esneklik açısından bazı dezavantajlar getirebileceğini unutmamak gerekir. ORM’yi kullanmadan önce proje gereksinimlerini iyi analiz etmek önemlidir.

Kaynaklar

1- ORM (Object-Relational Mapping) Nedir? Erişim tarihi: 30/09/2024. https://wpw.com.tr/orm-object-relational-mapping-nedir/

Paylaş arkadaşlarında görsün
bNET

bNET

Eğitimci, web tasarımcı, grafik tasarımcı...

Articles: 100

Leave a Reply

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Gizlilik politikası* ve site kullanım koşullarını kabul ediyorum.