İlişkisel Veritabanları, ORM ve Doctrine

6,713 views

Published on

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

Published in: Technology

İlişkisel Veritabanları, ORM ve Doctrine

  1. 1. İlişkisel Veritabanları, ORM
 ve Doctrine
  2. 2. İ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 1 ad Muhittin soyad Özer eklenme_tarihi 2014-02-22 09:30:00 2 Ali Emre Çakmakoğlu 2014-02-22 09:35:40 3 Alpcan Aydın 2014-02-22 12:15:23 4 5 Aybars Rasim Canser Cengaver Yanbakan 2014-02-22 13:55:09 2014-02-22 16:10:00
  3. 3. İlişkisel Veritabanı Örnekleri
  4. 4. 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.
  5. 5. İ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.
  6. 6. İ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.
  7. 7. İlişki Türleri
  8. 8. 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 :)
  9. 9. 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ş
  10. 10. 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.
  11. 11. 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
  12. 12. 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
  13. 13. Many-to-Many İlişki Örnekleri • Öğrenci - Ders • Ürün - Mağaza • Oyuncu - Film • Spor Kulübü - Branş • Üye - Üye (Takip Ettikleri, Takip Edenler)
  14. 14. ORM Object Relational Mapping
  15. 15. 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.
  16. 16. 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
  17. 17. 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
  18. 18. ORM'nin Dezavantajları • Performans • Efektif Olmayan SQL sorguları • Öğrenme Süreci • Modelleme Hataları • Kullanım Hataları
  19. 19. PHP İle Yazılan ORM Kütüphaneleri
  20. 20. Sensio Labs tarafından geliştirilen ORM, DBAL ve ODM gibi veritabanı çözümleri sunan PHP kütüphanesidir.
  21. 21. 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ığı.
  22. 22. 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 Doctrine / Doctrine2 Propel Eloquent DataMapper RedBean php.activerecord Soru Sayısı 4569 / 6045 829 937 882 140 120
  23. 23. 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
  24. 24. 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
  25. 25. Entity Manager ve CRUD İşlemleri • EntityManager sınıfı Doctrine’in komuta merkezidir.
  26. 26. 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.
  27. 27. Repository Genişletme
  28. 28. Doctrine'i Projemize Dahil Etmek Uygulamalı Anlatım
  29. 29. 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.
  30. 30. 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.
  31. 31. 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.
  32. 32. 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
  33. 33. 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
  34. 34. 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
  35. 35. Sonuç
  36. 36. Soru & Cevap
  37. 37. Teşekkürler twitter.com/muhittin facebook.com/muhittinozer github.com/muhittin muhittin@muhittinozer.com

×