İlişkisel veritabanları, orm ve doctrine

38
İlişkisel Veritabanları, ORM ve Doctrine

Upload: muhittin-oezer

Post on 22-Jun-2015

3.909 views

Category:

Technology


5 download

DESCRIPTION

PHPKonf. 22 Şubat 2014 - Bahçeşehir Üniversitesi

TRANSCRIPT

Page 1: İlişkisel Veritabanları, ORM ve Doctrine

İlişkisel Veritabanları, ORMve Doctrine

Page 2: İlişkisel Veritabanları, ORM ve Doctrine
Page 3: İlişkisel Veritabanları, ORM ve Doctrine

İlişkisel Veritabanı Nedir?

Verilerin satır ve sütunlardan oluşan tablolarda standart bir yapıda saklandığı, yüksek veri tutarlılığına sahip veritabanlarıdır. !İlişkisel veritabanı, veritabanlarının ilişkisi değil veritabanı içerisindeki nesnelerin ilişkili olmasıdır.

ID ad soyad eklenme_tarihi1 Muhittin Özer 2014-02-22 09:30:002 Ali Emre Çakmakoğlu 2014-02-22 09:35:403 Alpcan Aydın 2014-02-22 12:15:234 Aybars Cengaver 2014-02-22 13:55:095 Rasim Canser Yanbakan 2014-02-22 16:10:00

Page 4: İlişkisel Veritabanları, ORM ve Doctrine

İlişkisel Veritabanı Örnekleri

Page 5: İlişkisel Veritabanları, ORM ve Doctrine

Diğer Veritabanı Yapıları

• Hiyerarşik Veritabanları: Ağaç-Dal mimarisinde geliştirilmiş veritabanlarıdır.

• Çok Boyutlu Veritabanları: Verileri kategorize eden boyutları ve ölçümleri taşıyan veritabanlarıdır.

• Yapılanmış Bellek (Anahtar Değer Depoları): Sabit bir veri düzeni olmayan, anahtar ve değer taşıyan veritabanlarıdır.

Page 6: İlişkisel Veritabanları, ORM ve Doctrine

İlişkisel Veritabanı Kavramları

• Nesne (Entity): Veritabanında tutulan her bir veri modelidir.

• Özellik (Attribute): Veritabanı nesnelerine ait verilerdir.

• Anahtar (Key): Veritabanı nesnelerinin ayırıcı özellikleridir.

• Birincil Anahtar (Primary Key): Her bir nesne için benzersiz olan tanımlayıcı anahtardır.

Page 7: İlişkisel Veritabanları, ORM ve Doctrine

İlişkisel Veritabanı Kavramları

• İlişki (Relation): Veritabanı nesnelerinin birbirleri ile olan ilişkilerinin tanımlanmasıdır.

• Yabancı Anahtar (Foreign Key): Veritabanı nesnelerinin birbirleri ile olan ilişkilerinde bu ilişkinin kurulmasını sağlayan ve ilişkili olunan nesnede ilişki kurulan nesnenin birincil anahtarının değerini taşıyan özelliktir.

Page 8: İlişkisel Veritabanları, ORM ve Doctrine

İlişki Türleri

Page 9: İlişkisel Veritabanları, ORM ve Doctrine

One-to-One İlişki

• Her iki tabloda da bir nesneye karşılık yalnızca bir nesne ile ilişki kurulabilir.

• En güzel örnek: Evlilik :)

Not: Bu örnekte Medeni Kanun baz alınmıştır :)

Page 10: İlişkisel Veritabanları, ORM ve Doctrine

One-to-Many İlişki

• Bu ilişki türünde ise elimizdeki nesne ile ilişkili olan nesneden birden fazla olabilmektedir.

• Örnek: Üye-Sipariş

Page 11: İlişkisel Veritabanları, ORM ve Doctrine

Many-to-One İlişki

• Bu ilişki türü ise One-to-Many ilişkinin tam tersidir. Yani ilişkili olan nesne gibi bir çok nesne karşı tarafta aynı nesne ile ilişkili olabilir.

• Örnek: Aynı örnek'te bu sefer Sipariş - Üye ilişkisini ele alabiliriz.

Page 12: İlişkisel Veritabanları, ORM ve Doctrine

Many-to-One ve One-to-Many İlişki Örnekleri

• Üniversite - Fakülte

• Fakülte - Bölüm

• Marka - Model

• Kategori - Kategori (Alt Kategori Yapısı)

• İl - İlçe

Page 13: İlişkisel Veritabanları, ORM ve Doctrine

Many-to-Many İlişki

• Eğer nesneler birbirleri ile karşılıklı olarak birden fazla nesne ile ilişkili olabiliyorsa bu ilişki türü Many-to-Many ilişki olmaktadır.

• Örnek: Haber - Kategori

Page 14: İlişkisel Veritabanları, ORM ve Doctrine

Many-to-Many İlişki Örnekleri

• Öğrenci - Ders

• Ürün - Mağaza

• Oyuncu - Film

• Spor Kulübü - Branş

• Üye - Üye (Takip Ettikleri, Takip Edenler)

Page 15: İlişkisel Veritabanları, ORM ve Doctrine

ORM

Object Relational Mapping

Page 16: İlişkisel Veritabanları, ORM ve Doctrine

ORM Nedir?

• ORM kavramı ilişkisel veritabanlarında bulunan nesnelerin, özelliklerinin ve ilişkilerinin yazılım tarafında tanımlanarak bu kavramların yazılım tarafında da karşılıklarının oluşturulması (veritabanının haritalanması) işlemini ifade eder.

• CRUD işlemleri için veritabanı sorgusu yazmanıza gerek kalmaz. Bu işlemleri sizin yerinize ORM gerçekleştirir.

Page 17: İlişkisel Veritabanları, ORM ve Doctrine

ORM'nin Avantajları

• OOP Kullanmaya Zorlar

• Geliştirme Hızı

• Standart Kodlar

• Veritabanından Bağımsız Bir Yazılım

• Sizin İş Yükünüzü Hafifletir

Page 18: İlişkisel Veritabanları, ORM ve Doctrine

ORM'nin Avantajları

• Sorgu Yazmaktan Kurtarır (Güvenlik açığı vermenizi engeller)

• Test Edilebilir Kod

• Ekstra Araçlar Sağlar (Dil Desteği, Tree Yapısı, Slug Yapısı, Soft-Delete vb.)

• Event (Listener) Desteği

Page 19: İlişkisel Veritabanları, ORM ve Doctrine

ORM'nin Dezavantajları

• Performans

• Efektif Olmayan SQL sorguları

• Öğrenme Süreci

• Modelleme Hataları

• Kullanım Hataları

Page 20: İlişkisel Veritabanları, ORM ve Doctrine

PHP İle Yazılan ORM Kütüphaneleri

Page 21: İlişkisel Veritabanları, ORM ve Doctrine

Sensio Labs tarafından geliştirilen ORM, DBAL ve ODM gibi veritabanı çözümleri sunan PHP kütüphanesidir.

Page 22: İlişkisel Veritabanları, ORM ve Doctrine

Neden Doctrine Kullanmalıyım?

• 2006’dan beri geliştirilen stabil bir ORM kütüphanesidir.

• Esnek ve güçlü nesne haritalama ve sorgu özelliklerine sahiptir.

• En basit seviyeden en karmaşık sistemlere kadar her seviyede çözümler sunabilmektedir.

• Birçok framework ile olan entegrasyon kolaylığı.

Page 23: İlişkisel Veritabanları, ORM ve Doctrine

Neden Doctrine Kullanmalıyım?

• Büyük bir kitle tarafından kullanılması ve geliştiriliyor olmasından dolayı geniş destek ağına sahip olması

ORM Kütüphanesi Soru SayısıDoctrine / Doctrine2 4569 / 6045

Propel 829Eloquent 937

DataMapper 882RedBean 140

php.activerecord 120

Page 24: İlişkisel Veritabanları, ORM ve Doctrine

Doctrine Kurulumu

• Arşiv (zip, tar.gz vs) dosyası olarak indirmek

• PEAR Paketi olarak kurmak:

• pear channel-discover pear.doctrine-project.org

• pear install doctrine/DoctrineORM-2.3.5

• Composer paket yöneticisi ile kurmak:

• doctrine/orm

Page 25: İlişkisel Veritabanları, ORM ve Doctrine

Entity Kavramı

• Entity’ler veritabanında tutulacak her bir nesnenin Doctrine tarafında karşılığıdır. 4 farklı şekilde entity yapısı tanımlanabilir:

• Annotation

• XML

• YAML

• PHP Kodu

Page 26: İlişkisel Veritabanları, ORM ve Doctrine

Entity Manager ve CRUD İşlemleri

• EntityManager sınıfı Doctrine’in komuta merkezidir.

Page 27: İlişkisel Veritabanları, ORM ve Doctrine

Repository Kavramı

• Repository sınıfları veritabanından nesneleri sorgulamak için kullanılan sınıflardır.

• Repository ifadesinin Türkçe karşılığı depodur.

Page 28: İlişkisel Veritabanları, ORM ve Doctrine

Repository Genişletme

Page 29: İlişkisel Veritabanları, ORM ve Doctrine

Doctrine'i Projemize Dahil Etmek

Uygulamalı Anlatım

Page 30: İlişkisel Veritabanları, ORM ve Doctrine

Query Builder Kullanımı

• Bazen EntityRepository metodları bize istediğimiz verileri sunamayabilir.

• Query Builder, bizi böyle durumlarda SQL yada DQL sorguları yazmaktan kurtaran bir Doctrine sınıfıdır.

Page 31: İlişkisel Veritabanları, ORM ve Doctrine

DQL Kullanımı

• Query Builder kullanımının yetersiz kaldığı yada performans kaybına neden olduğu durumlar için Doctrine bize DQL söz dizimi ile sorgu imkanı sağlıyor.

• SQL söz dizimi ile birebir aynı olan ama tablo yerine Doctrine nesneleri ve sütunlar yerine bu nesnelerin özelliklerinin kullanıldığı bir yapısı vardır.

Page 32: İlişkisel Veritabanları, ORM ve Doctrine

Doğal SQL Sorguları Yazmak

• SQL'in gücünü kullanmak istediğinizde Doctrine doğal SQL sorguları da yazmanıza olanak sağlıyor.

• View, Stored Procedure vb SQL özelliklerini kullanmak istediğiniz zaman bu seçenek en çok ihtiyacınız olan yöntem olacaktır.

Page 33: İlişkisel Veritabanları, ORM ve Doctrine

Doctrine Event Sistemi (Lifecycle Events)

• Doctrine kendi event sistemine LifeCycle Events ismini veriyor.

• Veritabanında yapılan işlemlerle alakalı tüm sürece bu event'ler sayesinde dahil olabilirsiniz.

• 2 Farklı yöntem vardır:

• Entity Dosyası içerisinde tanımlanan metodlar

• Listener Class'ı oluşturularak

Page 34: İlişkisel Veritabanları, ORM ve Doctrine

Doctrine'de Ön Tanımlı Event'ler

• preRemove – Silme işleminden önce

• postRemove – Silme işleminden sonra

• prePersist – Yeni kayıt eklemeden önce

• postPersist – Yeni kayıt ekledikten sonra

• preUpdate – Herhangi bir kayıt güncellenmeden önce

• postUpdate – Herhangi bir kayıt güncellendikten sonra

Page 35: İlişkisel Veritabanları, ORM ve Doctrine

Doctrine'de Ön Tanımlı Event'ler

• postLoad – Veri tabanından kayıtlar çekildikten sonra

• loadClassMetadata – Entity tanımalamaları (metadata’lar) okunduktan sonra

• preFlush – Biriktirilen işlemler veritabanına uygulanmadan önce

• onFlush – Biriktirilen işlemler hesaplanıp sorgu çalıştırılmaya hazır olduğunda

• postFlush – Biriktirilen işlemler veritabanına uygulandıktan sonra

• onClear – Veritabanına uygulanmak üzere biriktirilen işlemler temizlendiğinde

Page 36: İlişkisel Veritabanları, ORM ve Doctrine

Sonuç

Page 37: İlişkisel Veritabanları, ORM ve Doctrine

Soru & Cevap